0%

UML

1. 类

类封装了信息和行为, 是面向对象的重要组成部分, 它是具有相同属性, 操作, 关系对象集合的总称.
在系统中, 每个类都应该具有一定的职责, 职责是指类锁担任的任务. 一个类可以有多个职责, 但设计得好的类一般只有一种职责.
在定义类时, 当类的职责分解为类的属性和操作, 其中属性用于封装数据, 操作用于封装行为.
设计类时面向对象设计中最重要的组成部分, 也是最复杂和最耗时的部分.

在软件系统运行时, 类将被实例化成对象, 对象对应于某个具体的事物. 类是对一组具有相同属性, 表现相同行为的抽象, 对象是类的实例.

2. 类之间的关系

按关系的强弱程度依次为: 泛化 = 实现 > 组合 > 聚合 > 关联 > 依赖

2.1. 泛化 Generalization

is-a
是一种继承关系, 表示一般与特殊的关系.它指定了子类如何特例化父类的所有特征和行为.
代码体现: extends

实线, 空心三角箭头指向父类

2.2. 实现 Realization

is-a
接口的实现, 是类与接口的关系, 表示接口所有特征和行为的实现.
代码体现: implements

虚线, 空心三角箭头指向接口

2.3. 聚合 Aggregation

has-a
拥有关系, 是关联关系的一种特例, 整体与部分的关系, 且部分可以离开整体而单独存在.
代码体现: 成员变量

实线, 空心菱形箭头指向整体, 普通箭头指向部分

2.4. 组合 Composition

contains-a
拥有关系, 也是关联关系的一种特例, 整体与部分的关系, 但部分不能离开整体而单独存在.它具有比聚合更强的拥有关系, 强调整体与部分的生命周期是一致的.
代码体现: 成员变量

实线, 实心菱形箭头指向整体, 普通箭头指向部分

2.5. 关联 Association

拥有关系, 它使一个类知道另一个类的属性和方法.
代码体现: 成员变量

实线, 普通箭头指向被拥有者, 可以是单向的, 也可以是双向的, 甚至是自关联.

2.6. 依赖 Dependency

use-a
是一种使用的关系, 即一个类的实现需要另一个类的协助, 所以要尽量不使用双向的互相依赖.
代码体现: 局部变量, 方法的参数或者对静态方法的调用

虚线, 普通箭头指向被使用者

3. 画图工具

4. Resource

5. 趣闻

UML 官方文档 中嘲讽维基百科: 搞不懂你们是从哪里听来的

UML specification categorizes association as semantic relationship. Some other UML sources also categorize association as a structural relationship.
Wikipedia states that association is instance level relationship and that associations can only be shown on class diagrams.
Not sure where they got that information from but it is not based on UML specification. Association could be used on different types of UML structure diagrams