OO
依赖 (Dependency)
关联 (Association)
聚合 (Aggregation)
组合 (Composition)
关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是很难判断的。
它们的强弱关系:依赖 < 关联 < 聚合 < 组合
依赖:
UML表示法:虚线 + 箭头
此关系最为简单,也最好理解,所谓依赖就是某个对象的功能依赖于另外的某个对象,而被依赖的对象只是作为一种工具在使用,而并不持有对它的引用。
Class Hehe { public void test1() { LogExt logExt = new LogExt(); logExt.print("bhcnm"); } } public class LogExt { public void print(String log) { System.out.println(log); } }
关联:
UML表示法:实线 + 箭头
关系:" ... has a ..." 所谓关联就是某个对象会长期的持有另一个对象的引用,而二者的关联往往也是相互的。
关联的两个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,它们在生命期问题上没有任何约定。
被关联的对象还可以再被别的对象关联,所以关联是可以共享的。
关联是一种最普遍和常见的关系形式。一般是指一个对象可以发消息给另外一个对象。典型的实现情况下指某个对象有一个指针或者引用指向一个实体变量,当通过方法的参数来传递或者创建本地变量来访问这种情况也可以称之为关联。比如老师和学生
class Student { Teacher teacher; }
聚合:
UML表示法:空心菱形 + 实线 + 箭头
聚合表示的是一种has-a的关系,同时,它也是一种整体-部分关系。它的特点在于,它这个部分的生命周期并不由整体来管理。也就是说,当整体这个对象已经不存在的时候,部分的对象还是可能继续存在的。它的uml图表示形式如下:
组合:
当理解了聚合的关系之后,再来看组合的关系就相对来说要好很多。和聚合比起来,组合是一种更加严格的has-a关系。它表示一种严格的组成关系。以汽车和引擎为例子,引擎是汽车的一个组成部分。他们是一种严格的部分组成关系,因此他们的声明周期也应该是一致的。也就是说引擎的声明周期是通过汽车对象来管理。
组合的uml图表示如下:
一般用一个实心的菱形箭头表示组合。



浙公网安备 33010602011771号