因此,我目前正在自我学习 UML ,我进行了在线测验以帮助加深对它的理解。
问的一个问题:
如何使用UML2类图为以下情况建模:
“有多种鸟类,例如黑鸟,鹅口疮, 和star鸟。”
两个可用的选项是:
顶部的图为正确(我理解为什么),但是底部的图为 不正确 。为什么是这样?由于这三只鸟是从抽象类鸟继承而来的,并且遵循任何抽象方法,所以它们不是全部都是鸟吗?
答案 0 :(得分:2)
我认为有两个可能的答案:
从逻辑上讲,顶部是错误的,因为您不能自行创建Bird的实例。鸟类是所有鸟类的抽象分类。您只能创建鹅口疮,八哥和黑鸟。我不确定Bird实例是什么样子,但是会很自然。
在语法上,底部是错误的,因为抽象约束应在类的名称和类型之后应用。
我个人认为我会放弃第二名(这是一个错误,谁在乎吗?),并专注于第一名,如果我从事鸟类业务,那就更重要了。
答案 1 :(得分:1)
UML 2.5规范在p中说。 98
Classifier的isAbstract属性为true时,指定Classifier是抽象的,即没有直接实例:抽象Classifier的每个实例都应是其专业之一的实例。
因此,Bird
是否用关键字abstract
装饰会限制无法/实例化它。如果您需要一个Bird
实例,则可以忽略它。如果要创建动物索引,则可能会有abstract Bird
,它告诉您基本需要在鸟的描述中包括的内容。但是您不能单独描述它。
就您而言,两个图表通常都是“正确的”。这仅取决于您未正确解释的上下文。两者都可以满足要求,因为没有要求您不能实例化Bird
。
答案 2 :(得分:1)
测验中的要求说: 有多种鸟类,例如黑鸟,鹅口疮和star鸟
但是它没有说明您应该掌握的有关鸟类的信息。因此,我的第一个假设是用户只会对类型感兴趣。
UML图:
是此要求的有效解决方案。 测验中的两个选项也是有效的解决方案,具体取决于您如何看待需求。需求给出了三个示例,在两个解决方案中都对其进行了显式建模。 “例如。”意味着可能还有其他鸟类,第一个解决方案可以更好地描述这一事实。在第二种解决方案中,您将没有示例列表中没有的“ Bird”实例。
但是这种解决方案只有在您可以拥有一些未显示的属性和操作的情况下才有意义-恕我直言,最低要求是跟踪鸟的类型-在大多数实现中,从类名中检索它非常尴尬环境。
就我个人而言,我认为这不是通过测验中的示例来解释继承的好方法。继承的实现成本很高(例如,在大多数编程语言中,每个继承的类最终都拥有单独的源代码文件),而这笔费用应该会给您带来一定的好处。当要描述的事物的属性和行为不同并且您需要不同的实现时,通常就是这种情况。 “黑鸟”和“蓝鸟”可能仅在颜色上有所不同(颜色属性是区分符)。恕我直言,在这种情况下,最好具有: 比