UML图例如下:
一、类框表示
- 第1层:类名。
- 第2层:属性(即类的字段)。
- 第3层:操作(类的方法)。+号表示public;-号表示private;#号表示protected。
二、类之间的各种关系
类之间的关系共6种:
- 继承关系
- 接口关系
- 依赖关系
- 关联关系
- 聚合关系
- 组合关系
1、继承关系
用空心三角形+实线表示。
2、实现接口
用空心三角形+虚线表示。
3、依赖关系
用虚线箭头表示。
主类(动物)中的某个方法需要用到某类(氧气、水)作为参数,就是说“主类的某些方法需要依赖到某类”。
4、关联关系
用实线箭头表示。
主类(企鹅)中的某个属性变量(字段)是某类(气候)的一个引用(或者指针),就是说:“主类和某类具有关联性,主类中的某些方法需要用到某类的外部实例,但是某类的外部实例的生命周期和主类没有关系”。
5、聚合关系
用空心菱形+实线箭头表示。
这是一种弱的“拥有”关系。主类是有若干个某类对象实例,并提供了有关某类的对外一致的接口方法。但是某类又不知道主类的存在,并不为主类提供功能性服务。例如:std::vector ,vector和T就是集合关系。
6、合成关系(组合关系)
用实心菱形+实线箭头表示。
这是一种强的“拥有”关系。主类必须拥有一个某类。某类为主类提供必不可少的功能。某类的生存期和主类一致。例如:NetServer类中必须拥有Socket类用来进行网络通信,同样也必须拥有DataSoruce类用来存储数据。
三、关系间的区别
1、聚合和组合关系的区别
- 聚合关系多用于:容器类+元素类,组合关系多用于:一个综合大类+若干个专用小类。
- 聚合关系中,主类可以有0个或者N个相同类型某类,并且可以运行时动态增删。组合关系中,主类一般拥有N个不同类型的某类,和主类同时创建或删除。
- 聚合关系中,某类仅仅是缓存在主类中,并不为主类提供某些功能。组合关系中,某类提供主类必需的功能。
2、关联关系和聚合及组合关系的区别
- 关联关系:主类仅仅用到某类的部分方法。某类可以为全局变量,主类的成员变量指针指向这个全局变量。例如:Allocator类,主类可用全局的Allocator来创建一个子实例。
- 如果某类的生命周期不受主类控制,又为主类提供了某些功能,但主类又不是容器,那么某类就是和主类相关联。