学习设计模式的时候每个模式都会有一个UML类图,一般这些类图都还是比较容易看懂的,但是当自己设计UMl类图的时候,就头大了。dependency,composition,aggregation,association有什么区别?还有那些0……*,0……1,1……*都是什么意思?让我们一起来学习一下。所有UML类图都使用PowerDesigner绘制。
一般化、泛化——Generalization
用在两个类或者两个接口之间就是继承,类和接口之间就是实现,箭头指向被继承或被实现者
依赖——Dependency
临时的、偶然的关系,可以为单向或者双向,代码表现为一个类或者接口作为另一个类或接口的参数,箭头指向作为参数的类
关联——Association
类与类、类与接口之间的持久关系,双方地位平等。可以为单向或者双向,代码表现为被关联项作为关联项的属性,或者被引用项是一个全局变量。箭头指向被引用项
聚合——Aggregation
类与类、类与接口之间的部分与整体关系,但部分与整体是可分离的,即has-a的关系。例如:家庭——成员之间的关系,部分可以独立于整体生存,部分可以属于多个对象。代码表现和关联一样,只能从语义区分。箭头指向部分
组合——Composition
也是部分与整体的关系,但是两者不可分离,拥有相同的生命周期,部分不可以独立于整体生存,即contains-a关系。例如:人体——心脏之间的关系。箭头指向部分
其他
箭头
关系所表现的强弱程度依次为:组合>聚合>关联>依赖;
多重性关系
多重性关联关系又称为重数性(Multiplicity)关联关系,表示两个关联对象在数量上的对应关系。
表示方式
|
多重性说明
|
1..1
|
表示另一个类的一个对象只与该类的一个对象有关系 |
0..*
|
表示另一个类的一个对象与该类的零个或多个对象有关系 |
1..*
|
表示另一个类的一个对象与该类的一个或多个对象有关系 |
0..1
|
表示另一个类的一个对象没有或只与该类的一个对象有关系 |
m..n
|
表示另一个类的一个对象与该类最少m,最多n个对象有关系 (m≤n) |
下图表示一个公司拥有1到n个员工,一个人属于0或1个公司