根据UML的UML规范在2.5版中对UML枚举和UML类之间的泛化关系建模是否正确?在页166中,规范声明“作为分类器的规范,枚举可以参与泛化关系”。然而,在类和枚举之间放置泛化关系是否正确?如果是,那么如何解释这样的枚举呢?
答案 0 :(得分:1)
不,你不能概括一个类的枚举。枚举是继承自分类器的数据类型。
分类器根据对象的特征表示对象的分类。分类符与推广相关。
一个类是一个EncapsulatedClassifier。
EncapsulatedClassifier可以拥有Ports来指定类型化的交互点。
一个类只能组成一些分类器。
Class对一组对象进行分类,并指定表征这些对象的结构和行为的特征。类可以具有内部结构和端口。
来自元模型:
答案 1 :(得分:1)
我仍然没有找到形式上的约束,但是您可以使用Generalization定义来找到证据,证明在Class和Enumeration之间进行归纳是否有意义(或查找具有解释的示例):
泛化是更一般性之间的分类关系 分类器和更具体的分类器。每个实例 特定分类器也是通用分类器的实例。 (UML 2.5.1, p.138)
在您的构造中,Enumeration的实例也将是Class的实例(反之亦然)。现在,让我们看看这意味着什么。
归纳分类器时,其某些成员 概括是继承的,即它们的行为就像 在继承的分类器本身中定义。例如,一个继承的 作为属性的成员可以具有一个值或值的集合 在任何继承分类器的情况下...(UML 2.5.1, p.100)
实际上,枚举可以像任何分类器一样具有属性,因此为什么不从类继承那些属性呢?进一步研究作为枚举实例或类实例的含义,我们发现:
DataTypes模型类型,其实例仅通过其实例来区分 值。 ...枚举的每个值对应于其中一个 用户定义的EnumerationLiterals。 ... EnumerationLiterals可能不 在它们存在期间发生变化,因此枚举上的所有属性 应该是只读的。 (UML 2.5.1, p. 209 f.)
哈哈,也许我们可以将对象的属性值(类的实例)枚举为枚举的值?枚举的实例会比Class的实例还要多吗?这是一个合适的解释吗?
我只是大声思考,不确定这是否有意义。我只是不排除仅仅因为我从未遇到过或无法想象的一种解释。实际上,请看一下Java中的Enums-它们隐式扩展了类java.lang.Enum
,而它们不能扩展其他用户定义的类或其他Enums的唯一原因是Java不支持状态的多重继承({{3 }}。