资源预览内容
第1页 / 共26页
第2页 / 共26页
第3页 / 共26页
第4页 / 共26页
第5页 / 共26页
第6页 / 共26页
第7页 / 共26页
第8页 / 共26页
第9页 / 共26页
第10页 / 共26页
亲,该文档总共26页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第五章 模块和对象 5.15.1模块的概念模块的概念模块的概念模块的概念5.25.2内聚内聚内聚内聚5.35.3耦合耦合耦合耦合5.45.4抽象和数据封装抽象和数据封装抽象和数据封装抽象和数据封装5.55.5信息隐藏信息隐藏信息隐藏信息隐藏5.65.6对象对象对象对象8/2/202415.1 模块的概念模块的概念n n模块是由边界元素限定的相邻程序元素的序列,而且有一个总体标识符代表它。n n模块可以看作是构成程序的基本构件。n n把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求,这就是模块化。8/2/20242n n把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据 8/2/20243图图图图5-1 5-1 模块化和软件成本模块化和软件成本模块化和软件成本模块化和软件成本8/2/202445.2 内聚内聚n n内聚是一个模块内部交互的程度。内聚用内聚是一个模块内部交互的程度。内聚用来衡量一个模块内部各个元素彼此结合的来衡量一个模块内部各个元素彼此结合的紧密程度。紧密程度。 8/2/202455.2.1 偶然性内聚偶然性内聚n n如果一个模块执行多个不相关的操作,或者这些操如果一个模块执行多个不相关的操作,或者这些操如果一个模块执行多个不相关的操作,或者这些操如果一个模块执行多个不相关的操作,或者这些操作有关系,关系也很松散,就叫做偶然性内聚。作有关系,关系也很松散,就叫做偶然性内聚。作有关系,关系也很松散,就叫做偶然性内聚。作有关系,关系也很松散,就叫做偶然性内聚。n n n n偶然性内聚的模块出现修改错误的概率比其他类型偶然性内聚的模块出现修改错误的概率比其他类型偶然性内聚的模块出现修改错误的概率比其他类型偶然性内聚的模块出现修改错误的概率比其他类型的模块高,使得整个软件系统的可维护性降低,可的模块高,使得整个软件系统的可维护性降低,可的模块高,使得整个软件系统的可维护性降低,可的模块高,使得整个软件系统的可维护性降低,可理解性极差,根本就不可重用。理解性极差,根本就不可重用。理解性极差,根本就不可重用。理解性极差,根本就不可重用。n n一般来说,可以把它分成更小的模块,使得每个小一般来说,可以把它分成更小的模块,使得每个小一般来说,可以把它分成更小的模块,使得每个小一般来说,可以把它分成更小的模块,使得每个小模块只完成一个操作。模块只完成一个操作。模块只完成一个操作。模块只完成一个操作。8/2/202465.2.2 逻辑性内聚逻辑性内聚n n当一个模块进行一系列相关的操作,每个当一个模块进行一系列相关的操作,每个操作由调用模块来选择时,这个模块就具操作由调用模块来选择时,这个模块就具有逻辑性内聚。具有逻辑性内聚的模块完有逻辑性内聚。具有逻辑性内聚的模块完成的任务在逻辑上属于相同或相似的一类。成的任务在逻辑上属于相同或相似的一类。n n具有逻辑性内聚的模块有一些具有逻辑性内聚的模块有一些缺点缺点。第一,模块整体上不易理解。第一,模块整体上不易理解。第二,导致严重的维护问题。第二,导致严重的维护问题。第三,很难对这种模块进行重用。第三,很难对这种模块进行重用。8/2/202475.2.3 时间性内聚时间性内聚n n当模块执行一系列与及时性有关的操作时,当模块执行一系列与及时性有关的操作时,该模块具有时间性内聚。具有时间性内聚该模块具有时间性内聚。具有时间性内聚的模块包含的任务必须在同一段时间内执的模块包含的任务必须在同一段时间内执行。行。n n这种模块的操作之间的关联很弱,但是与这种模块的操作之间的关联很弱,但是与其他模块的操作关联很强。对时间性内聚其他模块的操作关联很强。对时间性内聚模块进行重用的可能性很小。模块进行重用的可能性很小。8/2/202485.2.4 过程性内聚n n如果一个模块执行一系列与产品要遵循的步如果一个模块执行一系列与产品要遵循的步骤顺序有关的操作,则该模块具有过程性内骤顺序有关的操作,则该模块具有过程性内聚。具有过程性内聚的模块内部处理单元都聚。具有过程性内聚的模块内部处理单元都是相关的,而且必须以特定次序执行。是相关的,而且必须以特定次序执行。n n这种模块的操作之间是弱连接,重用性也极这种模块的操作之间是弱连接,重用性也极差。差。8/2/202495.2.5 通信性内聚通信性内聚n n如果一个模块执行一系列与产品要遵循的步骤顺如果一个模块执行一系列与产品要遵循的步骤顺如果一个模块执行一系列与产品要遵循的步骤顺如果一个模块执行一系列与产品要遵循的步骤顺序有关的操作,并且如果所有操作都在相同的数序有关的操作,并且如果所有操作都在相同的数序有关的操作,并且如果所有操作都在相同的数序有关的操作,并且如果所有操作都在相同的数据上进行,则该模块具有通信性内聚。据上进行,则该模块具有通信性内聚。据上进行,则该模块具有通信性内聚。据上进行,则该模块具有通信性内聚。n n具有通信性内聚的模块中,所有元素都使用同一具有通信性内聚的模块中,所有元素都使用同一具有通信性内聚的模块中,所有元素都使用同一具有通信性内聚的模块中,所有元素都使用同一个输入数据和个输入数据和个输入数据和个输入数据和( (或或或或) )产生同一个输出数据。产生同一个输出数据。产生同一个输出数据。产生同一个输出数据。n n这种模块的操作之间是连接紧密,重用性极差,这种模块的操作之间是连接紧密,重用性极差,这种模块的操作之间是连接紧密,重用性极差,这种模块的操作之间是连接紧密,重用性极差,解决方法是对这种模块进一步分解,使得每一个解决方法是对这种模块进一步分解,使得每一个解决方法是对这种模块进一步分解,使得每一个解决方法是对这种模块进一步分解,使得每一个模块单独执行一个操作。模块单独执行一个操作。模块单独执行一个操作。模块单独执行一个操作。8/2/2024105.2.6 功能性内聚功能性内聚n n只执行一个操作或只达到一个单一目标的只执行一个操作或只达到一个单一目标的模块具有功能性内聚。模块具有功能性内聚。n n具有功能性内聚的模块可重用。具有功能性内聚的模块可重用。n n具有功能性内聚的模块便于维护。首先,具有功能性内聚的模块便于维护。首先,功能性内聚可以有效地隔离错误。其次,功能性内聚可以有效地隔离错误。其次,修改容易。最后,修改对其他模块影响小。修改容易。最后,修改对其他模块影响小。8/2/2024115.2.7 信息性内聚信息性内聚n n如果模块进行许多操作,每个都有各自的入口点,如果模块进行许多操作,每个都有各自的入口点,如果模块进行许多操作,每个都有各自的入口点,如果模块进行许多操作,每个都有各自的入口点,每个操作的代码相对独立,而且所有操作都在相每个操作的代码相对独立,而且所有操作都在相每个操作的代码相对独立,而且所有操作都在相每个操作的代码相对独立,而且所有操作都在相同的数据结构上完成,则该模块具有信息性内聚。同的数据结构上完成,则该模块具有信息性内聚。同的数据结构上完成,则该模块具有信息性内聚。同的数据结构上完成,则该模块具有信息性内聚。n n信息性内聚和逻辑性内聚区别:逻辑性内聚模块信息性内聚和逻辑性内聚区别:逻辑性内聚模块信息性内聚和逻辑性内聚区别:逻辑性内聚模块信息性内聚和逻辑性内聚区别:逻辑性内聚模块的各个操作互相纠缠在一起,信息性内聚模块的的各个操作互相纠缠在一起,信息性内聚模块的的各个操作互相纠缠在一起,信息性内聚模块的的各个操作互相纠缠在一起,信息性内聚模块的各操作代码相互独立。各操作代码相互独立。各操作代码相互独立。各操作代码相互独立。n n具有信息性内聚的模块主要用来实现一种抽象的具有信息性内聚的模块主要用来实现一种抽象的具有信息性内聚的模块主要用来实现一种抽象的具有信息性内聚的模块主要用来实现一种抽象的数据类型。数据类型。数据类型。数据类型。8/2/2024125.2.8 内聚的设计原则内聚的设计原则n n偶然性内聚、逻辑性内聚和时间性内聚也偶然性内聚、逻辑性内聚和时间性内聚也被认为是低内聚,过程性内聚和通信性内被认为是低内聚,过程性内聚和通信性内聚被认为是中内聚,功能性内聚和信息性聚被认为是中内聚,功能性内聚和信息性内聚被认为是高内聚。内聚被认为是高内聚。n n设计时应力争做到高内聚,辨认出低内聚设计时应力争做到高内聚,辨认出低内聚的模块,通过修改设计提高模块的内聚程的模块,通过修改设计提高模块的内聚程度,获得较高的模块独立性。度,获得较高的模块独立性。8/2/2024135.3 耦合耦合n n耦合是指两个模块之间交互的程度。耦合是指两个模块之间交互的程度。n n耦合衡量不同模块彼此间互相依赖耦合衡量不同模块彼此间互相依赖(连接连接)的紧密程度。的紧密程度。n n耦合的强弱取决于模块间接口的复杂程度,耦合的强弱取决于模块间接口的复杂程度,进入或访问一个模块的点,以及通过接口进入或访问一个模块的点,以及通过接口的数据。的数据。n n耦合按交互照程度从高到低的顺序分为内耦合按交互照程度从高到低的顺序分为内容耦合、共用耦合、控制耦合、印记耦合容耦合、共用耦合、控制耦合、印记耦合和数据耦合五类。和数据耦合五类。8/2/2024145.3.1 内容耦合内容耦合 如果两个模块中的一个直接引用了另一个模块的如果两个模块中的一个直接引用了另一个模块的如果两个模块中的一个直接引用了另一个模块的如果两个模块中的一个直接引用了另一个模块的内容,那么它们之间是内容耦合。内容,那么它们之间是内容耦合。内容,那么它们之间是内容耦合。内容,那么它们之间是内容耦合。内容耦合包括下面一些情况:内容耦合包括下面一些情况:内容耦合包括下面一些情况:内容耦合包括下面一些情况:n n一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数据;一个模块访问另一个模块的内部数据;n n一个模块不通过正常入口而转到另一个模块的内一个模块不通过正常入口而转到另一个模块的内一个模块不通过正常入口而转到另一个模块的内一个模块不通过正常入口而转到另一个模块的内部;部;部;部;n n两个模块有一部分程序代码重叠;两个模块有一部分程序代码重叠;两个模块有一部分程序代码重叠;两个模块有一部分程序代码重叠;n n一个模块有多个入口。一个模块有多个入口。一个模块有多个入口。一个模块有多个入口。8/2/2024155.3.2 共用耦合共用耦合n n如果两个模块都可存取相同的全局数据,如果两个模块都可存取相同的全局数据,则它们之间是共用耦合。则它们之间是共用耦合。8/2/2024165.3.3 控制耦合控制耦合n n如果两个模块中的一个模块给另一个模块如果两个模块中的一个模块给另一个模块传递控制要素,则它们之间是控制耦合,传递控制要素,则它们之间是控制耦合,也就是说,一个模块通过传递消息中的控也就是说,一个模块通过传递消息中的控制信息明确地控制另一个模块的逻辑。制信息明确地控制另一个模块的逻辑。n n重用的可能很小。重用的可能很小。n n通常控制耦合与具有逻辑性内聚的模块有通常控制耦合与具有逻辑性内聚的模块有关联,也包含逻辑性内聚有关的困难。关联,也包含逻辑性内聚有关的困难。8/2/2024175.3.4 印记耦合印记耦合n n如果把数据结构作为参数进行传递,两个如果把数据结构作为参数进行传递,两个模块是印记耦合,但被调用的模块指在该模块是印记耦合,但被调用的模块指在该数据结构的一些个别组件上进行操作。数据结构的一些个别组件上进行操作。n n印记耦合增加了系统的复杂程度,并且导印记耦合增加了系统的复杂程度,并且导致对数据的访问失去控制。致对数据的访问失去控制。8/2/2024185.3.5 数据耦合数据耦合n n如果两个模块的所有参数是同类数据项,如果两个模块的所有参数是同类数据项,则它们之间是数据耦合。每个参数或者是则它们之间是数据耦合。每个参数或者是简单参数,或者是数据结构(其中的所有简单参数,或者是数据结构(其中的所有元素为被调用的模块所使用)。元素为被调用的模块所使用)。n n数据耦合是低耦合,也是理想的目标。两数据耦合是低耦合,也是理想的目标。两个模块数据耦合,对一个模块的修改几乎个模块数据耦合,对一个模块的修改几乎不会对另一个模块产生影响,使得维护工不会对另一个模块产生影响,使得维护工作很容易。作很容易。8/2/2024195.3.6 耦合的设计原则耦合的设计原则n n耦合程度越低越好,在设计软件结构时,耦合程度越低越好,在设计软件结构时,尽量使用数据耦合,少用特征耦合和控制尽量使用数据耦合,少用特征耦合和控制耦合,限制共用耦合,完全不用内容耦合。耦合,限制共用耦合,完全不用内容耦合。 8/2/202420耦合例子耦合例子p、t和和u在更在更新模式下访问新模式下访问相同的数据库相同的数据库号码号码号码号码输入输入输入输入输出输出输出输出1 1飞机类型飞机类型飞机类型飞机类型状态标志状态标志状态标志状态标志2 2飞机零件清单飞机零件清单飞机零件清单飞机零件清单3 3功能代码功能代码功能代码功能代码4 4飞机零件清单飞机零件清单飞机零件清单飞机零件清单5 5零件编号零件编号零件编号零件编号零件制造商零件制造商零件制造商零件制造商6 6零件编号零件编号零件编号零件编号零件名称零件名称零件名称零件名称Figure 5.7q qr rs st tu up p数据耦合数据耦合数据耦合数据耦合数据或标记耦合数据或标记耦合数据或标记耦合数据或标记耦合公共耦合公共耦合公共耦合公共耦合公共耦合公共耦合公共耦合公共耦合q q控制耦合控制耦合控制耦合控制耦合数据或标记耦合数据或标记耦合数据或标记耦合数据或标记耦合r r数据耦合数据耦合数据耦合数据耦合s s数据耦合数据耦合数据耦合数据耦合t t公共耦合公共耦合公共耦合公共耦合Figure 5.88/2/2024215.4 抽象和数据封装抽象和数据封装n n抽象是通过抑制不必要的细节并强调相关的细节抽象是通过抑制不必要的细节并强调相关的细节抽象是通过抑制不必要的细节并强调相关的细节抽象是通过抑制不必要的细节并强调相关的细节达到逐步求精的一种方法。抽象就是抽出事物的达到逐步求精的一种方法。抽象就是抽出事物的达到逐步求精的一种方法。抽象就是抽出事物的达到逐步求精的一种方法。抽象就是抽出事物的本质特征而暂时不考虑它们的细节。本质特征而暂时不考虑它们的细节。本质特征而暂时不考虑它们的细节。本质特征而暂时不考虑它们的细节。n n软件工程过程的每一步都是对软件开发的抽象层软件工程过程的每一步都是对软件开发的抽象层软件工程过程的每一步都是对软件开发的抽象层软件工程过程的每一步都是对软件开发的抽象层次的一次精化,是由抽象到具体的细化过程。次的一次精化,是由抽象到具体的细化过程。次的一次精化,是由抽象到具体的细化过程。次的一次精化,是由抽象到具体的细化过程。n n数据封装是抽象的一个例子,如果一个数据结构数据封装是抽象的一个例子,如果一个数据结构数据封装是抽象的一个例子,如果一个数据结构数据封装是抽象的一个例子,如果一个数据结构含有在这个数据结构之上执行的操作,这种情况含有在这个数据结构之上执行的操作,这种情况含有在这个数据结构之上执行的操作,这种情况含有在这个数据结构之上执行的操作,这种情况就实现了数据封装。就实现了数据封装。就实现了数据封装。就实现了数据封装。n n通过数据封装,软件设计者在开发的不同时期不通过数据封装,软件设计者在开发的不同时期不通过数据封装,软件设计者在开发的不同时期不通过数据封装,软件设计者在开发的不同时期不同层次上,考虑的内容是不同的。数据封装以简同层次上,考虑的内容是不同的。数据封装以简同层次上,考虑的内容是不同的。数据封装以简同层次上,考虑的内容是不同的。数据封装以简化产品维护的方式支持了数据抽象的实现,还减化产品维护的方式支持了数据抽象的实现,还减化产品维护的方式支持了数据抽象的实现,还减化产品维护的方式支持了数据抽象的实现,还减小出现退化错误的可能性。小出现退化错误的可能性。小出现退化错误的可能性。小出现退化错误的可能性。8/2/2024225.5 信息隐藏信息隐藏n n信息隐藏原理指出:应该这样设计和确定模块,信息隐藏原理指出:应该这样设计和确定模块,信息隐藏原理指出:应该这样设计和确定模块,信息隐藏原理指出:应该这样设计和确定模块,使得一个模块内包含的信息(过程和数据)对于使得一个模块内包含的信息(过程和数据)对于使得一个模块内包含的信息(过程和数据)对于使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不能访问的。不需要这些信息的模块来说,是不能访问的。不需要这些信息的模块来说,是不能访问的。不需要这些信息的模块来说,是不能访问的。n n在设计产品之前,应列出一个未来可能修改的实在设计产品之前,应列出一个未来可能修改的实在设计产品之前,应列出一个未来可能修改的实在设计产品之前,应列出一个未来可能修改的实现决定的清单。然后设计模块,对其他模块隐藏现决定的清单。然后设计模块,对其他模块隐藏现决定的清单。然后设计模块,对其他模块隐藏现决定的清单。然后设计模块,对其他模块隐藏本模块设计的实现细节。本模块设计的实现细节。本模块设计的实现细节。本模块设计的实现细节。n n隐藏的是模块的实现细节。隐藏的是模块的实现细节。隐藏的是模块的实现细节。隐藏的是模块的实现细节。8/2/2024235.6 对象对象n n面向对象方法学中,对象是封装了数据结构及可面向对象方法学中,对象是封装了数据结构及可面向对象方法学中,对象是封装了数据结构及可面向对象方法学中,对象是封装了数据结构及可以施加在这些数据结构上的操作的封装体,这个以施加在这些数据结构上的操作的封装体,这个以施加在这些数据结构上的操作的封装体,这个以施加在这些数据结构上的操作的封装体,这个封装体又可以唯一地标识它的名字,而且向外界封装体又可以唯一地标识它的名字,而且向外界封装体又可以唯一地标识它的名字,而且向外界封装体又可以唯一地标识它的名字,而且向外界提供一组服务(对对象施加的操作)。提供一组服务(对对象施加的操作)。提供一组服务(对对象施加的操作)。提供一组服务(对对象施加的操作)。n n对象可以看作是数据类型的一个具体例子(实例)对象可以看作是数据类型的一个具体例子(实例)对象可以看作是数据类型的一个具体例子(实例)对象可以看作是数据类型的一个具体例子(实例),产品根据抽象数据类型进行设计,产品的变量,产品根据抽象数据类型进行设计,产品的变量,产品根据抽象数据类型进行设计,产品的变量,产品根据抽象数据类型进行设计,产品的变量(对象)是抽象数据类型的实例。(对象)是抽象数据类型的实例。(对象)是抽象数据类型的实例。(对象)是抽象数据类型的实例。8/2/202424n n继承是指新的数据类型可定义为先前定义继承是指新的数据类型可定义为先前定义过的类型的扩展,而不是从头开始定义。过的类型的扩展,而不是从头开始定义。n n面向对象的语言中,类定义为支持继承的面向对象的语言中,类定义为支持继承的抽象数据类型,对象就是类的实例。抽象数据类型,对象就是类的实例。n n类是对具有相同数据和相同操作的一组相类是对具有相同数据和相同操作的一组相似对象的定义。类是对具有相同属性和行似对象的定义。类是对具有相同属性和行为的一个或多个对象的描述。为的一个或多个对象的描述。 8/2/202425n n泛化指出两个类之间存在泛化指出两个类之间存在泛化指出两个类之间存在泛化指出两个类之间存在“ “一般一般一般一般- -特殊特殊特殊特殊” ”关系,是关系,是关系,是关系,是通用元素和具体元素之间的一种分类关系。通用元素和具体元素之间的一种分类关系。通用元素和具体元素之间的一种分类关系。通用元素和具体元素之间的一种分类关系。n n聚合指的是类的组件。聚合表示类与类之间是整聚合指的是类的组件。聚合表示类与类之间是整聚合指的是类的组件。聚合表示类与类之间是整聚合指的是类的组件。聚合表示类与类之间是整体与部分的关系。体与部分的关系。体与部分的关系。体与部分的关系。n n关联指的是两个明显不相关的类之间的关系。只关联指的是两个明显不相关的类之间的关系。只关联指的是两个明显不相关的类之间的关系。只关联指的是两个明显不相关的类之间的关系。只要两个类之间存在某种语义上的联系,那么它们要两个类之间存在某种语义上的联系,那么它们要两个类之间存在某种语义上的联系,那么它们要两个类之间存在某种语义上的联系,那么它们之间就建立关联。之间就建立关联。之间就建立关联。之间就建立关联。8/2/202426
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号