【问题标题】:Class variables are UML aggregations?类变量是 UML 聚合?
【发布时间】:2012-06-12 19:16:31
【问题描述】:

在面向对象中,当我创建一个类变量并在构造函数中初始化它时,我们可以说它是一个 UML 聚合吗?同样的想法,我们是否可以说在方法中定义的变量是 UML 关联?

UML关联/聚合/组合与OO类有什么联系?

【问题讨论】:

  • 你的意思是一个实例变量?类变量是静态成员,但你讲的是构造函数初始化。
  • 我试图弄清楚如何从 UML 模式编写我的类。
  • 是的,但是在 OO 中,“类变量”是 Java 中的静态变量。我猜你的意思是在构造函数中初始化的非原始实例变量?
  • 所以也许你应该更正一下标题?

标签: c# java .net class uml


【解决方案1】:

一般来说,组合是聚合的特例,聚合是关联的特例。您使用的内容取决于模型,即关联的属性。

UML 不处理实际的实现,您也可以以非 OO 的方式实现 UML 描述的模型。

至于您对 UML 关联和类/实例成员之间的联系的问题:基本上每个引用另一个类的成员都是一个关联(即使 Java 中的 StringInteger 这样的原始包装器通常不计算在内) .

【讨论】:

  • +1 表示简单关联。 UML 2.0 中删除了聚合,因此您通常不必考虑它们。
【解决方案2】:

关联意味着存在关系。聚合/组合进一步细化了一些额外的细节。

聚合意味着存在关系,但对依赖实体的生命周期管理的父级没有已知的约束。

组合意味着存在关系,父对象负责依赖实体的生命周期管理。

【讨论】:

    【解决方案3】:

    只是在这个页面上总结一下我的cmets:

    • 在 Java 中,大多数情况下,实例变量在 UML 中表示为常规关联。
    • 在 UML 2.0 中,聚合已被删除,因此您不必担心它们。似乎聚合已删除但又重新添加。
    • 组合在 Java 中并不常见,因为您必须保证在其父对象“死亡”后不使用子对象。这通常要求在父母的吸气剂和深度克隆上传递防御性副本。在其他语言中使用频率更高。

    【讨论】:

    • 我阅读了有关 UML 2.0 定义聚合的文档。您在哪里读到 UML 2.0 聚合已被删除?
    • 当然,UML 2 中没有删除聚合和组合 - 请参阅基础结构文档中关联包中的角色(属性)。
    • 阅读此处:books.google.com/…
    • 尽管网络上有很多参考资料,但我也认为聚合仍在 UML 2.0 中......也许有人可以阐明这一点?
    • 要点亮它,请返回您的第二个链接。有一条评论:“在那个链接的底部,有这个条目:“为了消除混乱,我给 The Object Primer 的作者 Scott Ambler 发了一封电子邮件,以求澄清。他说,由于社区内的大量抱怨,聚合又回到了 UML 2.0 中。谢谢。”所以,重新开始画它们吧……——Dopyiii 2009 年 4 月 10 日 17:18"
    猜你喜欢
    • 2011-05-03
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2021-12-16
    • 2014-08-05
    • 2017-06-24
    • 2018-01-21
    相关资源
    最近更新 更多