UML
简介
UML(Unified Modeling Language)统一建模语言,是一种用于描述软件系统结构的语言。
分类
分类 | 英文 |
---|---|
静态结构图 | Static Structure Diagram |
类图 | Class Diagram |
对象图 | Object Diagram |
用况图 | Use Case Diagram |
交互图 | Interaction Diagram |
顺序图 | Sequence Diagram |
协作图 | Collaboration Diagram |
状态图 | State chart Diagrams |
活动图 | Activity Diagrams |
实现图 | Implementation Diagrams |
构件图 | Component Diagram |
部署图 | Deployment Diagram |
类图
类的表示
- 类名
- 属性
- 方法
类的修饰符
- "+" 表示公有
- "-" 表示保护
- "#" 表示私有
类的关系模型
关系 | 表示 | 描述 | 说明 |
---|---|---|---|
继承 | 实线,空心三角箭头 | 箭头指向父类 | 父类和子类 |
关联 | 实线,箭头 | 箭头指向对象 | 类和其他类 |
聚合 | 实线,空心菱形箭头 | 菱形指向整体 | 成员对象(可独立存在) |
组合 | 实线,实心菱形箭头 | 菱形指向整体 | 成员对象(不可独立存在) |
依赖 | 虚线,箭头 | 依赖对象指向被依赖的对象 | 树--->{水、空气、阳关} |
继承关系
例如:动物和猫、狗的关系。
关联关系
单向关联
A和B单向关联,A中有指向B的指针。 例如:汽车和轮胎的关系,汽车中有指向轮胎的指针。
双向关联
A和B双向关联,A中有指向B的指针,B中也有指向A的指针。 例如:父母和孩子的关系,父母中有指向孩子的指针,孩子中也有指向父母的指针。
自关联
例如:数据结构中的链表,next指针指向下一个节点(本质上结构体自身的指针)。
聚合关系
A包含B、C,但是A、B、C都可以独立存在。A析构时,B、C不析构。 例如:森林和植物、动物的关系。
组合关系
A包含B、C,但是B、C不可以独立存在。A析构时,B、C也一起析构。 例如:公司和员工的关系。
依赖关系
判定依据:
- 将B类的对象作为参数,传递给A类的方法。
- 将B类的对象作为A类方法的局部变量。
- 在A类方法中调用了B类的静态方法。
// 例如:司机开车,司机依赖汽车。
class Car
{
void move() {}
};
class Driver
{
void drive(Car& car)
{
car.move();
}
};
用例图
用例图描述了系统与外部用户或参与者之间的交互,以及这些交互是如何通过一系列的用例来实现的。
- 参与者(Actor):代表系统的使用者或其他外部实体,通常用一个棒人图标表示。
- 用例(Use Case):一个椭圆形状,内部包含用例名称和简短的描述,它代表了系统中完成特定任务的一系列步骤。
- 关系:包括关联关系、 };
## 对象图
对象图是类图的实例化结果,它展示了在某个特定时刻系统中各个对象的静态结构关系。与类图类似,但对象图中的元素是具体的对象而不是抽象的类。
- 类名改为对应的对象名称。
- 将属性替换为具体值(如果有的话)。
- 关联、聚合和组合关系保持不变,只是将类的引用变为实际的对象。
- 可以添加一些临时状态或操作来展示动态行为。
## 状态图
状态图描述一个对象在其生命周期内可能经历的各种状态以及在这些状态之间转换的条件或事件。
- 初始状态:用圆圈表示,通常有一个箭头指向它,表示这是状态的开始。
- 中间状态:用一个圆圈表示,可以有多个中间状态。
- 终止状态:用一个圆圈和一个中间的“X”来表示,表示状态的结束。
- 转移(Transition):从一个状态到另一个状态的路径,由一条带箭头的线表示,线上可以标注触发该转移的事件或条件。
## 时序图
时序图描述对象之间的交互顺序,即对象之间消息的传递顺序。
- 对象
- 生命线
- 消息
- 激活