第5章-模块和对象_第1页
第5章-模块和对象_第2页
第5章-模块和对象_第3页
第5章-模块和对象_第4页
第5章-模块和对象_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章模块和对象

5.1模块的概念5.2内聚5.3耦合5.4抽象和数据封装5.5信息隐藏5.6对象5/31/202615.1模块的概念模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。模块可以看作是构成程序的基本构件。把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求,这就是模块化。5/31/20262把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据5/31/20263图5-1模块化和软件成本5/31/202645.2内聚内聚是一个模块内部交互的程度。内聚用来衡量一个模块内部各个元素彼此结合的紧密程度。5/31/202655.2.1偶然性内聚如果一个模块执行多个不相关的操作,或者这些操作有关系,关系也很松散,就叫做偶然性内聚。

偶然性内聚的模块出现修改错误的概率比其他类型的模块高,使得整个软件系统的可维护性降低,可理解性极差,根本就不可重用。一般来说,可以把它分成更小的模块,使得每个小模块只完成一个操作。5/31/202665.2.2逻辑性内聚当一个模块进行一系列相关的操作,每个操作由调用模块来选择时,这个模块就具有逻辑性内聚。具有逻辑性内聚的模块完成的任务在逻辑上属于相同或相似的一类。具有逻辑性内聚的模块有一些缺点。第一,模块整体上不易理解。第二,导致严重的维护问题。第三,很难对这种模块进行重用。5/31/202675.2.3时间性内聚当模块执行一系列与及时性有关的操作时,该模块具有时间性内聚。具有时间性内聚的模块包含的任务必须在同一段时间内执行。这种模块的操作之间的关联很弱,但是与其他模块的操作关联很强。对时间性内聚模块进行重用的可能性很小。5/31/202685.2.4过程性内聚如果一个模块执行一系列与产品要遵循的步骤顺序有关的操作,则该模块具有过程性内聚。具有过程性内聚的模块内部处理单元都是相关的,而且必须以特定次序执行。这种模块的操作之间是弱连接,重用性也极差。5/31/202695.2.5通信性内聚如果一个模块执行一系列与产品要遵循的步骤顺序有关的操作,并且如果所有操作都在相同的数据上进行,则该模块具有通信性内聚。具有通信性内聚的模块中,所有元素都使用同一个输入数据和(或)产生同一个输出数据。这种模块的操作之间是连接紧密,重用性极差,解决方法是对这种模块进一步分解,使得每一个模块单独执行一个操作。5/31/2026105.2.6功能性内聚只执行一个操作或只达到一个单一目标的模块具有功能性内聚。具有功能性内聚的模块可重用。具有功能性内聚的模块便于维护。首先,功能性内聚可以有效地隔离错误。其次,修改容易。最后,修改对其他模块影响小。5/31/2026115.2.7信息性内聚如果模块进行许多操作,每个都有各自的入口点,每个操作的代码相对独立,而且所有操作都在相同的数据结构上完成,则该模块具有信息性内聚。信息性内聚和逻辑性内聚区别:逻辑性内聚模块的各个操作互相纠缠在一起,信息性内聚模块的各操作代码相互独立。具有信息性内聚的模块主要用来实现一种抽象的数据类型。5/31/2026125.2.8内聚的设计原则偶然性内聚、逻辑性内聚和时间性内聚也被认为是低内聚,过程性内聚和通信性内聚被认为是中内聚,功能性内聚和信息性内聚被认为是高内聚。设计时应力争做到高内聚,辨认出低内聚的模块,通过修改设计提高模块的内聚程度,获得较高的模块独立性。5/31/2026135.3耦合耦合是指两个模块之间交互的程度。耦合衡量不同模块彼此间互相依赖(连接)的紧密程度。耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口的数据。耦合按交互照程度从高到低的顺序分为内容耦合、共用耦合、控制耦合、印记耦合和数据耦合五类。5/31/2026145.3.1内容耦合如果两个模块中的一个直接引用了另一个模块的内容,那么它们之间是内容耦合。内容耦合包括下面一些情况:一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一个模块的内部;两个模块有一部分程序代码重叠;一个模块有多个入口。5/31/2026155.3.2共用耦合如果两个模块都可存取相同的全局数据,则它们之间是共用耦合。5/31/2026165.3.3控制耦合如果两个模块中的一个模块给另一个模块传递控制要素,则它们之间是控制耦合,也就是说,一个模块通过传递消息中的控制信息明确地控制另一个模块的逻辑。重用的可能很小。通常控制耦合与具有逻辑性内聚的模块有关联,也包含逻辑性内聚有关的困难。5/31/2026175.3.4印记耦合如果把数据结构作为参数进行传递,两个模块是印记耦合,但被调用的模块指在该数据结构的一些个别组件上进行操作。印记耦合增加了系统的复杂程度,并且导致对数据的访问失去控制。5/31/2026185.3.5数据耦合如果两个模块的所有参数是同类数据项,则它们之间是数据耦合。每个参数或者是简单参数,或者是数据结构(其中的所有元素为被调用的模块所使用)。数据耦合是低耦合,也是理想的目标。两个模块数据耦合,对一个模块的修改几乎不会对另一个模块产生影响,使得维护工作很容易。5/31/2026195.3.6耦合的设计原则耦合程度越低越好,在设计软件结构时,尽量使用数据耦合,少用特征耦合和控制耦合,限制共用耦合,完全不用内容耦合。5/31/202620耦合例子p、t和u在更新模式下访问相同的数据库号码输入输出1飞机类型状态标志2飞机零件清单——3功能代码——4飞机零件清单——5零件编号零件制造商6零件编号零件名称Figure5.7qrstup数据耦合——数据或标记耦合公共耦合公共耦合q控制耦合数据或标记耦合————r——数据耦合——s——数据耦合t公共耦合Figure5.85/31/2026215.4抽象和数据封装抽象是通过抑制不必要的细节并强调相关的细节达到逐步求精的一种方法。抽象就是抽出事物的本质特征而暂时不考虑它们的细节。软件工程过程的每一步都是对软件开发的抽象层次的一次精化,是由抽象到具体的细化过程。数据封装是抽象的一个例子,如果一个数据结构含有在这个数据结构之上执行的操作,这种情况就实现了数据封装。通过数据封装,软件设计者在开发的不同时期不同层次上,考虑的内容是不同的。数据封装以简化产品维护的方式支持了数据抽象的实现,还减小出现退化错误的可能性。5/31/2026225.5信息隐藏信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。在设计产品之前,应列出一个未来可能修改的实现决定的清单。然后设计模块,对其他模块隐藏本模块设计的实现细节。隐藏的是模块的实现细节。5/31/2026235.6对象面向对象方法学中,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个封装体又可以唯一地标识它的名字,而且向外界提供一组服务(对对象施加的操作)。对象可以看作是数据类型的一个具体例子(实例),产品根据抽象数据类型进行设计,产品的变量(对象)是抽象数据类型的实例。5/31/2026

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论