1 软件设计概述
1.1 为什么要软件设计

1.2 何为软件设计

何为软件系统的解决方案?

- 软件设计关注与软件需求的实现问题
- 软件设计是需求分析和软件实现间的桥梁
1.3 软件设计的质量要求

 
1.4 软件设计的过程

1.4.1 软件体系结构设计

1.4.2 用户界面设计

1.4.3 软件详细设计

1.4.4 其他工作

1.5 软件设计元素

2 软件设计原则
2.1 软件设计要考虑的因素

2.2 软件设计的基本原则

2.2.1 抽象原则

数据抽象和过程抽象:


2.2.2 模块化、高内聚度和低耦合度原则

高内聚度原则:

2.2.2.1 偶然内聚(Coincidental cohesion)

2.2.2.2 逻辑内聚(Logical Cohesion)

2.2.2.3 时间内聚(Temporal cohesion)

2.2.2.4 过程内聚(Procedural cohesion)

2.2.2.5 通信内聚(Communicational cohesion)

2.2.2.6 顺序内聚(Sequential cohesion)

2.2.2.7 功能内聚(Functional cohesion)

2.2.2.8 内聚度与软件结构好坏的关系

低耦合度原则:

2.2.2.9 零耦合

2.2.2.10 数据耦合

2.2.2.11 特征耦合

2.2.2.12 控制耦合

2.2.2.13 公共环境耦合

2.2.2.14 内容耦合

示例:

2.2.2.15 耦合度与软件结构

2.2.3 信息隐藏原则

面向对象软件设计与实现中的信息隐藏:

2.2.4 关注点分离原则

2.2.5 面向切面的编程(AOP)

2.2.6 软件重用原则


2.2.7 软件设计的其他原则

3 面向对象软件设计方法学
3.1.1 软件设计方法的发展

3.1.2 软件设计方法—结构化方法

系统结构图:

3.1.2.1 面向数据流的结构化设计

- 变换流(Transform Flow):所有信息流都可归结为变换流
  
- 变换型的软件结构图:相应于取得数据、变换数据、给出数据,变换流型系统结构图由输入、变换中心和输出等三部分组成
  
- 事务流(Transaction Flow)
  
- 事务型的软件结构图
  
3.1.3 面向对象软件设计方法学

 
3.1.3.1 面向对象软件设计过程

- 用包图表示的软件体系结构设计
- 用交互图来表示用户界面设计
3.1.3.2 面向对象的软件设计原则
- 单职责原则(Single Responsibility Principle)
  
- 开-闭原则 (Open Closed Principle)
  
- 里氏替换原则 (Liskov Substitution Principle)
   - Liskov替换原则的实现:
  
 
- Liskov替换原则的实现:
- 接口分离原则 (Interface Segregation Principle, ISP)
  
示例:

- 依赖倒置原则 (Dependency Inversion Principle, DIP):依赖关系应该是尽量依赖接口(或抽象类),而不是依赖于具体类。
  
  
- 最少知识原则
  
3.1.3.3 面向对象软件设计的优势

 
3.1.4 软件设计的CASE工具

4 软件设计输出及评审
4.1.1 软件设计的输出

4.1.2 软件设计文档的规范

4.1.3 软件设计中的缺陷

4.1.4 软件设计的评审

4.1.5 软件设计的管理
