2

我有 2 个 UML 类,它们被命名为所有者,然后是车辆。

我想知道我是否可以声明该车辆“概括”所有者,因为我希望对象车辆继承分配给所有者的属性。这似乎不对,因为我不会将车辆视为所有者的子类或子类型,但看到我是 UML 的新手,我不是专家。

4

2 回答 2

4

你说,“车辆'概括'所有者”,然后说,“我希望对象车辆继承分配给所有者的属性。” 这两个陈述是矛盾的,因为超类泛化而子类专攻。由于您希望 Vehicle 从 Owner 继承属性,因此我假设您在询问是否可以声明 Owner泛化Vehicle(而 Vehicle专门化Owner)。

在现实世界中,并不是说每辆车都是一种所有者。你的车拥有什么?你的意思是它“拥有”它的引擎、车轮和车门吗?这与“拥有”您的汽车或房屋的概念相同吗?

类的目的不仅仅是代表可重用属性和方法的存储桶,它们似乎可以节省一些编码时间——尽管许多程序员都是这样对待它们的。它们被称为,因为它们代表问题域(即“现实世界”)中事物的类。这是许多程序员误入歧途的地方——他们专注于解决方案领域的事情,它变化得更快,它们失去了面向对象的所有好处。OOA / OOP 的关键原则之一是问题域不经常更改,因此它为构建软件提供了一个相对稳定的基础。如果你声称一些奇怪的东西,例如“车辆总是一种所有者”,你建立在不稳定的沙子上,当你发现一个不再那么方便的情况时,你可能会花费大量的时间来逆流而上。以何种方式,车辆始终是所有者?许多面向业务的主题专家会同意你的观点吗?

于 2013-07-30T04:32:21.510 回答
1

您可以使用通用抽象类来重新组合通用属性。假设您希望OwnerVehicle共享一个通用名称属性。您可以使用以下模型。

UML 通用属性 http://app.genmymodel.com/engine/xaelis/commonAttributes.jpg

于 2013-07-30T07:32:06.807 回答