一、概述
软件设计的两个步骤:总体设计和详细设计。
可行性研究阶段分析的是问题是否可行,需求分析阶段分析的是系统要做什么,而总体设计回答的是怎么做。要确定出系统中的每个程序由哪些模块组成,以及这些模块之间的相互关系。
为什么要在详细设计之前进行总体设计?
从全局的角度上看,花费较少的成本,从较抽象的层次上分析对比多种可能的系统实现方案和软件结构,从中选出最佳方案和最合理的软件结构,从而用较低的成本开发出较高质量的软件系统。
二、设计过程
1、总体设计过程的两个主要阶段(也就是总体设计阶段要完成的两个主要任务)
(1)系统设计阶段:确定系统的具体实现方案。(可选方案从哪里来?答案是需求分析阶段得到的数据流图)
(2)结构设计阶段:确定软件的结构。
具体的设计步骤在课本93页,其中前三条描述的是系统设计阶段,后面的描述的是结构设计阶段和过程设计阶段。其中过程设计阶段是详细设计部分的内容。
三、设计原理
1、模块化(复杂问题简单化就是模块化的依据)
模块化就是把程序划分成独立命名并且可以独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
既然模块化可以使得复杂问题简单化,那么是不是将一个程序分解的模块越多越好呢?
答案显然不是,理论上将一个程序无限分解,每个模块无限小,成本甚至可以达到不计。但是不能忽略的是,模块之间的接口也在不断地变多,接口的成本也在增长。
2、抽象
抽象就是抽出事物的本质而暂时不考虑他们的细节。
一次抽象就是一次精化过程,最高的抽象层次可以比做成控制系统的主要功能模块,而最低层次的模块就可以比作完成对一个数据的具体处理。
3、逐步求精
为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。
就是要做到把精力集中起来与当前开发阶段相关的那些方面上,而忽略那些对整体解决方案虽然是必要的但是目前还不需要考虑的细节。(换一种层次理解就是按优先级排序,确保每个问题都被解决,但是不同时解决多个任务。)
求精与抽象实际上是互补的,抽象就是一种概括,说明过程和数据。而求精就是不断地细化过程,细化原始陈述语句。
4、信息隐藏和局部化
应该这样设计和分解模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
5、模块独立(设计要做到高内聚、低耦合)
模块独立的好处显而易见,功能分割导致接口简化,易于开发;另外易于后期维护和测试,减少错误传播;在适当的时候可以插入一些模块……
内聚、耦合都很重要,但是实践证明,内聚更重要。(课本99页)
四、描绘软件结构的图形工具
课本102、103页
五、面向数据流的设计方法(结构化设计方法)
1、基于数据流图实现,将信息流映射成软件结构。
2、信息流的类型
(1)变换流
(2)事务流