在使用 Papyrus (+ Eclipse)时,我遇到了一个我最初认为是不一致的问题。但是在想知道之后,我开始认为我在UML设计的基本概念中可能有一个“bug”。
好吧,请考虑基本的类继承问题,其中Man
和Woman
是Person
的特化。 (换句话说,Person
是Man
和Woman
的超类。
然后,如果您将刻板印象 Worker
(例如,包含参数job
和salary
)应用于Person
,则应该子类也接收相同的原型Worker
?它们不应包含job
和salary
参数吗?
我真的虽然Stereotypes也是继承自超类,但是当我在Papyrus工具中实现这个设计时,我看不到任何继承的job
或salary
。每个子类都没有任何应用的Stereotype。
提前致谢!
======================编辑了解更多信息================== ==
我发现在2000年为UML v1.3打开了一个关于继承子类中构造型的问题。
Issue 3210: Inheritance of Stereotypes (uml-rtf)
在我的解释中,讨论中提供的示例正是我上面提到的。但是,审稿人似乎明白问题是要求Stereotype的子类型,而不是将Constraints从一个原型类传播到它的子类。
这是添加到UML v1.3中的要点:
刻板印象是GeneralizableElements。如果构造型是另一个构造型的子类型,那么它从其构造型超类型继承所有约束和标记值,并且它必须应用于相同类型的基类。构造型跟踪可以应用它的基类。
稍后,它在UML v1.4中被弃用,并在UML 2中被删除。
所以,基本上,根据我的解释,存在的问题......但是UML规范仍然没有指定它。
答案 0 :(得分:1)
我也认为刻板印象是继承的,但我在网上或UML标准中找不到关于这一点的任何引用。但是根据您的描述,您应该使用多重继承或接口。
原型用于扩展类 - 为类元素提供更多属性,而不是实例。 UML中的类具有名称,属性(字段)和方法。向类添加构造型时,实际上是在向类中添加另一组属性。例如,如果您正在编写MVC(模型 - 视图 - 控制器)系统,并且您想要指定哪些类是视图,哪些是模型,哪些控制器使用构造型将是一个很好的答案,因为您正在描述属性类的,而不是特定的实例。这似乎不是你的情况。