【问题标题】:UML class diagram: to add fields used to implement relationships or not?UML 类图:是否添加用于实现关系的字段?
【发布时间】:2010-07-05 22:08:57
【问题描述】:

我试图弄清楚在特定类的字段中放入对与该类相关的对象/集合的引用是否正确。

假设我有一个类 University,它聚合了 Student 类的许多实例。当我把这两个类放在我的图表上时,我添加了它们之间的聚合关系。

现在的问题是:我可以在大学中添加一个像“students : Student[]”这样的字段吗?我一定要吗?或者也许我不能?

提前致谢, 彼得

【问题讨论】:

    标签: class uml diagram collections field


    【解决方案1】:

    属性在 UML 2 中拥有关联属性。这是新的,并不总是很容易理解这个概念。在我看到下面的演示之前,我不明白为什么我们需要一个属性。 黄金法则是应该创建属性以便在模型中保存关联信息。我发现了一个有趣的关于 UML 2 中关联和聚合的教学课程。

    这是一个 2 分 30 秒的 Flash 演示 http://www.download-omondo.com/AggregationAndComposition.swf

    以上关联创建是针对专家级别的,我的意思是想要干净的设计和干净的模型以及完美的元模型的建模者。如果您不在乎,那么只需在模型级别创建一个关联,它就可以完成这项工作,但不会完成代码生成。这意味着开发人员稍后需要在代码级别创建数据库映射。 要了解这两种关联之间的区别,请参阅另一个 Flash 演示:http://www.download-omondo.com/association.swf

    【讨论】:

      【解决方案2】:

      这取决于您对模型所做的事情,但通常情况下,您不必为此使用属性,您可以使用关联来代替。关联能够包含属性的更多信息,例如它们是复合的还是共享的、可导航的端点、每一端的多重性、命名端点等。

      关联的一个好处是,一个关联实际上可以表示它所连接的每个类的一个属性,而一个属性只表示它所属类的一个属性。

      因此,在您的情况下,大学有学生,因此您需要绘制从大学到学生的关联,命名每个端点并正确设置多重性。

      现在,当您从模型生成代码时,请务必考虑关联和属性。这样您就不需要将属性添加为属性和关联,就像关联一样。我有一些图表我已经测试过这种方法,通过 xsl 转换从 xmi 生成 sql 和 php 代码,它工作得很好......如果你想要更多细节,我可以挖掘它。

      【讨论】:

        【解决方案3】:

        有 3 种类型的关系:关联、聚合和组合。组合是聚合的一种特殊化,聚合是关联的一种特殊化。

        使用其中一种取决于您的分析阶段。您可以在初稿中使用关联,然后将其改进为聚合或组合,与聚合的区别在于,学生在一个大学宇宙之外没有任何意义。如果有几所大学的实例,那就是聚合。

        如果您使用关系,则没有必要也不应该添加student[],因为它是多余的。如果你这样做了,你就会失去这 3 种关系的语义。

        【讨论】:

          猜你喜欢
          • 2018-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-01-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-04-03
          相关资源
          最近更新 更多