|
|
- Info
- 模块化方法(modular method) : 一种软件开发方法,把一个待开发的软件分解成若干小的简单的部分,称为模块。每一个模块都独立地开发、测试,最后再组装出整个软件。这种开发方法是对待复杂事物的“分而治之”的一般原则在软件开发领域的具体体现。
- 模块化开发方法涉及的主要问题是:模块设计的规则,系统如何分解成模块。
模块是执行一个特殊任务或实现一个特殊的抽象数据类型的一组例程和数据结构。模块通常由两部分组成。接口:列出可由其他模块或例程访问的常数、数据类型、变量、函数等;实现:私有量(只能由本模块自己使用的)及实际实现本模块的源程序代码。
模块的接口部分刻画了各个模块是如何耦合的,是其他模块的设计者和使用者所需要知道的。而实现部分是各模块的内部事务,其他模块并不需要知道。这也体现了对待复杂事物的另一原则——抽象原则(在软件领域称为信息隐蔽原则),即把非本质的性质隐藏起来,只突出那些本质的性质,以减轻人们思考和注意的负担。模块化澄清和规范化了软件中各部分间的界面。如此就便利了成组的软件设计人员工作,也促使了更可靠的软件设计实践。
在把系统分解成模块时,应该遵循以下的规则:①得到最高的模块内聚,也就是在一个模块内部的元素最大程度地关联。只实现一种功能的模块是具有最高内聚的,具有三种以上功能的模块则是低内聚的。②最低的耦合,也就是不同模块之间的关系尽可能弱。③模块大小适度。④模块调用链的深度 (嵌套层次)不可过多。⑤接口干净,信息隐蔽。⑥尽可能地复用已有模块。
如何对一个规约进行分解,以得到模块化的系统结构。已经有一些基于设计规则的方法。
(1)数据结构设计方法 最著名的是Jackson结构化设计(参见Jackson系统开发方法)。它从画出所有输入/输出数据的逻辑结构图开始,最后得到程序结构图,反映了系统结构。可能还需要继续对其中模块求精,得到更低级的模块,但是基本程序结构是不变的。
(2)功能分解 步骤是:陈述出功能意图(即要解决的问题),进行功能求精(即划分层次),连接求精了的功能,进行检查,再求精,再检查,直至得到满意的解决为止。这种方法,也称为结构化设计、层次化分解、模块分解、功能分解。
(3)数据流设计 步骤是:把问题分解成由动作图(也称为进程)和数据图(也称为流)组成的数据流图,还有存放待处理的静态信息的存储元素。然后从数据流图中找出中心进程;以它为根,把数据流图转换为树形结构。按照功能分解形式来分解进程,即把模块分为三类(输入、变换、输出),进行进程求精,得到PDL语言表示。最后把PDL变成某种程序语言。
(4)面向对象的设计 这一方法要求标识出对象及其属性、每个对象所需要的操作。把数据及函数封装在一起,以形成类。并建立其间相互可见的关系,即许可的调用与被调用关系,形成每个类的界面。最后是实现每个类(参见面向对象方法)。
模块化方法的优点是明显的,难点所在是如何处理大型问题。分而治之的原则是好的,然而对大型问题会难以找到下手之处。当从一个角度看问题时,要求隐蔽的信息是这些,而换一个角度看时,却要求隐蔽另外的信息。模块化方法在发展的早期主要是手工设计方法,以后发展了许多自动化工具来支持它们。最好是几种方法组合使用,各自发挥所长,但是内部表示和工具间的相容性是一大困难。(董韫美)
|