【问题标题】:Correct UML semantics and syntax正确的 UML 语义和语法
【发布时间】:2013-07-30 03:36:22
【问题描述】:

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

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

【问题讨论】:

    标签: uml


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回答。原谅我的n00bness。我明白,如果我说 Owner 概括了 Vehicle 并且 Vehicle 专门化了 Owner,那么说 Vehicle 是一种 Owner 是不正确的,因为我试图表达车辆的所有权,例如鲍勃拥有一辆福特。但是,我不确定如何代表我想要实现的目标。
    • 我想我会为扮演AssetOwner 角色的Person 和扮演Asset 角色的Vehicle 建模。然后,您可以将它们与关联联系起来。 (从英文语句开始,例如“一个Asset 由一个AssetOwner 拥有/一个AssetOwner 拥有任意数量的Assets。)在这个小小的评论框中很难向你展示。我建议你从Leon 开始Starr 的优秀文章,Articulate Class Models,其中有很多很好的例子。
    【解决方案2】:

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

    UML common attributes http://app.genmymodel.com/engine/xaelis/commonAttributes.jpg

    【讨论】:

    • 感谢赛利斯。这似乎是有道理的,但由于我在 UML 方面缺乏经验和知识,我不确定这是否是正确的方法。我还需要考虑什么来验证和验证模型?有没有办法验证和验证模型?
    • 验证或验证模型没有魔法。最大的问题是“模型是否能说出你想说的?”。但第一步是使用真正的建模工具而不是绘图工具。
    • 说实话我不知道,因为我越是尝试了解它,我就越发现我对模型的看法是有偏见的,很难接受“局外人”的看法”。我正在使用适当的建模工具。嗯,有没有办法让我得到专家的帮助,他可以指导我并纠正我的错误,质疑我的设计等?
    猜你喜欢
    • 2019-06-02
    • 2014-11-15
    • 2015-02-26
    • 2013-09-14
    • 2019-11-26
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多