前言
不知道大家有没有跟我一样的情况,UML类图每次看的时候,第一眼,哎我认识,但是每当仔细考究里面的一个东西或关系的时候,就会立马又分不清了。为了增强记忆,便于以后的回顾,在参考了网上的文章后,写下了这篇笔记。
类图
定义:类图显示了一组类、接口、协作以及他们之间的关系。
类图一共分三层:
1、类名。如果类是抽象类,则类名为斜体。
2、特型。字段和属性。格式:可见性 属性名: 数据类型[=缺省值]
3、事件。方法 格式:可见性 方法名(): 返回类型
可见性:
+ 公有(public);
- 私有(private);
# 受保护的(protected);
~友好的,表示这个属性可以被同一个包中的类访问;
_ 表示静态(static)
斜体表示抽象
关系
常见的关系有6种:
继承(Generalization), 实现(Realization),组合(Composition),聚合(Aggregation),关联(Association),依赖(Dependency)
继承(Generalization)
继承是指一个类(字类、子接口),继承另一个类(父类、父接口)的功能。字类带有父类的特性和事件,并且可以新增属于自己的特性和事件。
表示方法:空心三角形+实线。
方向:空心三角形指向父类,即字类指向父类。
实现(Realization)
指类实现接口的功能,实现是类与接口之间最常用的关系。
表示方法:空心三角形+虚线。
方向:空心三角形指向接口,即类指向接口。
组合(Composition)
表示强拥有关系,体现了严格的整体和部分的关系,即contains-a得关系,整体和部分的生命周期是一致的。B对象是A对象的一部分,如果A对象不存在,那么B对象也不存在。
表示方法:实心菱形+实线+箭头
方向:箭头朝向部分
示例:鸟和翅膀
聚合(Aggregation)
表示一种弱拥有的关系,整体和部分的关系,即has-a关系。体现的是A对象包含B对象,但B对象不是A对象的一部分,两个对象各自有自己的生命周期。也就是说B对象完全可以脱离A对象存在。
表示方法:空心菱形+实线+箭头
方向:箭头朝向部分。即整体到部分。
示例:大雁群和大雁
关联(Association)
两个独立的类,其中一个类A包含另一个类B,B类将作为A类的一个属性变量存在。
表示方法:箭头+实线
方向:可以是单向的,也可以是双向的。
依赖(Dependency)
表示一种使用的关系,就是A类使用了B类,A类需要B类的协助。B类会影响到A类。尽量不要使用双向依赖,不然会造成死循环。
表示方法:箭头+虚线
方向:箭头朝向被使用者
示例:局部变量、方法参数或对静态方法的调用。
总结
各种关系的强弱顺序:
继承 = 实现 > 组合 > 聚合 > 关联 > 依赖
由于种种关系经常会搞混,经过整理后发现一些规律。
1、继承和实现
-
都有空心三角形。
-
继承使用实线,父类真实存在,而且是父子关系,一家人这关系没得说。
-
实现使用虚线,接口需要实现。
2、组合和聚合
-
都有实线+箭头
-
组合使用实心菱形,你就想啊,鸟和翅膀的关系,翅膀断了,那还不疼的喳喳叫,这关系实打实的。
-
聚合使用空心菱形,一群大雁,随便走一只,对整个队形也不会由非常严重的影响
3、关联和依赖
-
都有箭头
-
关联使用实线,表示包含,被包含的类将作为属性存在,整个都属于另一个类,所以实线没得说。
-
依赖使用虚线,表示使用、协助