Skip to content
难度基础(★)
建议时长45分钟

10.4.4 UML类图与对象图

类图和对象图是 UML 静态结构建模中最基础的一组图。类图描述“类型层面”的结构,对象图描述“某一时刻实例层面”的结构。

通俗地说:类图像系统的结构蓝图,对象图像某一瞬间的现场照片。

类图描述什么

类图描述一组类、接口、协作以及它们之间的关系。类一般用三栏矩形表示:

text
类名
----------------
属性
----------------
操作/方法

属性对应对象内部保存的数据,方法对应对象能执行的行为。在程序语言中,属性常对应数据成员,方法常对应成员函数。

mermaid
classDiagram
  class BookList {
    +name
    +addBook(book)
    +removeBook(book)
  }
  class Book {
    +title
    +isbn
    +borrow()
  }
  class BorrowRecord {
    +borrowTime
    +returnTime
  }
  class ComputerBook
  class NonComputerBook

  BookList "1" o-- "0..*" Book : contains
  Book "1" --> "0..1" BorrowRecord : current record
  ComputerBook --|> Book
  NonComputerBook --|> Book

上图可以读出几层信息:

  • BookListBook 是整体-部分关系,一个列表可以包含 0 到多本书。
  • 一本书可以没有当前借阅记录,也可以有一条当前借阅记录,因此是 0..1
  • ComputerBookNonComputerBook 都是一种 Book,所以是泛化/继承关系。

多重度怎么读

多重度标在关联两端,用来说明“一个对象能对应对方多少个对象”。不要只背 *,要会把自然语言翻译成数量区间。

多重度含义例子
1恰好一个一条借阅记录只对应一本书
0..1可以没有,也可以有一个一本书当前可以没有借阅记录,也可以有一条当前借阅记录
0..**可以没有,也可以有多个一个书籍列表可以为空,也可以有多本书
1..*至少一个,可以多个一个订单至少包含一个订单明细
m..n从 m 到 n 个一个班级可设置 1 到 3 名班主任

课程里的关键提醒是:看多重度时要站在“一个对象”的角度。例如“一个列表有多少本书?”答案是 0 到多;“一本书属于几个列表?”在题目设定里通常是 1。

角色名与多个关联

关联线上可以标注角色。角色标在某一端时,表示该端对象在关系中扮演的身份;标在中间时,描述两端之间的关系名称。

同两个类之间可以有多个关联,只要角色不同。例如一个 TeacherCourse 之间,既可以有“主讲”关系,也可以有“审核”关系。考试中如果问“两个类之间能否有多个关联”,答案是可以,但要由不同角色区分。

对象图描述什么

对象图展示某一时刻对象之间的关系,是类图的实例快照。对象常写成:

text
对象名:类名

如果对象没有命名,也可以写成:

text
:类名

例如:

mermaid
classDiagram
  class list1:::object {
    <<BookList>>
  }
  class bookA:::object {
    <<Book>>
    title = "软件设计"
  }
  class record1:::object {
    <<BorrowRecord>>
  }
  list1 --> bookA
  bookA --> record1

对象图不是在重新定义类,而是在回答:“当前这个时刻,系统里有哪些对象,它们之间实际连成什么样?”

用对象图校验类图

真题里常让你判断对象图是否与类图一致。做法是把对象图里的每条连接拿回类图多重度中核对。

判断步骤:

  1. 找到类图中的关联两端和多重度。
  2. 在对象图中统计某个对象实际连了多少个对方对象。
  3. 看这个数量是否落在类图允许的区间内。
  4. 注意题干问的是“一致”还是“不一致”。

例如类图规定 A 1 -- 0..* B,表示一个 A 可以对应 0 到多个 B,但一个 B 只能对应一个 A。如果对象图中出现一个 B 同时连到两个 A,就与类图不一致。

类图与对象图的区别

对比项类图对象图
层次类型层实例层
时间性全局静态结构某一时刻快照
主要元素类、接口、属性、方法、关系对象、属性值、对象链接
名称写法Bookbook1:Book
主要用途建立系统结构模型验证或展示某一时刻对象关系

例题

单选
描述类、属性、方法和类之间关系的 UML 图是:
单选
对象图主要描述的是:

自查要点

  1. 为什么说类图是蓝图,对象图是快照?
  2. 0..10..*1..* 分别怎样翻译成自然语言?
  3. 对象图中 book1:Book 的冒号前后分别表示什么?
  4. 如何用对象图检查类图多重度是否一致?