文章目录
- UML类图
- 泛化(Generalization):
- 实现(Realization):
- 组合(Composition):
- 聚合(Aggregation):
- 关联(Association):
- 依赖(Dependency):
UML类图
https://blog.csdn.net/wsyw126/article/details/51352249
https://design-patterns.readthedocs.io/zh-cn/latest/index.html
https://www.cnblogs.com/duanxz/archive/2012/06/13/2547801.html
1、它们关系的强弱顺序:泛化= 实现> 组合> 聚合> 关联> 依赖
泛化、实现:箭头指向父类
聚合、组合:箭头指向整体,拥有者
关联、依赖:箭头指向被使用者
2、关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。
3. 其中依赖(Dependency)的关系最弱,而关联(Association),聚合(Aggregation),组合(Composition)表示的关系依次增强。换言之关联,聚合,组合都是依赖关系的一种,聚合是表明对象之间的整体与部分关系的关联,而组合是表明整体与部分之间有相同生命周期关系的聚合。
而关联与依赖的关系用一句话概括下来就是,依赖描述了对象之间的调用关系,而关联描述了对象之间的结构关系。
泛化(Generalization):
泛化是对象之间耦合度最大的关系之一。它表示的是继承关系。比如:son类继承Father类。
UML类图使用带三角的实线表示,由子类指向父类。
实现(Realization):
实现是另外一个对象之间耦合度最大的关系之一。它表示的是接口和实现类的关系。比如:ImplementsClass类实现Interface类。
UML类图使用带三角的虚线表示,由子类指向父类。
组合(Composition):
组合是次于前两者的关系,它表示的是整体和部分的关系。比如人和手的关系,当人不在了,手也就没了。
UML类图使用用实心菱形+实线+箭头图示表示,菱形的一边指的的拥有者ClassA,实线所在的一边为被拥有者ClassB。
聚合(Aggregation):
聚合是次于组合的关系,它表示的是是一个对象拥有另一个对象的关系。比如:车子和轮胎之间的关系。但是车子没了轮胎还是可以存在。
UML类图使用空心菱形+实线+箭头图示表示,菱形的一边指的的拥有者ClassA,实线所在的一边为被拥有者ClassB。
关联(Association):
关联是次于聚合的关系。关联关系一般是长期性的,而且双方的关系一般是平等的、关联可以是单向、双向的。比如:我有一个车子,我和车子的关系就是单向关联关系。箭头指向车子。
它描述不同类的对象之间的结构关系;它是一种静态关系, 通常与运行状态无关,一般由常识等因素决定的;它一般用来定义对象之间静态的、天然的结构; 所以,关联关系是一种“强关联”的关系;
比如,乘车人和车票之间就是一种关联关系;学生和学校就是一种关联关系;
关联关系默认不强调方向,表示对象间相互知道;如果特别强调方向,如下图,表示A知道B,但 B不知道A;
UML类图使用一条直线箭头连接,箭头所指的方向为被关联的对象。
注:在最终代码中,关联对象通常是以成员变量的形式实现的;
依赖(Dependency):
依赖是一种比关联关系更弱的关系。依赖关系存在偶然性、临时性。比如:我会开车,别人给我一辆车,我就能开。这时候车子和我的关系就是依赖关系。
UML类图使用带箭头的虚线表示,箭头从使用类指向被依赖的类。
与关联关系不同的是,它是一种临时性的关系,通常在运行期间产生,并且随着运行时的变化; 依赖关系也可能发生变化;
显然,依赖也有方向,双向依赖是一种非常糟糕的结构,我们总是应该保持单向依赖,杜绝双向依赖的产生;
注:在最终代码中,依赖关系体现为类构造方法及类方法的传入参数,箭头的指向为调用关系;依赖关系除了临时知道对方外,还是“使用”对方的方法和属性;