跳转至

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)。

4. 类的构成 (Building a Class)

一个类通常包含三个部分:

  1. 类名 (Class Name)
  2. 属性 (Attributes): 描述类的数据特征。
  3. 操作/方法 (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)

  • 协作方式:
    1. 类使用自己的操作操纵自己的属性。
    2. 类与其他类协作。
  • 三种通用关系:
    1. 组成部分关系 (Is-part-of relationship):整体与部分的关系。
    2. 知晓关系 (Has-knowledge-of relationship):一个类知道另一个类的存在。
    3. 依赖关系 (Depends-upon relationship):一个类依赖于另一个类。

11. 关联与依赖 (Associations and Dependencies)

  • 关联 (Associations): 两个类之间的结构关系。
    • 多重性 (Multiplicity) / 基数性 (Cardinality): 定义了一个类的实例与另一个类的实例之间的数量关系。
      • 示例: Wall —— 1..* WallSegment(一堵墙由一个或多个墙段组成)。
  • 依赖 (Dependencies): 客户端-服务器关系。客户端类以某种方式依赖于服务器类。
    • 符号: 虚线箭头。

12. 分析包 (Analysis Packages)

  • 目的: 将分析模型的元素(如用例、分析类)进行分组和打包,以便于管理。
  • 可见性符号:
    • + (Public): 加号,表示对其他包可见。
    • - (Private): 减号,表示对其他包隐藏。
    • # (Protected): 井号,表示仅对包内的类可见。

💡 复习重点总结 (Key Takeaways for Exam)

  1. 核心区别: 理解**结构化分析 (数据与过程分离)** 与 面向对象分析 (数据与过程封装在类中) 的区别。
  2. CRC 模型: 掌握 CRC (Class, Responsibility, Collaborator) 的概念,特别是**协作者 (Collaborator)** 的定义(提供信息或执行动作的其他类)。
  3. 类的类型: 必须分清 实体类 (业务数据)边界类 (UI/界面)控制类 (工作流管理) 的区别。
  4. UML 关系: 重点复习 关联 (Association)依赖 (Dependency) 的区别,以及如何通过 多重性 (Multiplicity) 来精确定义关系(如 1, 0..*, 1..*)。
  5. 职责分配: 记住“信息和行为应驻留在同一个类中”以及“信息应局部化”这两个重要原则。

这一章是连接需求和设计的桥梁,理解了类的识别和关系,对后续的设计模式学习非常有帮助。祝你复习顺利!

评论区

欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问