我对UML类图的一些符号感到困惑。
我很确定我知道联想是什么意思。两个类的实例之间的任何关系,其中一个类的实例需要知道第二个类的一个实例才能执行它的工作-是一个关联关系。关联通常意味着A类具有对B类实例的引用(字段)。
但是,我很难理解聚合和组合箭头的含义。我的部分困惑是因为遇到了对这些符号的不同定义。
聚合符号的两个定义:
定义1:当A类的实例持有B类的实例集合(例如列表、数组等)时,两个类之间的聚合表示法是合适的。
定义2:如果A类的实例包含对B类实例的引用,而B实例依赖于A实例的生命周期,则两个类之间的聚合链接是合适的。意思:当A类的实例被删除时,B类的实例也会被删除,B类的实例完全包含在A类的实例中,而不是A类的实例仅仅拥有对B类实例(这是常规关联)的引用。
关于组合表示法的含义以及它与聚合表示法有何不同,我不确定。
请澄清定义,并帮助我理解。欢迎举出具体的例子。
发布于 2014-04-09 07:02:07
“三联”、“聚合”和“构图”形成了一种尺度,即两类之间有多密切的联系。
在规模的一端,有关联,两个类的对象可以相互了解,但它们不影响彼此的生命周期。对象可以独立存在,哪个A类对象知道哪个B类对象可以随时间而变化。
在天平的另一端,有构图。组合表示一个部分-整体关系,所以B类是A类的一个不可分割的部分。如果A类的对象没有B类对象就不能逻辑地存在,则通常使用这种关系。
聚合关系介于这两个目的之间,但似乎没有人同意确切的位置,因此对于聚合的含义也没有一致的定义。从这个意义上说,你发现的两个定义都是正确的,如果你问了10个人,你就有可能得到11个不同的定义。
发布于 2015-09-23 14:45:46
此外,还摘录了当前的UML标准:
11.5.4协会-语义-表示法
...二进制关联的一端可以是聚合= AggregationKind::shared或AggregationKind=AggregationKind::组合。当一端具有聚合= AggregationKind::shared时,会将空心钻石作为终端装饰添加到关联线的末尾,与标记为聚合= AggregationKind::shared的端相对。钻石应明显小于协会的钻石符号。具有聚合=AggregationKind::组合的关联同样在相应的端有一个钻石,但在填充钻石时有所不同。…
9.5.4分类-性质-表示法
…有时使用一个属性来建模环境,其中一个实例用于将一组实例组合在一起;这称为聚合。为了表示这种情况,属性具有一个聚合属性,类型为AggregationKind;代表整个组的实例由属性的所有者分类,代表分组个体的实例按属性的类型分类。AggregationKind是具有以下文字值的枚举:
…
发布于 2014-04-09 08:00:59
https://softwareengineering.stackexchange.com/questions/235313
复制相似问题