Oop 作文不是“作文”;“组成”;

Oop 作文不是“作文”;“组成”;,oop,uml,aggregation,composition,model-associations,Oop,Uml,Aggregation,Composition,Model Associations,组合:类可以引用其他类的对象作为成员。这称为合成,有时称为has-a关系 Deitel p.J.,Deitel H.M.-Java如何编写第9版 本主题讨论了这一观点: 组合:复合聚合(组合)是一种“强”聚合形式,具有以下特征: *它是二元关联 *这是一种整体/部分关系 *一个零件一次最多可包含在一个复合材料(整体)中,以及 *如果删除了一个组合(整体),则其所有组合零件“通常”都会随之删除 发现 (实际上,Deitel在同一本书中给出了遵循这一思想的UML示例,但没有解释其中的差异) 本主题

组合:类可以引用其他类的对象作为成员。这称为合成,有时称为has-a关系


Deitel p.J.,Deitel H.M.-Java如何编写第9版

本主题讨论了这一观点:

组合:复合聚合(组合)是一种“强”聚合形式,具有以下特征:

*它是二元关联

*这是一种整体/部分关系

*一个零件一次最多可包含在一个复合材料(整体)中,以及

*如果删除了一个组合(整体),则其所有组合零件“通常”都会随之删除

发现 (实际上,Deitel在同一本书中给出了遵循这一思想的UML示例,但没有解释其中的差异)

本主题讨论了这一观点:

好吧,两个都对。这就引出了同音词概念的问题。 例如:不要用组合箭头绘制UML模型来举例说明第一个定义:在UML中,任何关联都是Deitels的第一个定义的组合。 以下是我问题的一些方面,可能有助于正确回答:

我怎样才能说出(并知道)我们谈论的是哪篇作文

我们在这两个定义(上下文术语)之间划清了界限

我可以说第一个是面向对象编程,第二个是软件工程/建模吗

UML组合只是一个模型概念/术语吗

UML组合是UML独有的吗?或者也应用于编程领域

如何避免团队中“我们在谈论什么成分”的错误沟通

请用参考资料和证据回答,这不是一个哲学/观点问题,而是我试图解决的“范围”问题

这不是“什么是构成”的问题


编辑:我在想,如果区别是动词x形容词:“组成”一个类(第一个定义)和“复合关系”(第二个定义)。

引用第110页的UML2.5规范:

有时,一个属性用于建模环境,其中一个实例用于将一组实例组合在一起;这称为聚合。为了表示这种情况,属性具有AggregationKind类型的聚合属性;表示整个组的实例按属性的所有者分类,表示分组的个体的实例按属性的类型分类。AggregationKind是具有以下文字值的枚举:

none:表示属性没有聚合语义

共享:表示属性具有共享聚合语义。共享聚合的精确语义因应用程序区域和建模者而异

复合:表示属性以复合方式聚合,即复合对象负责组合对象的存在和存储(参见11.2.3中的部分定义)


我个人认为,复合聚合的概念是关于对象生命周期的,而不是关于静态关系的。当聚合成员的父级死亡时,复合聚合会杀死聚合成员。没有人会把这个打开。共享聚合是OMG根本不应该引入的一个混蛋,因为它的语义依赖于域。

我发现,如果不解释至少一点UML关联实际上是什么以及它们可以做什么,就很难解释UML关联和实现引用之间的区别,所以我们开始

关联与链接 让我们先看看UML关联和链接(关联的实例)是什么

[11.5.3.1]关联指定类型化实例之间可能出现的语义关系

[11.8.1.1]链接是指类型化对象的值元组。关联对一组链接进行分类,每个链接都是关联的实例。链接中的每个值都引用关联对应端类型的实例

class Brain { }
class Head { }
a = new Brain;
b = new Head;
link = (new Array).add(a).add(b);
因此,以下是有限关联的有效实现

class Brain { }
class Head { }
a = new Brain;
b = new Head;
link = (new Array).add(a).add(b);
所有权 [9.5.3]当属性由分类器(而不是通过ownedAttribute的关联)拥有时,则它表示分类器的一个属性

(注意:类是分类器的子类。)

适航性 [11.5.3.1]最终类别所拥有的或可导航的关联的最终属性表示该关联可从相对端导航;否则,关联将无法从相对端进行导航。可导航性意味着在运行时参与链接的实例(关联实例)可以从关联另一端的实例有效地访问。实现这种高效访问的精确机制是特定于实现的。如果一端不可导航,则从另一端访问可能是可能的,也可能是不可能的,如果是,则可能没有效率

为什么这些概念相关?想象一下下面的例子

我们看到,
brain
Head
类的一个属性(黑点表示对方类的所有权),它是可导航的(箭头)。 我们还看到,
head
不是
Brain
的属性(没有黑点)⇒ 不属于脑力阶层⇒ 不是大脑的属性),但它仍然可以导航。这意味着在UML中,
head
属性由关联本身持有

例如,实现可以如下所示(关联本身由两个引用的元组表示(参见前面的链接描述))

所以,正如您希望开始看到的,UML关联并不像has-a关系那样是一个简单的概念

通用域名格式