UML复习
UML图总览(14种图)
UML 2.x 主要包含14种图,根据其关注的系统静态结构和动态行为,可以分为两大类:
- 结构图(静态图)描述系统在某个时间点上的静态结构,不显示随时间变化的情况。它们代表了系统的“骨架”。
类图 - 最核心、最常用
对象图
构件图
组合结构图
部署图
包图 - 行为图(动态图)描述系统在运行过程中的动态行为,表示对象之间的协作和状态变化。它们代表了系统的“血肉”。
用例图 - 从用户角度描述系统功能
活动图 - 类似流程图,描述工作流或算法流程
状态机图- 描述一个对象在其生命周期内状态的变化
序列图 - 最常用的交互图,强调消息的时间顺序
通信图 - 强调对象之间的交互链接关系(序列图的变体)
时序图 - 强调消息发出的具体时间点
交互概览图
重点详解:类图
类图是面向对象系统建模的核心,它展示了系统的静态结构,特别是系统中存在的类、类的内部结构以及类与类之间的关系。 - 类的基本表示法
一个类通常由三部分组成:
类名,属性,操作
<类名> |
---|
[属性/特性] |
- 属性名: 类型 [= 默认值] |
| [操作/方法] |
+ 方法名(参数: 类型): 返回类型 |
---|
示例:一个简单的 Student类 |
Student |
---|
- name: String |
- studentId: int |
- grade: double |
| + enroll(course: Course) |
| + submitAssignment() |
+ getGrade(): double |
---|
可见性(访问修饰符)符号: |
+: public(公共),在任何地方都可以访问 |
-: private(私有),只有本类内部可以访问 |
:protected(保护),本类及其子类可以访问
~: package(包内可见),同一个包内的类可以访问
2. 类与类之间的关系(这是类图的精髓和难点)
类之间的关系定义了类是如何协作的。主要有以下几种: a. 关联关系
描述:一种结构性的关系,表明一个类的对象与另一个类的对象之间有联系。比如“学生”和“老师”之间存在教学关联。
表示:实线箭头。
方向:可以是单向或双向。
重要概念:多重性
1: 1个
0..1: 0个或1个
1.或 0..: 0个或多个
1..: 1个或多个
m..n: 最少m个,最多n个
示例: Company(公司)—————— 1—————— —————— Employee(员工) 解读:一家公司可以雇佣1个或多个员工,一个员工属于一家公司。
b. 聚合关系
描述:一种弱的“拥有”关系,是关联关系的一种特例。表示部分可以脱离整体而独立存在。比如“汽车”和“轮胎”,轮胎可以脱离汽车而存在。
表示:带空心菱形的实线,菱形指向整体。 示例: Team(团队)◇—————— Member(成员) 解读:团队由成员组成,但成员离开团队后依然可以独立存在(比如加入另一个团队)。
c. 组合关系
描述:一种强的“包含”关系,是关联关系的一种特例。部分与整体有相同的生命周期,部分不能脱离整体而独立存在。比如“人”和“心脏”。
表示:带实心菱形的实线,菱形指向整体。 示例: House(房子)◆—————— Room(房间) 解读:房子由房间组成,如果房子没了,房间也就失去了意义(生命周期一致)。
d. 泛化关系
描述:就是面向对象中的继承关系。
表示:带空心三角形的实线,三角形指向父类。 示例: Animal(动物) △———————— | | Bird(鸟)Fish(鱼)
e. 实现关系
描述:一个类实现了一个接口的功能。
表示:带空心三角形的虚线,三角形指向接口。 示例: <
3. 一个综合的类图示例
想象一个简单的学校系统:
|| || ||
| Student | | Course | | Department |
|| || ||
| - name | | - courseName | | - deptName |
| - studentId | | - credits | ||
|| || | |
| + enroll() | | + schedule() | | |
|| |==============| | |
| △ △
| | 1 owns 1..
| * | |
|-----------------------| |
| takes | |
| | |
| || |
| | Professor | |
|-----------------||---------------|
| advisor | - employeeId | worksFor |
||
| + teach() |
||
关系解读:
1.Student和 Course之间存在关联关系(takes),一个学生可以选修多门课程(),一门课程可以被多个学生选修()。
2.Professor和 Student之间存在单向关联关系(advisor),一个教授可以指导多个学生,但学生不知道自己的指导教授(本例中,箭头从Student指向Professor,表示Student对象持有对Professor的引用)。
3.Professor和 Course之间存在关联关系,一个教授可以教授多门课程(),一门课程由一位教授负责(1)。
4.Professor和 Department之间存在关联关系(worksFor),一位教授属于一个院系(1),一个院系拥有多位教授(1..*)。
5.Professor是 Person的泛化(继承)。Professor继承了 Person的属性和方法。
总结
类图是软件设计的蓝图。通过复习,希望你重新认识到:
类是核心构建块。
关系是类的协作纽带,理解关联、聚合/组合、泛化、实现的区别至关重要。
多重性精确地定义了关系的数量规则。
要真正掌握,光看是不够的。建议你动手画一个你熟悉的系统类图,比如“图书馆管理系统”、“在线购物车”等,这是最好的复习方式。 如果你对其他特定的图(比如序列图、状态机图)也有疑问,我可以继续为你详细讲解。祝你复习顺利!