传统的软件设计使用结构化设计技术,结构化设计是以结构化分析的数据模型、功能模型和行为模型为基础,完成数据设计、体系结构设计、接口设计和过程设计。这些设计活动分别采用不同的工具进行。数据设计
数据设计是把分析阶段创建的信息域模型转变成实现软件所需要的数据结构。
数据结构可以使用Jackson图来表示。
Jackson图和描绘软件结构的层次图形式相近,但是含义却有很大相同:层次图中的一个方框通常代表一个模块;Jackson图中的一个方框并不代表一个模块,通常只代表几个语句;层次图表现的是模块的调用关系;Jackson图表现的是组成关系。
Jackson图示例如下:
体系结构设计
体系结构设计确定了程序的主要结构元素(即程序构件)之间的关系。
体系结构可以使用HIPO图和Yourdon提出的结构图来表示。HIPO图
HIPO图是美国IBM公司发明的“层次图加输入/处理/输出图”的英文缩写。
层次图使用矩形框表示一个模块,用框间的连线表示模块的调用关系。如下图所示:
HIPO图在层次图里把除了顶层的方框之外的每个方框都加了编号,然后再使用一张IPO图描述这个方框代表的模块的处理过程。
IPO 图的基本形式是在左边的框中列出输入数据,在中间的框中列出数据处理,在右边的框中列出输出数据。如下图所示:
或者使用IPO表来表示,如下图:
结构图
结构图和层次图类似,也是用一个方框代表一个模块,在框内注明模块的名字或主要功能,用方框之间的箭头(或直线)表示模块的调用关系。同时,在结构图中通常还用带注释的箭头表示模块调用过程中来回传递的信息,并且用注释箭头尾部的形状来区分数据信息和控制信息:尾部是空心圆表示传递的是数据,实心圆表示传递的是控制信息。此外,还可以使用一些附加的符号表示模块的选择调用或循环调用。
结构图示例如下:
接口设计
接口设计的结果描述了软件内部、软件与协作系统之间以及软件与使用它的人之间的沟通方式。
接口用于传递数据,因此,数据流图提供了接口设计所需要的信息。过程设计
过程设计把程序体系结构中的结构元素,变换成对软件构件的过程性描述。
过程设计的目标不仅仅是逻辑上正确地实现每个模块的功能,更重要的是设计出的处理过程应该尽可能简明易懂。过程设计工具有很多种,包括图形、表格和语言3类。程序流程图
程序流程图又称为程序框图,它是我们最熟悉、使用最广泛的工具。
但是,由于程序流程图有很多缺点,诸如“诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构”、“不易表示数据结构”等,所以很多专家都建议停止使用它。盒图(N-S图)
Nassi和Shneiderman提出的盒图(所以被称为N-S图)就是一种不允许违背结构程序设计精神的图形工具。
使用盒图可以很容易实现以下目标:程序员在进行设计时必须符合结构设计原则,而不能随意转移控制。可以很容易地确定局部和全程数据的作用域。可以很容易地表现嵌套关系。
盒图的基本符号如下图:
判定表和判定树
判定表能够非常清晰地表示多重嵌套的条件选择关系。
一张判定表由4部分组成,左上部列出所有条件,左下部是所有可能做的动作,右上部是表示各种条件组合的一个矩阵,右下部是和每种条件组合相对应的动作。如下图所示:
但是当条件变得更多时,判定表会显得很复杂,不够简洁。这时可以使用判定树。
判定树是判定表的变种,它是以树枝的形式表示复杂的条件组合与应做的动作之间的对应关系。如下图:
判定树比判定表更直观,但简洁性却不如判定表。但是当数据元素的同一个值往往要重复写很多遍,而且越接近树的叶端重复次数越多。过程设计语言
过程设计语言(Program Design Language,PDL)也称为伪码,它使用一种语言(通常是某种自然语言)的词汇,同时却使用另一种语言(某种结构化的程序设计语言)的语法,以表示数据和处理过程。
设计工具很丰富,有图有表有语言
覆盖设计全过程,认真表达仔细选