🔷 第九章 面向对象编程基础
📄 一句话概括

统一建模语言(UML)= 画软件蓝图的"通用图形语言"。面向对象的第一步是"找角色、定职责、理关系"——这些看不见的思路,光靠嘴说、靠代码写,都很难给别人讲清楚。UML 就是把它们画出来的那套标准符号:一张图,谁是谁、谁有什么、谁跟谁有关系,一目了然。它不写代码、不能编译,只是"用图说话"。

📝 本节和前面几节的关系

9.2 讲清了"用对象来组织程序"的思路,可思路在你脑子里,别人看不见。9.3 就是补上表达这一环:用一套大家都能看懂的图,把设计画出来。本节是导言(讲"为什么要画图、UML 能干什么"),后面三篇展开:9.3.1 UML 的来历与定位、9.3.2 UML 的图家族与类图怎么读、9.3.3 面向对象的建模流程。注意:画图会用到 9.2.2 的"类 = 图纸"这个概念——类图,画的正是"图纸"本身。

一、没有图,会卡在哪?

假设你要和同伴一起做一个"图书借阅系统",你想说清楚自己的设计:

靠嘴说:"有个图书对象,它有书名、有没有在架上,还有借出和归还两个方法……图书馆对象负责登记记录……读者对象能借书……"

靠代码说:直接把代码贴给同伴看。

于是需要一张"介于想法和代码之间"的东西——图:

想法 图(UML) 代码
形态 脑子里的概念 标准符号画的方框和箭头 一行行文本
谁能看懂 只有你自己 懂 UML 的所有人 + 需求方 程序员
改起来 瞬间改 改一笔很快 可能要改很多行
精确度 模糊 说清结构,不纠缠细节 精确到分号

核心作用:UML 是"设计阶段的共同语言"——让一群人在动手写代码之前,对"系统长什么样"达成一致。

二、UML 是什么,不是什么

它是:

它不是:

容易误以为 实际上
一种编程语言 不写可执行代码、不能编译(虽然有些工具能由类图生成代码骨架,那是工具的附加功能)
一种开发方法 它是表达工具;"怎么开发"是别的学问(方法论)
必须画得很正式 草图也算。白板上一张潦草的方框图,同样是 UML 的用法
某种软件的专属格式 它是标准,很多工具(StarUML、PlantUML、draw.io、Visio)都支持

三、为什么要"统一"

"统一"这两个字是有故事的。在 UML 出现之前——

三套符号各自能用,但互不相通:换个项目、换个公司,同一张图要重新学一遍。就像三个人各说一种方言,本意都是表达同一件事。

1990 年代中后期,这三位(人称"三友 / 三人组")把各自的画法合并,形成一套统一的符号,并在 1997 年被 OMG(对象管理组织)采纳为国际标准,这就是 UML(Unified Modeling Language)。

一句话:"统一"指的是"符号统一"——不是为了规定你怎么设计,而是让全世界的设计图能互相看懂。

四、UML 家族的图有哪些

UML 2.x 一共定义了十几类图,粗分两大类:

大类 关心什么 代表图
结构图(静态) 有哪些东西、它们怎么组成 类图(最常用)、对象图、包图、组件图、部署图
行为图(动态) 它们怎么动、怎么配合 用例图、活动图、状态图、时序图、协作图

对零基础来说,先认识两张就够用:

五、本节之后三篇的分工

小节 讲什么
9.3.1 统一建模语言概述 来历、定位、能干什么、不能干什么
9.3.2 统一建模语言的结构 图家族全貌 + 类图怎么读(三格框、五种关系)
9.3.3 面向对象的建模 怎么从一句话需求走到一张类图(四步流程)

六、动手 Demo:先画一张"最土"的图

本节不写代码——动手就是"画图"。用纸笔或任何文字工具,把 9.2.2 那个"账户"画出来,先用最土的方式:

        +-------------------+
        |      Account      |     ← 类名(图纸的名字)
        +-------------------+
        | - balance : double|     ← 属性("-" 表示私有)
        +-------------------+
        | + deposit(double) |     ← 方法("+" 表示公开)
        | + withdraw(double)|
        | + show()          |
        +-------------------+

规则只有三条(9.3.2 会正式讲):

  1. 一个方框 = 一个类,框里横线分成三格:类名 / 属性 / 方法;
  2. 前面的符号表示可见性:- 私有、+ 公开、# 保护;
  3. 左边是名字,右边是类型:balance : double 读作"balance,类型是 double"。

看到什么算成功:你能只看这张图就说出——这个类叫 Account,内部有一个别人碰不到的 double 型余额,对外提供"存、取、查"三个动作。这就叫"一张图胜过一段解释"。

30 秒实验:给 Account 加一个方法 transferTo(Account *other, double v)(转账)。你会发现:图里只要加一行,别人就懂了你的意思——而如果改成用文字描述"转账要考虑余额不足、要扣自己的加对方的、失败要回滚……",得写上一大段。这就是图的价值:结构性的东西,画出来比说出来省力得多。

七、常见误区

  1. "UML 是编程语言"——不是。它不写可执行代码、不能编译运行,它是"描述设计的图形符号系统"。
  2. "必须用专业工具画,画得很漂亮才有用"——相反。UML 最日常的用法是白板草图、餐巾纸上的方框箭头,目的是沟通,不是交美术作业。
  3. "画了图就不用写文档了"——图擅长表达结构,不擅长表达细节(具体算法、边界条件、异常处理)。图和文字是互补的,多数项目两者都要。
  4. "不用 UML 就不能做面向对象"——完全可以。小项目、个人项目,脑子里清楚就行。UML 是"要跟别人协作、要把设计留档"时才显出价值。
  5. "UML 过时了"——没有。它 1997 年成为国际标准,至今仍在用;甚至很多现代建模方式(比如各种"架构图")都能看到它的影子。它更像是"面向对象设计的通用语",而不是某种流行一时的工具。
自测三问(点开对答案) 1. UML 是什么?它主要解决什么问题?——**统一建模语言**,一套**画软件设计图的通用符号标准**。解决的是"**设计思路怎么清晰地表达给别人看**"——在写代码之前,让协作的人对系统结构达成一致。 2. UML 里的"统一"指的是什么?——**符号的统一**。在它出现之前,Booch、Rumbaugh、Jacobson 各有各的画法、互不相通;三位把画法合并成一套,1997 年被 OMG 采纳为标准,**让全世界能互相看懂设计图**。 3. UML 图分哪两大类?各自关心什么?——**结构图**(静态:有哪些东西、怎么组成,如**类图**)和**行为图**(动态:怎么动、怎么配合,如**用例图、时序图**)。

相关笔记