【问题标题】:Is UML useful to describe templated code?UML 对描述模板化代码有用吗?
【发布时间】:2011-02-24 15:08:19
【问题描述】:

我想知道 UML 是否有助于描述大量模板化的代码。我知道 UML 中有参数化类的概念 (vector<T> <---- <<bind>> ---- vector<int>),但这不足以描述我们可以使用模板拥有的复杂 duck-typed 关系。我总是可以在这些类之间建立关联,但在我看来它实际上并不能帮助理解它是如何工作的。

此外,考虑到例如 STL 库,算法通常被实现为函数,因此不太适合 OOP 模型,尽管它们的行为仍然很像引入类之间关联的对象。

那么,绘制 UML 图来描述这样的模板代码有意义吗?如果是这样,哪种图表最有用 - 在“标准”OOP 中,我看到大部分时间都在使用类图,但对于模板化代码,其他类型的图表可能会更有帮助?如果 UML 不太适合,我还能用什么?

【问题讨论】:

  • +1 从那以后,我想起了用 Telelogic Rhapsody 建模模板的折磨。
  • “否”,因为更一般的问题“UML 有用吗?”的答案是“不”。
  • @James McNellis:那么有什么用处?您将如何对系统进行高级概述?深入研究所有这些类的源代码/cmets 以了解它们之间的关系似乎不是一个好选择。
  • 良好的文档和描述系统架构的几个框图。
  • @James:据我所知,UML 只是对框图进行标准化,以避免每个人都发明自己的视觉语言。那么你到底在说什么样的框图呢?

标签: c++ oop templates uml


【解决方案1】:

我认为这取决于。

如果不同的实例化会导致明显不同的行为或关系,那么虽然可以使用 UML 进行建模,但它会很丑陋。另一方面,如果不同实例化的行为真的有那么大的不同,那么我不确定模板是否是一个好主意。

但是,如果类之间的关系无论以何种方式实例化都基本保持不变,那么 UML 类图对于对这些关系进行建模与对非参数化类一样有用。

【讨论】:

  • 只有在模板化的类表现为类之前,这才是正确的。想象一个算法(模板化函数),它接受一个迭代器和一个谓词,做一些事情并将结果写入输出容器。我将如何用图表表示这种关系?它是在迭代器、谓词和容器之间创建关联的函数,但简单地通过关联绘制它并不能解释任何事情,而且,函数远不止一个......
  • @7vies:OOP(除其他外)声明“一切都是对象”,所以不用担心函数:)...记住模板方法、策略、抽象工厂、访问者... ?
  • @Gabriel:是的,这就是为什么模板元编程不是那么多的 OOP。我可以看到的最大区别是 OOP 是关于“复杂对象,简单交互”,而模板代码通常在类之间具有更复杂的交互。有些图表可能仍然有用,这就引出了我的问题。
  • @7vies:我认为你没有理解我的评论。 OOP 是关于具有简单交互的简单对象...... AFAIK 是真正的模板(参数化类型)来自代数规范,而不是来自 OOP。但是元编程是 Smalltalk 的脉络。这些模式都是行为对象 - C++ 中的函子。
  • @Gabriel:现在我不太明白你的意思 :) OOP 中的对象可能有简单的接口,但它们可以有一个非常复杂的底层结构,所以我不会说它们总是“简单的”。无论如何,OOP 方法清楚地将它们之间的对象消息 分开。函子/高阶函数与函数式编程有关,这与 OOP 明显不同。应用于类的元编程是两者的混合,因此如何使用面向 OOP 的工具来描述这一点并不明显。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多