组合关系与聚合关系的区别是什么?
组合关系也称句段关系,可比作横向水平关系,指一个语言元素与另一语言元素同时排列在言语链条上,构成语言要素在现场的组合,如在“快来”这个句子中,“来”和“快”的关系。是索绪尔的结构主义语言学中研究语言状态关系的两大主轴之一。
聚合关系就是语言结构某一位置上能够互相替换的具有某种相同作用的单位(如音位、词)之间的关系,简单说就是符号与符号之间的替换关系。
几个词,一组词,他们性质相同,具有同样的组合功能,在语言结构的同一个位置上可以互相替换,替换后生成不同的句子,这些词之间的这种替换关系,就是聚合关系。
扩展资料:
在一个语言结构中,看到其中的某个单位,会联想到另一个单位,并用另一个单位来替换,组合成新的句子,以符合交际的需要。
比如根据“我吃饭”中的“我”,联想到“他”,可以替换造出“他吃饭”,根据其中的“吃”用“做”、“煮”、“烧”等替换,可以造出“我做饭”,根据其中的“饭”,用具有相同功能的“面”、“饼”、“菜”等词语替换,可以造出“我吃面”。
组合也是关联关系的一种特例,他体现的是一种contains-a的关系,这种关系比聚合更强,也称为强聚合。
他同样体现整体与部分间的关系,但此时整体与部分是不可分的,整体的生命周期结束也就意味着部分的生命周期结束;比如你和你的大脑;表现在代码层面,和关联关系是一致的,只能从语义级别来区分。
百度百科——聚合关系
百度百科——组合关系
聚合(Aggregation)?关系是关联关系的一种,是强的关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其它的零件类之间的关系便整体和个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分
组合(Composition)?关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持部分对象和存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系,由后者排他地负责生命周期。部分和整体的生命周期一样。
以上关系的耦合度依次增强(关于耦合度的概念将在以后具体讨论,这里可以暂时理解为当一个类发生变更时,对其他类造成的影响程度,影响越小则耦合度越弱,影响越大耦合度越强)。由定义我们已经知道,依赖关系实际上是一种比较弱的关联,聚合是一种比较强的关联,而组合则是一种更强的关联,所以笼统的来区分的话,实际上这四种关系、都是关联关系。?
聚合关系是是一种比较强的关联关系,java中一般使用成员变量形式实现。对象之间存在着整体与部分的关系。例如上例中?
class?Driver?{//使用成员变量形式实现聚合关系
Car?mycar;
public?void?drive(){
mycar.run();
}
}假如给上面代码赋予如下语义:车是一辆私家车,是司机财产的一部分。则相同的代码即表示聚合关系了。聚合关系一般使用setter方法给成员变量赋值。?
假如赋予如下语义:车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用。那就表示组合关系了。一般来说,为了表示组合关系,常常会使用构造方法来达到初始化的目的,例如上例中,加上一个以Car为参数的构造方法?public?Driver(Car?car){
mycar?=?car;
}所以,关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!