10.2 面向对象分析
面向对象分析 OOA 的目标,是获得对应用问题的理解。它处在“需求理解和问题建模”阶段,重点不是写代码,而是从业务需求中识别对象、组织对象、描述对象之间的相互作用,并定义基于对象的操作。
面向对象生命周期
面向对象开发也有分析、设计、实现、测试等阶段。和传统生命周期相比,面向对象常与喷泉模型联系在一起:阶段之间可以交叠、迭代,分析和设计不一定严格线性分开。
mermaid
flowchart LR
A["面向对象分析<br/>理解问题域"] --> D["面向对象设计<br/>组织设计模型"]
D --> P["面向对象程序设计<br/>C++/Java等实现"]
P --> T["面向对象测试<br/>算法/类/模板/系统"]
T -.反馈迭代.-> A
D -.交叠修正.-> A考试中 OOA 出现频率不算高,但“主要活动不包括什么”这类题会考阶段边界。
OOA 的四个主要活动
| 活动 | 说明 | 题干关键词 |
|---|---|---|
| 认定对象 | 从需求中识别候选对象 | 名词、业务实体、外部角色 |
| 组织对象 | 把对象抽象成类,组织类结构 | 分类、抽象、类层次 |
| 描述对象间相互作用 | 描述对象如何协作 | 消息、交互、协作 |
| 定义基于对象的操作 | 找对象应承担的服务 | 操作、职责、行为 |
这四项都属于分析。若选项出现“面向对象程序设计”“选择编程语言写代码”,那已经是实现阶段,不属于 OOA 的主要活动。
从题干找对象与操作
面向对象分析和数据流图分析有相似处:名词常提示对象,动词常提示操作。但 OOA 更强调对象职责和对象之间的协作。
| 题干内容 | OOA 视角 |
|---|---|
| 客户、订单、账户、图书、学生 | 候选对象/类 |
| 提交订单、查询余额、借阅图书 | 对象操作/职责 |
| 客户拥有账户,订单包含明细 | 类之间关系 |
| 系统向用户发送通知 | 对象间消息或交互 |
候选对象不是看到所有名词都直接当类。要筛掉过于抽象、只是属性值、只是界面控件或临时计算数据的名词。
OOA 与 OOD 的区别
| 阶段 | 主要问题 | 输出 |
|---|---|---|
| OOA 面向对象分析 | 业务上有什么对象,它们如何协作 | 分析模型、对象模型、用例理解 |
| OOD 面向对象设计 | 软件中如何组织类、接口、包和关系 | 设计模型、类设计、接口设计、包结构 |
| OOP 面向对象程序设计 | 用什么语言和代码实现 | C++/Java 等源代码 |
| OOT 面向对象测试 | 如何验证实现正确 | 算法层、类层、模板层、系统层测试 |
OOA 关注问题域,OOD 关注解空间。分析阶段不要过早陷入数据库表、框架选择和代码细节。
面向对象测试层次
字幕中提到面向对象测试可从多个层次理解:
| 层次 | 关注点 |
|---|---|
| 算法层 | 单个方法或算法是否正确 |
| 类层 | 类的属性、方法和不变量是否正确 |
| 模板层 | 类模板、泛型、复用结构是否正确 |
| 系统层 | 多个对象协作形成的系统行为是否正确 |
这部分不是本节核心计算点,但能帮助你理解 OOA/OOD/OOP/OOT 是一条完整链路。
例题
面向对象分析的主要任务是:
下列不属于面向对象分析主要活动的是:
本节小结
OOA 的目的在于理解问题域。它的主要活动是认定对象、组织对象、描述对象之间的相互作用、定义基于对象的操作。分析阶段重业务理解,设计阶段重软件组织,实现阶段才进入具体代码。