我遇到了IsRoot
,IsAbstract
& IsLeaf
但是你不明白何时使用它们。
摘自http://www2.sys-con.com/itsg/virtualcd/dotnet/archives/0108/clark/index.htm:
通过选中IsRoot复选框,您将限制该类继承自其他类。检查IsAbstract限制类被实例化,并强制客户端实例化派生类以访问类的功能。检查IsLeaf表示该类已密封。密封类是不可继承的,有助于限制继承链的深度。
我的理解
有人可以给我一个使用这些模型的模型的真实示例吗?例如,我可以想象诸如'car'之类的类是超类并且是抽象的,在它之下你会有类似'Volvo','Chevrolet'等类。
答案 0 :(得分:7)
isRoot
。在UML 1中,它意味着(来自规范):isRoot:指定GeneralizableElement是否为根 没有祖先的GeneralizableElement。 True表示它 可能没有祖先,虚假表明它可能有祖先 (此时它是否真的有任何祖先)。
isAbstract
表示该元素不完整且无法实例化。如果为true,则分类器不提供完整的声明,通常不能实例化。摘要 分类器旨在被其他分类器使用(例如,作为一般元关系或概括的目标 关系)。默认值为false。
isLeaf
表示您无法重新定义该元素,与某些编程语言中的final
相同。指示是否可以进一步重新定义RedefinableElement。如果值为true,则不可能 进一步重新定义RedefinableElement。默认 价值是假的。
答案 1 :(得分:2)
不是现实生活中的例子,而是指向某些人的链接。
isRoot
:我认为这不再是UML的一部分。那篇文章是从2004年开始的,大约是UML 2发布的时候,我怀疑Visio支持它。它仍然可能不支持它。isAbstract
:最好让所有超类都抽象化,这样就无法创建不子类成员的实例。类本质上是实例集。实例成为超集的成员而没有子集是什么意思?目前尚不清楚这种实例的分类究竟是什么,并且可能会随着时间的推移而无意中发生变化。创建子类disjoint
(非重叠)和covering
(指定了所有已知的子类)也是一个好主意。在Lahman's book中使用Avians有更多细节和现实例子。isLeaf
:基本上阻止人们覆盖您的代码。我无法验证this quotation,但据说The Unified Modeling Language Reference Manual说:
成为一片叶子或被限制为叶子并不是根本 语义属性,而不是软件工程机制 控制人类行为。
这有帮助吗?