10 基于类的需求建模¶
说明
本文档由 AI 生成
这一章(Chapter 10: Requirements Modeling: Class-Based Methods)是软件工程中非常核心的一环,它从“基于场景”的视角转向了**“基于类”**的建模。这一章主要讲解了如何通过面向对象的分析(OOA)来定义系统中的类、属性、操作以及它们之间的关系。
这一章的逻辑非常清晰,从面向对象的基本概念(类、对象、封装、继承)出发,详细讲解了如何识别类、分配职责(CRC模型)、定义关系(关联、依赖、基数性),最后上升到包(Packages)的管理。
以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照:
📚 软件工程 Chapter 10: 基于类的需求建模 (Requirements Modeling: Class-Based Methods)¶
1. 需求建模策略 (Requirements Modeling Strategies)¶
PPT首先对比了两种不同的分析方法:
- 结构化分析 (Structured Analysis): 将**数据 (Data)** 和**处理数据的过程 (Processes)** 视为分离的实体。
- 数据建模:定义属性和关系。
- 过程建模:展示数据如何流动和被转换。
- 面向对象分析 (Object-Oriented Analysis, OOA): 关注**类 (Classes)** 的定义以及它们如何相互协作 (Collaborate) 来实现客户需求。
2. 面向对象核心概念 (Object-Oriented Concepts)¶
- 核心要素:
- 类 (Classes) 和 对象 (Objects)
- 属性 (Attributes) 和 操作 (Operations)
- 封装 (Encapsulation): 将数据和操作数据的方法捆绑在一起,实现**信息隐藏 (Information Hiding)**。
- 继承 (Inheritance): 子类可以继承父类(超类)的属性和行为。
- 任务流程:
- 识别类(属性和方法)。
- 定义类层次结构 (Class Hierarchy)。
- 表示对象关系。
- 建模对象行为。
- 迭代 (Iteratively) 重新应用上述任务。
3. 类与对象 (Classes and Objects)¶
- 类 (Class): 对一组相似对象的**模板 (Template)** 或**泛化描述 (Generalized description)**。
- 对象 (Object): 类的一个**具体实例 (Instance)**。
- 类层次结构 (Class Hierarchy):
- 超类 (Superclass/Metaclass): 更通用的类(如
PieceOfFurniture)。 - 子类 (Subclass): 更具体的类(如
Table,Chair,Desk)。
- 超类 (Superclass/Metaclass): 更通用的类(如
4. 类的构成 (Building a Class)¶
一个类通常包含三个部分:
- 类名 (Class Name)
- 属性 (Attributes): 描述类的数据特征。
- 操作/方法 (Operations/Methods): 也称为服务 (Services),是封装在类中用于操作数据的可执行过程。通过**消息传递 (Message passing)** 调用。
5. 封装与信息隐藏 (Encapsulation & Information Hiding)¶
- 定义: 对象将数据(属性)和逻辑程序(方法)封装在一起。
- 目的: 实现**信息隐藏 (Information Hiding)**,外部对象无法直接访问内部数据,只能通过公开的方法进行交互。
6. 基于类的建模 (Class-Based Modeling)¶
- 建模内容:
- 系统将要操作的对象。
- 应用于对象的操作 (方法)。
- 对象之间的关系 (Relationships)。
- 类之间的协作 (Collaborations)。
- 识别分析类 (Identify Analysis Classes):
- 语法分析法 (Grammatical Parse): 检查问题陈述,寻找名词(潜在类)和动词(潜在操作)。
- 潜在类的特征:
- 保留的信息 (Retained information)。
- 需要的服务 (Needed services)。
- 多个属性 (Multiple attributes)。
- 共同的属性 (Common attributes)。
- 共同的操作 (Common operations)。
7. CRC 建模 (CRC Modeling)¶
CRC 是 类 (Class)、职责 (Responsibility) 和 协作者 (Collaborator) 的缩写。
- 职责 (Responsibility): 类所知道的(属性)或所做的事情(操作)。
- 协作者 (Collaborator): 那些被需要的类,它们提供完成特定职责所需的信息或执行特定动作。
- 协作类型:
- 请求信息 (Request for information)。
- 请求动作 (Request for action)。
8. 类的类型 (Class Types)¶
| 类型 | 英文 | 描述 |
|---|---|---|
| 实体类 | Entity Classes | 也称为模型或业务类,直接从问题陈述中提取,代表核心数据和业务逻辑。 |
| 边界类 | Boundary Classes | 用于创建用户看到和交互的界面(如屏幕、报告)。 |
| 控制类 | Controller Classes | 管理一个“工作单元 (Unit of work)”的开始到结束,例如管理实体对象的创建、更新或复杂的通信验证。 |
9. 职责分配指南 (Guidelines for Allocating Responsibilities)¶
- 分布智能: 系统智能应跨类分布,以最好地解决问题。
- 通用性: 每个职责应尽可能通用地陈述。
- 信息与行为共存: 信息和与之相关的行为应驻留在同一个类中。
- 信息局部化: 关于一件事的信息应局部化在一个类中,而不是分布在多个类中。
- 共享职责: 职责应在相关类之间共享。
10. 协作与关系 (Collaborations & Relationships)¶
- 协作方式:
- 类使用自己的操作操纵自己的属性。
- 类与其他类协作。
- 三种通用关系:
- 组成部分关系 (Is-part-of relationship):整体与部分的关系。
- 知晓关系 (Has-knowledge-of relationship):一个类知道另一个类的存在。
- 依赖关系 (Depends-upon relationship):一个类依赖于另一个类。
11. 关联与依赖 (Associations and Dependencies)¶
- 关联 (Associations): 两个类之间的结构关系。
- 多重性 (Multiplicity) / 基数性 (Cardinality): 定义了一个类的实例与另一个类的实例之间的数量关系。
- 示例:
Wall——1..*WallSegment(一堵墙由一个或多个墙段组成)。
- 示例:
- 多重性 (Multiplicity) / 基数性 (Cardinality): 定义了一个类的实例与另一个类的实例之间的数量关系。
- 依赖 (Dependencies): 客户端-服务器关系。客户端类以某种方式依赖于服务器类。
- 符号: 虚线箭头。
12. 分析包 (Analysis Packages)¶
- 目的: 将分析模型的元素(如用例、分析类)进行分组和打包,以便于管理。
- 可见性符号:
- + (Public): 加号,表示对其他包可见。
- - (Private): 减号,表示对其他包隐藏。
- # (Protected): 井号,表示仅对包内的类可见。
💡 复习重点总结 (Key Takeaways for Exam)¶
- 核心区别: 理解**结构化分析 (数据与过程分离)** 与 面向对象分析 (数据与过程封装在类中) 的区别。
- CRC 模型: 掌握 CRC (Class, Responsibility, Collaborator) 的概念,特别是**协作者 (Collaborator)** 的定义(提供信息或执行动作的其他类)。
- 类的类型: 必须分清 实体类 (业务数据)、边界类 (UI/界面) 和 控制类 (工作流管理) 的区别。
- UML 关系: 重点复习 关联 (Association) 和 依赖 (Dependency) 的区别,以及如何通过 多重性 (Multiplicity) 来精确定义关系(如
1,0..*,1..*)。 - 职责分配: 记住“信息和行为应驻留在同一个类中”以及“信息应局部化”这两个重要原则。
这一章是连接需求和设计的桥梁,理解了类的识别和关系,对后续的设计模式学习非常有帮助。祝你复习顺利!
评论区
欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问