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)¶
这是一个从识别类到详细描述行为的系统化过程:
- 识别设计类 (Identify Design Classes): 区分问题域 (Problem Domain) 和基础设施域 (Infrastructure Domain) 的类。
- 细化设计类 (Elaborate Design Classes):
- 3a. 指定消息细节 (Specify message details) 用于协作。
- 3b. 识别接口 (Identify interfaces)。
- 3c. 细化属性 (Elaborate attributes) 和数据结构。
- 3d. 描述处理流程 (Describe processing flow)。
- 描述持久数据 (Describe persistent data): 数据库和文件管理。
- 开发行为表示 (Develop behavioral representations): 使用 UML 图描述类或构件的行为。
- 细化部署图 (Elaborate deployment diagrams): 提供实施细节。
- 重构与权衡 (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)¶
- 设计原则 (Principles): 重点复习 SOLID 原则(OCP, LSP, DIP, ISP)以及 REP, CCP, CRP。考试中可能会让你解释某个原则的含义。
- 内聚与耦合 (Cohesion & Coupling): 理解两者的定义,并能区分不同类型的内聚(如功能内聚最好)和耦合(如数据耦合最好,内容耦合最差)。
- UML 图的应用 (Diagrams): 理解 协作图 (Collaboration)、活动图 (Activity) 和 状态图 (Statechart) 在构件设计中的具体作用。
- CBSE 流程: 理解 领域工程 (Domain Engineering) 与 基于构件的软件工程 (CBSE) 的关系。
- 标准 (Standards): 记住 CORBA(跨平台、ORB、IDL)、COM(Windows)和 JavaBeans 的区别。
- WebApp 构件: 注意区分 瘦客户端 和 富客户端 的架构差异。
这一章内容非常实用,涵盖了从微观设计原则到宏观复用策略的知识。祝你复习顺利!
评论区
欢迎在评论区指出文档错误,为文档提供宝贵意见,或写下你的疑问