7

我遇到了以下描述IsRoot,但是不明白您何时会使用它们IsAbstractIsLeaf

摘自http://www2.sys-con.com/itsg/virtualcd/dotnet/archives/0108/clark/index.htm

通过选中 IsRoot 复选框,您可以限制该类从其他类继承。检查 IsAbstract 会限制类被实例化,并强制客户端实例化派生类以访问该类的功能。检查 IsLeaf 表示该类是密封的。密封类是不可继承的,有助于限制继承链的深度。

我的理解

  1. IsRoot 似乎暗示它是一个超类
  2. IsAbstract 似乎暗示它是一个抽象类
  3. IsLeaf 是一个不能被继承但可以被实例化的类。

有人可以给我一个使用这些模型的真实示例吗?例如,我可以想象诸如“汽车”之类的类是超类并且是抽象的,在它之下您将有诸如“沃尔沃”、“雪佛兰”等类。

4

2 回答 2

10
  • isRootUML2 中不再存在。在 UML 1 中,它意味着(来自规范):

isRoot:指定GeneralizableElement 是否是没有祖先的根GeneralizableElement。true 表示它可能没有祖先,false 表示它可能有祖先(无论它现在实际上是否有任何祖先)。

  • isAbstract表示元素不完整,无法实例化。

如果为真,则分类器不提供完整的声明并且通常不能被实例化。抽象分类器旨在供其他分类器使用(例如,作为一般元关系或泛化关系的目标)。默认值为假。

  • isLeaf意味着您不能重新定义元素,就像final在某些编程语言中一样。

指示是否可以进一步重新定义 RedefinableElement。如果该值为 true,则无法进一步重新定义 RedefinableElement。默认值为假。

于 2013-08-07T05:46:38.963 回答
2

不是现实生活中的例子,而是一些链接。

  1. isRoot: 我认为这不再是 UML 的一部分。那篇文章来自 2004 年,大约是 UML 2 出来的时候,我怀疑 Visio 是否支持它。它可能仍然不支持它。
  2. isAbstract: 将所有超类抽象化是个好主意,这样您就不能创建不是子类成员的实例。类本质上是实例集。一个实例成为超集的成员而不是任何子集的成员意味着什么?目前尚不清楚此类实例的确切分类是什么,并且它可能会随着时间的推移而无意中发生变化。disjoint制作子类(不重叠)和covering(指定所有已知的子类)也是一个好主意。Lahman 的书中有更多细节和使用 Avians 的真实示例。
  3. isLeaf: 从本质上防止人们覆盖你的代码。我无法验证这个报价,但据说统一建模语言参考手册说:

    成为叶子或被约束成为叶子不是基本的语义属性,而是控制人类行为的软件工程机制。

这有帮助吗?

于 2013-08-07T01:46:20.740 回答