[color=darkred][b]依赖,关联,聚合,组合 阐述的是对象之间一种由弱到强的关系[/b][/color]
弱 强
---------------------------------------->
UML中关系的符合定义
[img]http://dl2.iteye.com/upload/attachment/0092/5786/c8443de6-a921-3971-8df6-449dd6cc06ca.jpg[/img]
下面的的类图给出了各种关系的案例,图截取自《大话设计模式》
[img]http://dl2.iteye.com/upload/attachment/0092/6347/18defb4c-68be-31ae-b81d-902d00c49e88.png[/img]
泛化(Generalization)
父类子类之间的关系,泛化关系用空心三角形 + 实线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6353/89b5ead7-8430-36ef-ac29-25aa207ba543.png[/img]
实现接口
实现接口用空心三角形 + 虚线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6355/86ea0cc1-e138-3f34-9a25-cd713e0b3c36.png[/img]
关联
当一个类“知道”另一个类时,并且两个类是平等的,无部分-整体之类的特殊关系时,可以用关联(association),通常表现为一个类是另一个类的属性,关联关系用实线或实线箭头表示。对于企鹅和气候两个类,企鹅与气候有很大关联,我们不去讨论为什么北极没有企鹅,为什么它每年要长途跋涉,总之,企鹅需要“知道”气候的变化,需要了解“气候”的规律,它们之间就是一种关联关系。
[img]http://dl2.iteye.com/upload/attachment/0092/6357/bcba7386-f921-3a80-ac7f-74f93e1ad3af.png[/img]
聚合(Aggregation)
表示类之间的关系是“整体-部分”的关系,但表达的是一种弱的“拥有”关系。聚合关系用空心的菱形 + 实线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6351/98b85152-21e9-3939-8097-21e353e288e3.png[/img]
组合(Composition)
是一种特殊的聚合关系,是一种强的“拥有”关系,每个部分只能属于一个整体,部分和整体生命周期一样([color=darkred][b]如果说成整体和部分生命周期一样应该是不正确的,不要说反了[/b][/color])。
组合关系用实心的菱形 + 实线箭头来表示,关系的两端还有数字,称为基数,表示关系的这一端的类可以由几个实例,很显然鸟应该有2个翅膀,如果一个类可以由无数个实例,用n来表示。关联关系,聚合关系也是可以由基数的。
[img]http://dl2.iteye.com/upload/attachment/0092/6349/f81d13ef-9dc1-3021-b46a-4b55a3c4d906.png[/img]
依赖(Dependency)
对象之间的临时关系,临时性体现在不超越方法的周期。简单的说,在方法使用到的,如参数类,就一定是依赖关系。在类图中,使用依赖线描述对象之间的全局变量,参数变量,局部变量和静态方法(对其他类的静态方法加以调用)的依赖。
一个事物(独立事物)发生变化会影响使用它的另一个事物(依赖事物),但反之则不然。箭头指向独立事物。
动物需要水,氧气以及食物等,也就是说动物依赖水,氧气,它们之间是依赖关系,用虚线箭头表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6359/9b52bf93-fa56-3f8b-b11c-6d3e370ec66f.png[/img]
组合关系是一种强类型关系,表示部分与整体共存亡,整体和部分有一个不存在,另一个也就不应存在,因此类与类之间的耦合度比较高,而聚合关系表示的是一种弱类型关系,整体和部分都可以单独存在。
案例:鸟儿和鸟儿翅膀之间的关系为组合关系,雁群和大雁之间为聚合关系。
另外两个比较重要的关系是关联和依赖:
关联:简单的可以认为,如果一个类作为了另外一个类的属性,那一定是关联关系。但你要知道,[color=darkred][b]聚合是一种特殊的关联,而组合又是一种特殊的聚合。一般的关联我们认为是平级的、无整体部分关系的,如朋友关系。[/b][/color]
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。
弱 强
---------------------------------------->
UML中关系的符合定义
[img]http://dl2.iteye.com/upload/attachment/0092/5786/c8443de6-a921-3971-8df6-449dd6cc06ca.jpg[/img]
下面的的类图给出了各种关系的案例,图截取自《大话设计模式》
[img]http://dl2.iteye.com/upload/attachment/0092/6347/18defb4c-68be-31ae-b81d-902d00c49e88.png[/img]
泛化(Generalization)
父类子类之间的关系,泛化关系用空心三角形 + 实线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6353/89b5ead7-8430-36ef-ac29-25aa207ba543.png[/img]
实现接口
实现接口用空心三角形 + 虚线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6355/86ea0cc1-e138-3f34-9a25-cd713e0b3c36.png[/img]
关联
当一个类“知道”另一个类时,并且两个类是平等的,无部分-整体之类的特殊关系时,可以用关联(association),通常表现为一个类是另一个类的属性,关联关系用实线或实线箭头表示。对于企鹅和气候两个类,企鹅与气候有很大关联,我们不去讨论为什么北极没有企鹅,为什么它每年要长途跋涉,总之,企鹅需要“知道”气候的变化,需要了解“气候”的规律,它们之间就是一种关联关系。
[img]http://dl2.iteye.com/upload/attachment/0092/6357/bcba7386-f921-3a80-ac7f-74f93e1ad3af.png[/img]
聚合(Aggregation)
表示类之间的关系是“整体-部分”的关系,但表达的是一种弱的“拥有”关系。聚合关系用空心的菱形 + 实线箭头来表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6351/98b85152-21e9-3939-8097-21e353e288e3.png[/img]
组合(Composition)
是一种特殊的聚合关系,是一种强的“拥有”关系,每个部分只能属于一个整体,部分和整体生命周期一样([color=darkred][b]如果说成整体和部分生命周期一样应该是不正确的,不要说反了[/b][/color])。
组合关系用实心的菱形 + 实线箭头来表示,关系的两端还有数字,称为基数,表示关系的这一端的类可以由几个实例,很显然鸟应该有2个翅膀,如果一个类可以由无数个实例,用n来表示。关联关系,聚合关系也是可以由基数的。
[img]http://dl2.iteye.com/upload/attachment/0092/6349/f81d13ef-9dc1-3021-b46a-4b55a3c4d906.png[/img]
依赖(Dependency)
对象之间的临时关系,临时性体现在不超越方法的周期。简单的说,在方法使用到的,如参数类,就一定是依赖关系。在类图中,使用依赖线描述对象之间的全局变量,参数变量,局部变量和静态方法(对其他类的静态方法加以调用)的依赖。
一个事物(独立事物)发生变化会影响使用它的另一个事物(依赖事物),但反之则不然。箭头指向独立事物。
动物需要水,氧气以及食物等,也就是说动物依赖水,氧气,它们之间是依赖关系,用虚线箭头表示。
[img]http://dl2.iteye.com/upload/attachment/0092/6359/9b52bf93-fa56-3f8b-b11c-6d3e370ec66f.png[/img]
组合关系是一种强类型关系,表示部分与整体共存亡,整体和部分有一个不存在,另一个也就不应存在,因此类与类之间的耦合度比较高,而聚合关系表示的是一种弱类型关系,整体和部分都可以单独存在。
案例:鸟儿和鸟儿翅膀之间的关系为组合关系,雁群和大雁之间为聚合关系。
另外两个比较重要的关系是关联和依赖:
关联:简单的可以认为,如果一个类作为了另外一个类的属性,那一定是关联关系。但你要知道,[color=darkred][b]聚合是一种特殊的关联,而组合又是一种特殊的聚合。一般的关联我们认为是平级的、无整体部分关系的,如朋友关系。[/b][/color]
关联和聚合的区别主要在语义上,关联的两个对象之间一般是平等的,例如你是我的朋友,聚合则一般不是平等的,例如一个公司包含了很多员工,其实现上是差不多的。
聚合和组合的区别则在语义和实现上都有差别,组合的两个对象之间其生命期有很大的关联,被组合的对象是在组合对象创建的同时或者创建之后创建,在组合对象销毁之前销毁。一般来说被组合对象不能脱离组合对象独立存在,而且也只能属于一个组合对象,例如一个文档的版本,必须依赖于文档的存在,也只能属于一个文档。聚合则不一样,被聚合的对象可以属于多个聚合对象,例如一个员工可能可以属于多个公司。