在现实世界中,事物、状态或过程之间存在共性。把这些共性集中和概括起来,忽略它们之间的差异,这就是抽象。抽象就是抽出事物的本质特性而暂时不考虑它们的细节。
处理复杂系统的有效的方法是用层次的方式构造和分析它。一个复杂的动态系统首先可以用一些高级的抽象概念构造和理解,这些高级概念又可以用一些较低级的概念构造和理解,如此进行下去,直至最低层次的具体元素。这种层次的思维和解题方式必须反映在定义动态系统的程序结构之中,每级的一个概念将以某种方式对应于程序的一组成分。
当考虑对任何问题的模块化解法时,可以提出许多抽象的层次。在抽象的最高层次使用问题环境的语言,以概括的方式叙述问题的解法;在较低抽象层次采用更过程化的方法,把面向问题的术语和面向实现的术语结合起来叙述问题的解法;最后,在最低的抽象层次用可以直接实现的方式叙述问题的解法。
软件工程过程的每一步都是对软件解法的抽象层次的一次精化。在可行性研究阶段,软件作为系统的一个完整部件;在需求分析期间,软件解法是使用在问题环境内熟悉的方式描述的;当我们由总体设计向详细设计过渡时,抽象的程度也就随之减少了;最后,当源程序写出来以后,也就达到了抽象的最低层。
逐步求精与抽象是紧密相关,随着软件开发工程的进展,在软件结构每一层中的模块,表示了对软件抽象层次的一次精化。层次结构的上一层是下一层的抽象,下一层是上一层的求精。事实上,软件结构顶层的模块,控制了系统的主要功能并且影响全局;在软件结构底层的模块,完成对数据的一个具体处理,用自项向下由抽象到具体的方式分配控制,简化了软件的设计和实现,提高了软件的可理解性和可测试性,并且使软件更容易维护。
例: 开发一个 CAD软件,能够实现绘图系统的全部功能,供低级CAD使用。 抽象层次 1 用问题所处环境的术语描述这个软件
该软件系统具有与可视化通信的图形界面,能用鼠标代替绘图工具划出各种曲线和直线。能完成几何计算和截面视图及辅助视图的设计,图形设计结果存于图形文件中。
抽象层次 2 所用术语不再是问题所处环境的语言,但并没给出怎样做的信息,不能直接实现。 CAD 软件任务 用户界面任务; 创建二维图形任务;
显示图形任务;管理图形任务; end CAD
抽象层次 3 仅以二维图形任务为例
6
PROCEDURE 创建二维图形 REPEAT UNTIL 创建图形任务终止 DO WHILE 出现与数字仪的交互时 数字仪接口任务; 判断作图请求; 线:画线任务; 圆:画圆任务; . END;
DO WHILE 出现与键盘的交互时 键盘接口任务; 选择分析或计算; 辅助视图:辅助视图任务; 截面视图:截面视图任务; . END .
END PROCEDURE.
在这一抽象层次上,给出了初步过程表示,模块结构已清楚明朗,求精过程还可进行下去,直到得到源代码。 4.2.3 信息隐蔽和局部化
应用模块化原理时,将产生的一个问题:为了得到一组模块,应该如何分解软件结构。信息隐蔽原理指出:每一个模块的实现细节对于其他模块来说是隐蔽的,也就是说,模块中所包括的信息不允许其它不需要这些信息的模块调用。隐蔽表明有效的模块化可以通过定义一组独立的模块而实现,这些独立的模块间仅交换为完成系统功能而必须交换的信息。
模块间的通信仅使用对于实现软件功能的必要信息,通过抽象,可以确定组成软件的过程实体;而通过信息隐蔽,则可以定义和实施对模块的过程细节和局部数据结构的存取限制。局部化的概念和信息隐蔽概念密切相关。局部化是指把一些关系密切的软件元素物理地放得彼此靠近。在模块中使用局部数据元素就是局部化的一个例子。显然,局部化有助于实现信息隐蔽。
7
如果在测试期间和以后的软件维护期间需要修改软件,那么使用信息隐蔽原理作为模块化系统设计的标准就会带来极大好处。因为绝大多数数据和过程对于软件的其他部分而言是隐蔽的,也就是看不见的,在修改期间由于疏忽而引入的错误传播到软件的其他部分的机会就很少。 4.2.4 模块独立性
模块独立性是指软件系统中的每个模块只具有软件要求的具体子功能,而与软件系统中其他的模块接口是简单的。例如,如果一个模块只具有单一的功能,并且与其他的模块没有太多的联系,那末称此模块具有模块独立性。 模块独立性的概念体现了模块化、抽象、信息隐蔽和局部化概念。开发具有独立功能而且和其他模块之间没有过多的相互作用的模块,就可以做到模块独立。换句话说,希望这样设计软件结构,使得每个模块完成一个相对独立的特定子功能,并且与其他模块之间的关系很简单。
模块的独立程度可以由内聚和耦合两个标准来度量。耦合表示不同模块间互相连接的紧密程度;内聚表示一个模块内部各个元素彼此结合的紧密程度。 1.耦合
耦合是对一个软件结构内各个模块之间互连程度的度量。耦合强弱取决于模块间接口的复杂程度,调用模块的方式,以及通过接口的信息。 在软件设计中应该尽可能采用松散耦合。在松散耦合的系统中测试或维护任何一个模块,而不影响系统的其他模块。由于模块间联系简单,在一处发生错误就很小有可能性传播到整个系统。因此,模块间的耦合程度影响系统的可理解性、可测试性、可靠性和可维护性。 具体区分模块间耦合程度的标准如下。 ( 1) 非直接耦合
如果两个模块中的每一个都能独立地工作而不需要另一个模块的存在,那么它们彼此完全独立,这表明两个模块间无任何连接,耦合程度最低。但是,在一个软件系统中不可能所有模块之间都没有任何连接,因为模块之间的联系是通过模块的控制和调用来实现的。 ( 2)数据耦合
如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据,那么这种耦合称为数据耦合。数据耦合是低耦合。系统中至少必须存在这种耦合,因为只有当某些模块的输出数据作为另一些模块的输入数据时,系统才能完成有价值的功能。一般说来,一个系统内可以只含有数据耦合。 ( 3)控制耦合
如果在模块间传递的信息中含有控制信息(有时控制信息以数据的形式出现),则这种耦合称为控制耦合,如图 4-3所示。控制耦合是中等程度的耦
8
合,它增加了系统的复杂程度。在把模块分解之后通常可以用数据耦合代替控制耦合。
图 4-3控制耦合
( 4)公共环境耦合
当两个或多个模块通过一个公共数据环境相互作用时,这种耦合称为公共环境耦合。这里的公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件、物理设备等等。
① 公共环境耦合的复杂程度随耦合的模块个数而变化,当耦合的模块个数增加时复杂程度显著增加。如果只有两个模块有公共环境,那么这种耦合有下述两种可能,(参阅图 4-4)。
② 一个模块往公共环境送数据,另一个模块从公共环境取数据。这是数据耦合的一种形式,是比较松散的耦合。
两个模块都既往公共环境送数据又从里面取数据,这种耦合比较紧密,介于数据耦合和控制耦合之间。如果两个模块共享的数据很多,通过参数传递可能很不方便,这时可以利用公共环境耦合。
图4-4公共环境耦合
9
图4-5 内容耦合
( 5)内容耦合
最高程度的耦合是内容耦合。如果出现下列情况之一(参阅图 4-5),两个模块间就发生了内容耦合:
① 一个模块访问另一个模块的内部数据;
② 一个模块不通过正常人口而转到另一个模块的内部;
③ 两个模块有一部分程序代码重叠(只可能出现在汇编程序中); ④ 一个模块有多个人口(这表明一个模块有几种功能)。
应该避免使用内容耦合。事实上许多高级程序设计语言已经设计成不允许在程序中出现任何形式的内容耦合。 ( 6)标记耦合
如果一组模块通过参数表传递记录信息,也就是说,这组模块共享了这个记录,就是标记耦合。在设计中避免标记耦合。 ( 7)外部耦合
一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该变量的信息,则称之为外部耦合。
模块之间的耦合一般分为七种类型,如图 4-6所示。总之,耦合是影响软件复杂程度的一个重要因素。应该采取的原则是:尽量使用数据耦合,少用控制耦合,限制公共环境耦合的范围,完全不用内容耦合。
图 4-6七种耦合类型的关系
10
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库软件工程第四讲教案(2)在线全文阅读。
相关推荐: