什么是IsRoot,IsAbstract&使用UML中的IsLeaf?

时间:2013-08-07 00:06:02

标签: uml

我遇到了IsRootIsAbstract& IsLeaf但是你不明白何时使用它们。

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

  

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

我的理解

  1. IsRoot似乎暗示它是一个超类
  2. IsAbstract似乎暗示它是一个抽象类
  3. IsLeaf是一个无法继承但可以实例化的类。
  4. 有人可以给我一个使用这些模型的模型的真实示例吗?例如,我可以想象诸如'car'之类的类是超类并且是抽象的,在它之下你会有类似'Volvo','Chevrolet'等类。

2 个答案:

答案 0 :(得分:7)

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

isRoot:指定GeneralizableElement是否为根   没有祖先的GeneralizableElement。 True表示它   可能没有祖先,虚假表明它可能有祖先   (此时它是否真的有任何祖先)。

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

如果为true,则分类器不提供完整的声明,通常不能实例化。摘要   分类器旨在被其他分类器使用(例如,作为一般元关系或概括的目标   关系)。默认值为false。

  • isLeaf表示您无法重新定义该元素,与某些编程语言中的final相同。
  

指示是否可以进一步重新定义RedefinableElement。如果值为true,则不可能   进一步重新定义RedefinableElement。默认   价值是假的。

答案 1 :(得分:2)

不是现实生活中的例子,而是指向某些人的链接。

  1. isRoot:我认为这不再是UML的一部分。那篇文章是从2004年开始的,大约是UML 2发布的时候,我怀疑Visio支持它。它仍然可能不支持它。
  2. isAbstract:最好让所有超类都抽象化,这样就无法创建子类成员的实例。类本质上是实例集。实例成为超集的成员而没有子集是什么意思?目前尚不清楚这种实例的分类究竟是什么,并且可能会随着时间的推移而无意中发生变化。创建子类disjoint(非重叠)和covering(指定了所有已知的子类)也是一个好主意。在Lahman's book中使用Avians有更多细节和现实例子。
  3. isLeaf:基本上阻止人们覆盖您的代码。我无法验证this quotation,但据说The Unified Modeling Language Reference Manual说:
      

    成为一片叶子或被限制为叶子并不是根本   语义属性,而不是软件工程机制   控制人类行为。

  4. 这有帮助吗?