💻 第七章 成为会使用面向对象编程的程序员吧
📄 一句话概括

观点 5:设计先于编码——用 UML(统一建模语言)把类与关系画成图纸,评审改图便宜、上线改码昂贵。

📝 本节和前面几节的关系

建模思想落到纸面就是 UML。4.2 的流程图管【步骤】,UML 类图管【结构】。

一、UML 是什么

UML(Unified Modeling Language,统一建模语言)诞生于 1990 年代,把 Booch、OMT 等各家画法归一。 它不是编程语言,是画图的标准——图标准化了,天下工程师才能互相看懂。 十几种图里最常用的是类图(结构)与时序图(交互)——本节主攻类图。

二、类图怎么画

一个类画成三格盒子:类名/属性/方法——一格一格像填表; 盒子之间用连线表达关系:继承画空心三角实线、组合画实心菱形、依赖画虚线箭头; 属性和方法前的【+-#】标记公开/私有/保护——封装程度直接上图。

三、先画图后写码

5.8 说过【先在纸上考虑算法】——大型 OOP 项目同理:图纸先行。 评审时改图只需橡皮一块,上线后改码要动版本、动测试、动数据库——改图便宜,改码昂贵。 【⚠️ 2026 现状】敏捷时代不再流行把全系统 UML 画全,但白板上的类图草图仍是设计沟通的第一利器。

四、动手 Demo:用 UML 类图画设计图

把 Dog 类画成三格盒子,再认一认三种关系的记号。

# UML 类图用字符画演示 (三格盒子)
box = [
    "+---------------------------+"
    "|           Dog             |"
    "+---------------------------+"
    "| - name : String           |"
    "| - sound : String          |"
    "+---------------------------+"
    "| + speak() : void          |"
    "+---------------------------+"
]
for ln in box:
    print(ln)

实跑输出:

--------------------------------------------------------------------
观点 5——借助 UML 设计程序
--------------------------------------------------------------------

UML(统一建模语言)是面向对象的设计图纸。最常用的是类图:
一个类画成三格盒子——类名 / 属性 / 方法:

    +---------------------------+
    |           Dog             |
    +---------------------------+
    | - name : String           |
    | - sound : String          |
    +---------------------------+
    | + speak() : void          |
    | + eat(food : String)      |
    +---------------------------+

盒子之间连线表达关系:

  UML 关系     记号             含义             对应 7.9
  --------------------------------------------------------
  继承         空心三角实线     子类指向父类     is-a
  组合         实心菱形         整体含部分       has-a
  依赖         虚线箭头         临时用一下       调用

4.2 的流程图管【步骤】, UML 类图管【结构】——图纸先行, 照图施工。
大型项目评审时改图纸便宜, 上线后改代码昂贵——图先行就是省钱。

三格从上到下:类名/属性/方法;【-】是私有、【+】是公开——封装画在图上。 时序图管【谁先谁后发消息】,正好配 7.8 的消息驱动观——结构图与交互图成对出现。

30 秒实验

  1. 给 7.6 的猫狗模型补一张类图,标出 Dog 与 Cat 的继承线。
  2. 给【购物车】画类图:商品、条目、购物车三个盒子,想想谁组合谁。

常见误区

  1. 以为 UML 是又一种编程语言——它是画图标准,图是给人看的。
  2. 以为设计图可有可无——大项目里图纸是团队的共同语言与合同附件。
自测三问(点开对答案) 1. UML 类图的一个类画成什么样? —— 三格盒子:类名/属性/方法。 2. 继承、组合分别用什么记号? —— 继承是空心三角实线,组合是实心菱形。 3. 为什么强调先画图后写码? —— 改图便宜、改码昂贵,图纸先行省钱省时。

相关笔记