{"name":"UML","id":"软件工程-理论-UML","content":"# [面向对象](/编程语言/编程范式/面向对象.md)与 UML 方法论\n\n> **面向对象（Object-Oriented, OO）**不仅是一种编程范式，更是一种理解世界、组织复杂性的思维方式。它关注\"事物\"及其内在关系，通过抽象、封装、继承和多态等概念，将系统构建成一组具有稳定边界、清晰职责的对象协作网络。\n\n## 一、面向对象的世界观\n\n面向对象思想的核心，不在于语法特征，而在于**建模方式的转变**：\n\n| 传统思维         | 面向对象思维       |\n| ------------ | ------------ |\n| 过程驱动（以操作为中心） | 实体驱动（以对象为中心） |\n| 数据与行为分离      | 数据与行为封装      |\n| 静态结构         | 动态协作         |\n| 线性逻辑         | 多态与消息驱动      |\n\n从哲学角度看，OO 是一种**“将复杂世界映射为可交互抽象单元”**的方式。\n它借助封装与多态，实现了**变化的隔离**与**复杂性的分层控制**。\n\n### 四大特性再解读\n\n* **封装（Encapsulation）**：边界的构建。定义对象的内外分界，隐藏实现细节，形成自治单元。\n* **继承（Inheritance）**：演化的机制。允许抽象层次逐级复用与扩展。\n* **多态（Polymorphism）**：动态的统一性。不同对象以统一接口参与协作，增强灵活性与扩展性。\n* **抽象（Abstraction）**：认知的压缩。提炼本质属性，忽略无关细节，以便在更高层次理解系统。\n\n---\n\n## 二、UML：从思维到模型的桥梁\n\n> **UML（Unified Modeling Language）**——统一建模语言，是面向对象思想的标准化表达方式。\n> 它并非仅仅是“画图工具”，而是一种**跨角色、跨阶段的认知语言**，让系统分析师、架构师、开发者在同一认知框架下沟通复杂系统。\n\nUML 的使命，是**让复杂的系统可视化、可度量、可推理**。\n\n### UML 的本质\n\n* **是一种语言（Language）**：具有语法与语义，用于描述系统的结构与行为。\n* **不是方法论（Methodology）**：它不规定开发流程，而为各种方法（如RUP、Agile、DDD）提供通用表达。\n* **是桥梁（Bridge）**：连接思维模型与实现模型，使抽象可落地。\n\n---\n\n## 三、UML 的模型层次\n\nUML 建模不是单一维度的“画图”，而是一种**多视角的建模体系**，帮助我们从不同层次观察系统：\n\n| 视角                    | 关注点     | 典型图示        |\n| --------------------- | ------- | ----------- |\n| **用况视角**（Use Case）    | 系统做什么   | 用况图         |\n| **逻辑视角**（Logical）     | 系统的结构   | 类图、对象图      |\n| **过程视角**（Process）     | 系统的动态行为 | 顺序图、活动图、状态图 |\n| **开发视角**（Development） | 模块与构件划分 | 构件图、包图      |\n| **部署视角**（Deployment）  | 运行时物理结构 | 部署图、节点图     |\n\n这五个视角共同构成系统的**完整语义空间**，支持从概念 → 设计 → 实现 → 运维的全生命周期建模。\n\n---\n\n## 四、UML 的核心思想\n\n### 1. 模型即语言\n\n模型不是附属品，而是对系统的正式描述。\n在大型系统中，**模型与代码共同构成系统的“双重表达”**：\n模型解释系统意图，代码实现系统行为。\n\n### 2. 关系的显性化\n\nUML 的力量在于，它将系统中隐含的关系显性化，使人类可以：\n\n* **观察依赖**（谁依赖谁）\n* **分析泛化**（谁继承谁）\n* **设计接口契约**（谁向谁承诺）\n* **描绘协作路径**（谁与谁交互）\n\n### 3. 可演化的系统观\n\nUML 强调“模型即系统的演化框架”：\n\n* 在**初期**用于概念沟通；\n* 在**设计期**用于结构约束；\n* 在**维护期**用于文档追溯；\n* 在**架构演进期**用于抽象再平衡。\n\n---\n\n## 五、UML 在现代软件体系中的地位\n\n随着敏捷开发与领域驱动设计（DDD）的流行，UML 从“全阶段文档工具”转变为一种**协作性建模语言**：\n\n* 在 **架构治理层**：用于定义模块边界、上下文映射。\n* 在 **系统分析层**：用于澄清业务语义、角色交互。\n* 在 **实现层**：辅助开发者理解接口契约与依赖关系。\n* 在 **演进层**：为系统重构、微服务划分提供可视化支撑。\n\n> UML 不再是“画图”，而是让系统**可见、可思考、可验证**的语言。\n\n## 关联内容（自动生成）\n\n- [/编程语言/编程范式/面向对象.md](/编程语言/编程范式/面向对象.md) 面向对象是UML的核心思想基础，详细阐述了封装、继承、多态等核心概念\n- [/软件工程/设计模式/设计模式.md](/软件工程/设计模式/设计模式.md) 设计模式与UML密切相关，设计模式通常使用UML类图来表达结构和关系\n- [/软件工程/理论/软件需求.md](/软件工程/理论/软件需求.md) UML是需求分析和系统设计阶段的重要工具，有助于表达需求和系统结构\n- [/软件工程/理论/敏捷软件开发.md](/软件工程/理论/敏捷软件开发.md) 在敏捷开发中，UML作为协作性建模语言发挥重要作用\n- [/软件工程/架构/设计框架.md](/软件工程/架构/设计框架.md) 架构设计过程中常使用UML类图和构件图来表达系统结构\n- [/软件工程/领域驱动设计.md](/软件工程/领域驱动设计.md) DDD与UML在系统建模方面有很强的关联性，都关注业务概念的可视化表达\n- [/软件工程/服务计算.md](/软件工程/服务计算.md) 服务建模中也会使用UML来表达服务间的交互和关系\n- [/编程语言/JAVA/高级/Servlet.md](/编程语言/JAVA/高级/Servlet.md) Servlet规范体现了多个经典的设计模式，常用UML类图和序列图来表达\n- [/软件工程/微服务/微服务.md](/软件工程/微服务/微服务.md) 微服务架构设计中使用UML来表达服务间的协作关系和系统架构\n- [/软件工程/架构/系统设计/业务建模.md](/软件工程/架构/系统设计/业务建模.md) 业务建模与UML建模在系统设计中相辅相成，都需要可视化表达\n\n","metadata":"tags: ['编程语言', '软件工程', '计算机系统']","hasMoreCommit":false,"totalCommits":9,"commitList":[{"date":"2026-10-22T22:01:43+08:00","author":"0xcaffebabe","message":"fix: persist hidden preview state across reloads","hash":"377c1b3e0d4a64ac559123da8dfd70920a85224c"},{"date":"2026-10-22T17:14:19+08:00","author":"Codex","message":"fix: restore pinned document previews after refresh","hash":"267bd582422c704067b4b904be948bc04367ad0b"},{"date":"2026-10-22T15:09:08+08:00","author":"Codex","message":"fix: prevent word cloud tooltips leaking into document pages","hash":"60b0fadab47a1aad1ed637dc0c10990b668b5fda"},{"date":"2026-10-22T14:05:48+08:00","author":"My","message":"Merge pull request #637 from 0xcaffebabe/codex/ultrawide-panel-gap-636","hash":"adbac4bad6689e7f56d350f75704a500eed4ac61"},{"date":"2026-10-22T12:19:31+08:00","author":"Codex","message":"fix: remove duplicate mobile bottom-bar search","hash":"afd1e0fab2df539c3e7572878ae8d1e095b09a71"},{"date":"2026-10-22T10:16:53+08:00","author":"My","message":"Merge pull request #639 from 0xcaffebabe/codex/merge-toolbox-sitenav-638","hash":"cb23b5902093c28879a7dc0ba79747f0b38faf02"},{"date":"2026-10-22T01:20:43Z","author":"renovate[bot]","message":"chore(deps): update dependency jsdom to v30","hash":"e364e185b9e8f10adcdb98370342f808d4c5a2fd"},{"date":"2026-10-21T18:58:02+08:00","author":"My","message":"test: distinguish node labels from cluster titles","hash":"4068d9aed488792cf0fa5eb5e175ed7dc27e3f79"},{"date":"2026-10-21T18:07:48+08:00","author":"My","message":"Merge pull request #635 from 0xcaffebabe/codex/contributing-no-images","hash":"49153a716ef494bb51a2d73f54a96f65ad0fe9d5"}],"createTime":"2026-10-21T18:07:48+08:00"}