系统结构设计是从计算机实现的角度出发,对前一阶段划分的子系统进行校核,使其界面更加清楚和明确,并在此基础上,将子系统进一步逐层分解,直至划分到模块。在众多的系统结构设计方法中,结构化设计方法是应用比较广泛并且比较受重视的一种方法。
结构化设计方法的基本思想是使系统模块化,即把一个系统自上而下逐步分解为若干个彼此独立而又有一定联系的组成部分,这些组成部分称为模块。对于任何一个系统都可以按功能逐步由上向下,由抽象到具体,逐层将其分解为一个多层次的、具有相对独立功能的模块所组成的系统。在这一基本思想的指导下,系统设计人员以逻辑模型为基础,并借助于一套标准的设计准则和图表等工具,逐层地将系统分解成多个大小适当、功能单一、具有一定独立性的模块,把一个复杂的系统转换成易于实现、易于维护的模块化结构系统。
(1)结构化设计的工具——结构图
系统结构化设计的主要工具是结构图。结构图的构成主要包括以下几个基本部分:
1)模块。模块用矩形方框表示,矩形方框中要写有模块的名称,模块的名称应恰当地反映这个模块的功能。
2)调用。用从一个模块指向另一个模块的箭头线,表示前一个模块中含有对后一个模块的调用关系。
3)数据。调用箭头线旁边带圆圈的小箭头线,表示从一个模块传送给另一个模块的数据。
4)控制信息。调用箭头线旁边带圆点的小箭头,表示从一个模块传递给另一个模块的控制信息。
图10-1a的结构图说明了模块A调用模块B的情况。当模块A调用模块B时,同时传递数据x和y,处理完后将数据z返回模块A。如果模块B对数据y修改后,再送回给模块A,则数据y应该出现在调用箭头线的两边,如图10-1b所示。图10-1c表示模块A调用模块B,且模块A把数据x和y及控制信息C传送给模块B,模块B把数据z返回到模块A。
`图10-1 结构图的简单示例
在结构图中,除了以上几个基本符号之外,还有表示模块有条件调用和循环调用的符号。图10-2a表示模块A有条件地选择调用模块B、C或D,图中的菱形符号表示选择调用关系。图10-2b表示模块A循环地调用模块B、C和D,图中的弧形箭头表示循环调用关系。
图10-2 模块调用(www.daowen.com)
a)条件调用 b)循环调用
(2)结构化设计时模块划分的标准
结构化设计要解决的主要问题是把系统分解成一个个模块,并以结构图的形式表达出其内在的联系。因此,模块划分得是否合理,直接影响到系统设计的质量,影响系统开发的时间、开发成本以及系统实施和维护的方便程度等方面。为了能够合理地划分系统的各个模块,使其具有较强的独立性,在划分模块时要遵循的总原则是:尽量把密切相关的子问题划归到同一模块,把不相关的子问题划归到系统的不同模块。而评价和衡量系统的结构化程度及模块的独立性,可以通过模块与模块之间的关联度和模块内部各个组成部分之间的聚合度两条标准来详细讨论。
1)模块之间的关联度。
模块之间的关联度,是用来表示一个模块与其他模块之间联系的紧密程度。关联度越低则说明模块之间的联系越少,模块的独立性就越强,就越容易独立地进行编程、调试和修改,一个模块中产生的错误对其他模块的影响也就越小。对于模块之间的关联度,可以从以下三个方面来衡量和评价。
● 模块之间的联系方式。如果一个模块直接调用另一个模块内部的数据或指令,这说明被调用模块内含有多方面不相关的内容,导致模块间联系增多,修改一个模块将直接影响其他的模块,降低了模块的独立性。
● 模块之间使用控制信息的数量。由于控制信息直接影响程序的运行过程,所以过多地使用控制信息,必然会增加模块之间的联系,影响模块的独立性。因此,在模块之间尽可能不用或少用控制信息。图10-3a是应用控制信息的一个例子。模块A将计算“平均工资/工资总额”的控制信息传送给模块B,模块B根据这个控制信息求出平均工资或者工资总额,然后再将数据传送给模块A。由于控制信息的存在,增加了模块之间的关联度,从而影响了模块的独立性。图10-3b是消除控制信息的例子。把模块B分成B1和B2两个功能单一的模块,模块A根据要求,有条件调用B1或B2。而模块B1和B2可以分别按照模块A的要求发送数据,两者之间互不影响。
图10-3 控制信息的图例
a)应用控制信息 b)消除控制信息
● 模块之间传送数据的数量。模块之间通过调用关系传送数据,是一种比较理想的联系方式。但是,如果模块之间传送的数据过多,同样会给理解和修改模块带来困难,降低系统的可变更性。一个模块同其他模块之间传递的数据越少,模块间的相互独立性就越强,也就越便于系统的设计和维护。
2)模块内部的聚合度。
模块内部的聚合度,是用来描述和评价模块内部各个组成部分之间联系的紧密程度。一个模块内部的各个组成部分之间联系越密切,其聚合度越高,模块的独立性也就越强。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。