跳转至

14 构件级设计

说明

本文档由 AI 生成

这一章(Chapter 14: Component-Level Design)是软件工程中关于**构件级设计 (Component-Level Design)** 的核心章节。它承接了前面的架构设计,深入到了具体的模块和类的实现细节。

这一章内容非常丰富,逻辑清晰。它首先定义了什么是构件 (Component),然后阐述了指导设计的基本原则(如 SOLID 原则),接着详细讲解了如何进行构件级的设计步骤、如何应用 UML 图(如协作图、活动图)来描述行为,最后拓展到了 Web 应用的构件设计以及基于构件的软件开发 (CBSE) 的流程和标准。

以下是为你整理的详细笔记(Markdown格式),专有名词后均已附上英文对照:


🧩 软件工程 Chapter 14: 构件级设计 (Component-Level Design)

1. 什么是构件 (Component)?

构件是系统**模块化 (Modular)、**可部署 (Deployable)可替换 (Replaceable) 的一部分。

  • 定义 (Definition): 根据 OMG 统一建模语言规范,构件是“封装了实现并暴露了一组接口”的部分。
  • 面向对象视角 (OO View): 一组协作的类 (Collaborating Classes)。
  • 传统视角 (Conventional View): 包含处理逻辑、实现逻辑所需的数据结构,以及允许调用和传递数据的接口。

2. 基本设计原则 (Basic Design Principles)

这一部分非常重要,涵盖了多个指导高质量构件设计的原则:

  • 开闭原则 (OCP - Open-Closed Principle): 模块应对**扩展 (Extension)** 开放,但对**修改 (Modification)** 关闭。
  • 里氏替换原则 (LSP - Liskov Substitution Principle): 子类 (Subclasses) 应该能够替换其基类 (Base Classes) 而不破坏程序。
  • 依赖倒置原则 (DIP - Dependency Inversion Principle): 依赖于**抽象 (Abstractions)**,不要依赖于具体实现 (Concretions)。
  • 接口隔离原则 (ISP - Interface Segregation Principle): 多个特定于客户端的接口优于一个通用的接口。
  • 发布复用等价原则 (REP): 复用的粒度 (Granule) 就是发布的粒度。
  • 共同封闭原则 (CCP): 一起变更的类应该属于同一个构件。
  • 共同复用原则 (CRP): 不一起复用的类不应该被组合在一起。

3. 设计指南与属性 (Design Guidelines, Cohesion & Coupling)

  • 命名与接口 (Naming & Interfaces):
    • 需建立命名规范 (Naming Conventions)。
    • 接口 (Interfaces) 提供了通信和协作的重要信息。
  • 内聚性 (Cohesion): 衡量构件“单一职责”的程度,即属性和操作是否紧密相关。
    • 类型 (Levels): 功能内聚 (Functional) > 分层内聚 (Layer) > 通信内聚 (Communicational) > 顺序内聚 (Sequential) > 过程内聚 (Procedural) > 时间内聚 (Temporal) > 工具内聚 (Utility)。
  • 耦合度 (Coupling): 衡量构件之间连接的紧密程度。
    • 类型 (Levels): 数据耦合 (Data) < 例行调用耦合 (Routine call) < 类型使用耦合 (Type use) < 包含/导入耦合 (Inclusion/Import) < 外部耦合 (External) < 内容耦合 (Content) / 公共耦合 (Common) / 控制耦合 (Control) / 标记耦合 (Stamp)。

4. 构件级设计步骤 (Component-Level Design Steps)

这是一个从识别类到详细描述行为的系统化过程:

  1. 识别设计类 (Identify Design Classes): 区分问题域 (Problem Domain) 和基础设施域 (Infrastructure Domain) 的类。
  2. 细化设计类 (Elaborate Design Classes):
    • 3a. 指定消息细节 (Specify message details) 用于协作。
    • 3b. 识别接口 (Identify interfaces)
    • 3c. 细化属性 (Elaborate attributes) 和数据结构。
    • 3d. 描述处理流程 (Describe processing flow)
  3. 描述持久数据 (Describe persistent data): 数据库和文件管理。
  4. 开发行为表示 (Develop behavioral representations): 使用 UML 图描述类或构件的行为。
  5. 细化部署图 (Elaborate deployment diagrams): 提供实施细节。
  6. 重构与权衡 (Factor & consider alternatives): 优化设计。

5. 行为建模图 (Behavioral Modeling Diagrams)

PPT 中展示了三种用于描述构件内部或交互行为的图表:

  • 协作图 (Collaboration Diagram): 展示对象之间的交互关系和消息传递(如 ProductionJob 提交作业给 JobQueue)。
  • 活动图 (Activity Diagram): 描述业务流程或算法的流程控制(如计算纸张成本的决策流程)。
  • 状态图 (Statechart): 描述对象在其生命周期内的状态变迁(如 JobData 从输入到提交的状态变化)。

6. Web 应用的构件设计 (Component Design for WebApps)

WebApp 的构件通常是**内容 (Content)** 和 功能 (Functionality) 的结合。

  • 内容设计 (Content Design): 关注内容对象及其打包方式(如视频监控中的平面图、缩略图、流媒体窗口)。
  • 功能设计 (Functional Design): 提供计算、数据处理、数据库查询等功能。
    • 瘦客户端 (Thin Client): 仅包含接口层,业务和数据层在云端。
    • 富客户端 (Rich Client): 包含所有三层(接口、业务、数据),但受限于设备性能。

7. 基于构件的软件开发 (CBSE)

这是本章的后半部分重点,涉及如何利用现有构件进行开发。

  • 核心问题 (Key Questions):
    • 是否有现成的商业构件 (COTS)?
    • 是否有内部可复用构件?
    • 接口是否兼容?
  • 复用的障碍 (Impediments to Reuse): 缺乏复用计划、缺乏培训、缺乏激励机制、认为复用“麻烦大于价值”。
  • 领域工程 (Domain Engineering): 为了复用而进行的工程,包括领域分析、架构开发和可复用构件开发。
  • 构件资格审查 (Qualification): 评估构件是否适用(API、资源占用、安全性、异常处理等)。
  • 构件适配 (Adaptation): 确保构件能容易集成(一致的资源管理、通用的数据管理、一致的接口)。
  • 构件组合 (Composition): 建立基础设施将构件绑定在一起(数据交换模型、自动化、底层对象模型)。

8. 主流构件标准 (Component Standards)

  • OMG/CORBA (通用对象请求代理架构): 提供对象请求代理 (ORB),允许不同位置的对象通信。使用接口定义语言 (IDL) 确保接口一致性。
  • Microsoft COM (构件对象模型): Windows 平台下的规范,包含 COM 接口和消息传递机制。
  • Sun JavaBeans: 基于 Java 的跨平台构件系统,提供 BDK 工具包用于开发和测试 Bean。

9. 构件库管理 (Classification, Indexing & Environment)

为了有效复用,需要对构件进行分类和检索:

  • 分类方法 (Classification):
    • 枚举分类 (Enumerated): 层次化的树状结构。
    • 面分类 (Faceted): 定义一组基本描述特征(如输入/输出类型、功能等)。
    • 属性-值分类 (Attribute-Value): 为构件定义属性集。
  • 检索环境 (Reuse Environment): 需要构件数据库、库管理系统和检索系统(如 ORB)的支持。

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

  1. 设计原则 (Principles): 重点复习 SOLID 原则(OCP, LSP, DIP, ISP)以及 REP, CCP, CRP。考试中可能会让你解释某个原则的含义。
  2. 内聚与耦合 (Cohesion & Coupling): 理解两者的定义,并能区分不同类型的内聚(如功能内聚最好)和耦合(如数据耦合最好,内容耦合最差)。
  3. UML 图的应用 (Diagrams): 理解 协作图 (Collaboration)活动图 (Activity)状态图 (Statechart) 在构件设计中的具体作用。
  4. CBSE 流程: 理解 领域工程 (Domain Engineering)基于构件的软件工程 (CBSE) 的关系。
  5. 标准 (Standards): 记住 CORBA(跨平台、ORB、IDL)、COM(Windows)和 JavaBeans 的区别。
  6. WebApp 构件: 注意区分 瘦客户端富客户端 的架构差异。

这一章内容非常实用,涵盖了从微观设计原则到宏观复用策略的知识。祝你复习顺利!

评论区

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