UML复习

UML图总览(14种图)
UML 2.x 主要包含14种图,根据其关注的系统静态结构和动态行为,可以分为两大类:

  1. 结构图(静态图)描述系统在某个时间点上的静态结构,不显示随时间变化的情况。它们代表了系统的“骨架”。
    类图 - 最核心、最常用​​
    对象图
    构件图
    组合结构图
    部署图
    包图
  2. 行为图(动态图)描述系统在运行过程中的动态行为,表示对象之间的协作和状态变化。它们代表了系统的“血肉”。
    用例图 - 从用户角度描述系统功能
    活动图 - 类似流程图,描述工作流或算法流程
    状态机图- 描述一个对象在其生命周期内状态的变化
    序列图 - 最常用的交互图,强调消息的时间顺序
    通信图 - 强调对象之间的交互链接关系(序列图的变体)
    时序图 - 强调消息发出的具体时间点
    交互概览图
    重点详解:类图
    类图是面向对象系统建模的核心,它展示了系统的静态结构,特别是系统中存在的类、类的内部结构以及类与类之间的关系​​。
  3. 类的基本表示法
    一个类通常由三部分组成:
    类名,属性,操作​​

<类名>
[属性/特性]
- 属性名: 类型 [= 默认值]

| [操作/方法] |

+ 方法名(参数: 类型): 返回类型
​​示例:一个简单的 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. 实现关系​​
描述​​:一个类实现了一个接口的功能。
​​表示​​:​​带空心三角形的虚线​​,三角形指向接口。 ​​示例:​​ <> Flyable(可飞的) △- - - - -(虚线) Bird(鸟)
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的属性和方法。
总结
类图是软件设计的蓝图。通过复习,希望你重新认识到:
类​​是核心构建块。
关系​​是类的协作纽带,理解​​关联、聚合/组合、泛化、实现​​的区别至关重要。
多重性​​精确地定义了关系的数量规则。
要真正掌握,光看是不够的。建议你​​动手画一个你熟悉的系统类图​​,比如“图书馆管理系统”、“在线购物车”等,这是最好的复习方式。 如果你对其他特定的图(比如序列图、状态机图)也有疑问,我可以继续为你详细讲解。祝你复习顺利!

posted @ 2025-10-14 18:03  老汤姆233  阅读(8)  评论(0)    收藏  举报