您好,欢迎访问三七文档
当前位置:首页 > 建筑/环境 > 工程监理 > 软件设计的基本原理--模块
软件设计的基本原理•模块•模块化•独立性•抽象•信息隐藏模块•一般把用一个名字就可调用的一段程序称为“模块”。模块在程序中是数据说明、可执行语句等程序对象的集合,或者是单独命名和编址的元素,如高级语言中的过程、函数、子程序等等。模块是可组合、分解和更新的单元。模块具有四个基本属性:•接口:指模块的输入与输出。•功能:即指该模块要完成的任务。•逻辑:即描述模块为了完成任务,模块内部怎么做。•状态:即使用该模块时的环境和条件。模块化•模块化就是把整个系统划分成若干个模块,每个模块完成一个子功能,将多个模块组织起来实现整个系统的功能。模块化设计方法强调的是清楚地定义每个模块的功能和它的输入/输出参数,而模块的实现细节隐藏在各自的模块之中,与其它模块之间的关系可以是调用关系,因此,模块化程序易于调试和修改。•模块规模越小,模块的开发成本越少。反之,模块之间的接口变得越复杂,模块的集成成本越高。模块化设计的目的•模块化产品设计的目的是以少变应多变,以尽可能少的投入生产尽可能多的产品,以最为经济的方法满足各种要求。由于模块具有不同的组合可以配置生成多样化的满足用户需求的产品的特点,同时模块又具有标准的几何连接接口和一致的输入输出接口,如果模块的划分和接口定义符合企业批量化生产中采购、物流、生产和服务的实际情况,这就意味着按照模块化模式配置出来的产品是符合批量化生产的实际情况的,从而使定制化生产和批量化生产这对矛盾得到解决。模块化设计的作用•模块化设计是绿色设计方法之一,它已经从理念转变为较成熟的设计方法。将绿色设计思想与模块化设计方法结合起来,可以同时满足产品的功能属性和环境属性:1.一方面可以缩短产品研发与制造周期,增加产品系列,提高产品质量,快速应对市场变化;2.另一方面,可以减少或消除对环境的不利影响,方便重用、升级、维修和产品废弃后的拆卸、回收和处理。抽象•抽象是认识复杂现象过程中使用的思维工具,即抽出事物本质的共同性而暂不考虑它的细节,不考虑其他因素。抽象的概念被广泛应用于就算计软件领域,在学中更是如此。软件工程过程中的每一步都可以看作是对软件解决方法的抽象层次的一次细化。信息隐蔽•信息隐蔽是指,每个模块的实现细节对于其他模块来说是隐蔽的。也就是说,模块中所包含的信息(包括数据和过程)不允许其他不需要这些信息的模块使用。•通常有效的模块化可以通过定义一组相互独立的模块来实现,这些模块相互间的通信仅仅使用对于实现软件功能来说是必要的信息。通过抽象,可以确定组成软件的过程(或信息)实体,而通过信息隐蔽,则可定义和实施对模块的过程细节和局部数据结构的存取限制。模块独立性•耦合:指模块间相互关联的程度•内聚:衡量一个模块内部各个元素彼此结合的紧密程度•耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。一般模块之间可能的连接方式有七种,构成耦合性的七种类型:(1)非直接耦合(2)数据耦合(3)标记耦合(4)控制耦合(5)外部耦合(6)公共耦合(7)内容耦合1.非直接耦合(NondirectCoupling)如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,这就是非直接耦合。这种耦合的模块独立性最强。2.数据耦合(DataCoupling)如果一个模块访问另一个模块时,彼此之间是通过简单数据参数(不是控制参数、公共数据结构或外部变量)来交换输入、输出信息的,则称这种耦合为数据耦合。3.标记耦合(StampCoupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。4.控制耦合(ControlCoupling)如果一个模块通过传送开关、标志、名字等控制信息,明显地控制选择另一模块的功能,就是控制耦合。5.外部耦合(ExternalCoupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,则称之为外部耦合。外部耦合引起的问题类似于公共耦合6.公共耦合(CommonCoupling)若一组模块都访问同一个公共数据环境,则它们之间的耦合就称为公共耦合。公共的数据环境可以是全局数据结构、共享的通信区、内存的公共覆盖区等。公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。•若一个模块只是往公共数据环境里传送数据,而另一个模块只是从公共数据环境中取数据,则这种公共耦合叫做松散公共耦合。若两个模块都从公共数据环境中取数据,又都向公共数据环境里送数据,则这种公共耦合叫做紧密公共耦合。只有在模块之间共享的数据很多,且通过参数表传递不方便时,才使用公共耦合。•这种耦合会引起下列问题:1)所有公共耦合模块都与某一个公共数据环境内部各项的物理安排有关,若修改某个数据的大小,将会影响到所有的模块。2)无法控制各个模块对公共数据的存取,严重影响软件模块的可靠性和适应性。3)公共数据名的使用,明显降低了程序的可读性7.内容耦合(ContentCoupling)如果发生下列情形,两个模块之间就发生了内容耦合(1)一个模块直接访问另一个模块的内部数据;(2)一个模块不通过正常入口转到另一模块内部;(3)两个模块有一部分程序代码重迭(只可能出现在汇编语言中);(4)一个模块有多个入口。•在内容耦合的情形,所访问模块的任何变更,或者用不同的编译器对它再编译,都会造成程序出错。好在大多数高级程序设计语言已经设计成不允许出现内容耦合。它一般出现在汇编语言程序中。这种耦合是模块独立性最弱的耦合。高低弱强模块耦合性模块独立性内容耦合公共耦合外部耦合控制耦合标记耦合数据耦合非直接耦合模块内聚•功能内聚•信息内聚•通信内聚•过程内聚•时间内聚•逻辑内聚•巧合内聚功能内聚(FunctionalCohesion)一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块为功能内聚模块。•功能内聚模块的优点是它们容易修改和维护,因为它们的功能是明确的,模块间的耦合是简单的。但是,如果把一个功能分成两个模块来解决,就会导致模块之间的很强的耦合,而且它们不易单独理解和实现。功能内聚模块的内聚程度最高。在把一个系统分解成模块的过程中,应当尽可能使模块达到功能内聚这一级,便于主程序的调用和控制。信息内聚(InformationalCohesion)这种模块完成多个功能,各个功能都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。这类模块的优点是,当把程序某些方面细节隐藏在一个模块中时,各个模块的独立性就增加了。通信内聚(CommunicationCohesion)如果一个模块内各功能部分都使用了相同的输入数据,或产生了相同的输出数据,则称之为通信内聚模块。通常,通信内聚模块是通过数据流图来定义的。•通信内聚模块的内聚程度比过程内聚模块的内聚程度要高,因为在通信内聚模块中包括了许多独立的功能。但是,由于模块中各功能部分使用了相同的输入/输出缓冲区,因而降低了整个系统的效率。过程内聚(ProceduralCohesion)使用流程图做为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。这类模块的内聚程度比时间内聚模块的内聚程度更强一些。另外,因为过程内聚模块仅包括完整功能的一部分,所以它的内聚程度仍然比较低,模块间的耦合程度还比较高。时间内聚(ClassicalCohesion)时间内聚又称为经典内聚。这种模块大多为多功能模块,但模块的各个功能的执行与时间有关,通常要求所有功能必须在同一时间段内执行。例如初始化模块和终止模块。•时间内聚模块比逻辑内聚模块的内聚程度又稍高一些。因为时间内聚模块中所有各部分都要在同一时间段内执行,而且在一般情形下,各部分可以以任意的顺序执行,所以它的内部逻辑更简单,存在的开关(或判定)转移更少。逻辑内聚(LogicalCohesion)这种模块把几种相关的功能组合在一起,每次被调用时,由传送给模块的判定参数来确定该模块应执行哪一种功能。•逻辑内聚模块比巧合内聚模块的内聚程度要高。因为它表明了各部分之间在功能上的相关关系。但是它所执行的不是一种功能,而是执行若干功能中的一种,因此它不易修改。另外,当调用时需要进行控制参数的传递,这就增加了模块间的耦合程度。而将未用的部分也调入内存,这就降低了系统的效率。巧合内聚(CoincidentalCohesion)巧合内聚又称为偶然内聚。当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为巧合内聚模块,它是内聚程度最低的模块。模块内聚•内聚和耦合是相互关联的。在程序结构中各模块的内聚程度越高,模块间的耦合程度就越低。但这也不是绝对的。软件概要设计的目标是力求增加模块的内聚,尽量减少模块间的耦合,但增加内聚比减少耦合更重要,应当把更多的注意力集中到提高模块的内聚程度上来。
本文标题:软件设计的基本原理--模块
链接地址:https://www.777doc.com/doc-6768311 .html