总体设计的基本目的就是回答“概括地说,系统应该如何实现”这个问题。因此,总体设计又称为概要设计或初步设计。
① 划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等(但是每个物理元素仍然处于黑盒子级,这些黑盒子里的具体内容将在以后仔细设计)
② 总体设计阶段的另一项重要任务是设计软件的结构,也就是要确定系统中每个程序是由哪些模块组成的,以及这些模块相互间的关系。
总体设计过程通常由两个主要阶段组成
典型的总体设计过程包括以下9个步骤:
答:模块是由边界元素限定的相邻程序元素序列,而且有一个总体标识符代表它。像C、C++和Java语言中的{…}对,都是边界元素的例子。按照模块的定义,函数、子程序都可作为模块。面向对象方法学中的对象是模块,对象内的方法也是模块。模块是构成程序的基本构件。
模块化就是把程序划分成为独立命名且可以独立访问的模块,每个模块完成一个子功能,把所有的模块集成起来构成一个整体,可以完成指定的功能,满足用户的需求。
如果无限地分割软件,最后为了开发软件而需要的工作量就小得可以忽略了。上述结论不能成立,如下图,当模块数目增加时每个模块的规模将减小,开发单个模块需要的成本确实减少了,但是随着模块数目增加,设计模块间接口所需要的工作量也将增加。根据这两个因素。得出了图中的总成本曲线。每个程序都相应地有一个最适当的模块数目M,使得系统的开发成本最小。
可以把逐步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。”事实上,可以把逐步求精看作是一项把一个时期内必须解决的种种问题按优先级排序的技术,逐步求精方法确保每个问题都将被解决,而且每个问题都将在适当的时候被解决。
逐步求精之所以如此重要,是因为人类的认知过程遵守 Miller法则 : 一个人在任何时候都只能把注意力集中在7士2个知识块上。Miller法则是人类智力的基本局限,人们不可能战胜自己的自然本性,只能接受这个事实,承认自身的局限性,并在这个前提下尽自己的最大努力工作。
抽象与求精是一对互补的概念。抽象使得设计者能够说明过程和数据,同时却忽略了低层细节。事实上,可以把抽象看作是一种通过忽略多余的细节同时强调有关的细节,而实现逐步求精的方法。求精则帮助设计者在设计过程中逐步揭示出低层细节。
信息隐藏原理指出:一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。
模块独立的概念是模块化、抽象、信息隐藏和局部化概念的直接结果。
模块的独立程度可以由两个定性标准度量,这两个标准分别称为内聚和耦合。耦合衡量不同模块彼此间互相连接的紧密程度;内聚衡量一个模块内部各个元素彼此结合的紧密程度。
耦合是对一个软件结构内不同模块之间互连程度的度量。在软件设计中应该追求尽可能松散耦合的系统(由于模块间联系简单,发生在一处的错误传播到整个系统的可能性就很小)。
耦合分为以下几类:(耦合程度由低到高:无-数-标-控-外-公-内)
内聚标志着一个模块内各个元素彼此结合的紧密程度,设计时应该力求做到高内聚,内聚和耦合是密切相关的,模块内的高内聚往往意味着模块间的松耦合。模块化设计的原则一般遵循:高内聚、低耦合。
内聚分为以下几类:
通常用数据流图描绘信息在系统中加工和流动的情况。
因为 任何软件系统都可以用数据流图表示,所以面向数据流的设计方法理论上可以设计任何软件的结构。通常所说的结构化设计方法(简称SD方法),也是基于数据流的设计方法。
面向数据流的设计方法把 信息流 映射成 软件结构。
信息流有两种类型,分别是变换流和事务流。
需要注意的是:
交换流是线性的、顺序的。
事务流是分支的。
下图中T称为事务中心,它完成下述任务。
1、总体设计阶段的基本目的是用比较抽象概括的方式确定系统如何完成预定的任务。因此,总体设计阶段主要由两个小阶段组成。首先需要进行系统设计,然后进行软件结构设计。
2、在软件结构设计中,层次图和结构图是描绘软件结构的常用工具。
3、自顶向下逐步求精是进行软件结构设计的常用途径。但是,如果已经有了详细的数据流图,也可以使用面向数据流的设计方法,用形式化的方法由数据流图映射出软件结构。 应该记住,这样映射出来的只是软件的初步结构,还必须根据设计原理并且参考启发式规则,认真分析和改进软件的初步结构,以得到质量更高的模块和更合理的软件结构。(数据流图的作用 —— 软件结构设计)
1、模块是构成程序的基本构件。
2、模块是构成程序的基本构件。
3、如果无限地分割软件,最后为了开发软件而需要的工作量就小得可以忽略了。(×)
4、数据耦合可有可无。(×)
(数据耦合是低耦合。系统中至少必须存在数据耦合,因为只有当某些模块的输出数据作为另一些模块的输人数据时,系统才能完成有价值的功能)
5、控制耦合通常可以被数据耦合代替。(√)
(控制耦合是中等程度的耦合,它增加了系统的复杂程度。控制耦合往往是多余的,在把模块适当分解之后 通常可以用数据耦合代替控制耦合。)
6、任何软件系统都可以用数据流图示。(√)