第七章思考题——地信1902赵佳乐
1.软件设计的目标及主要任务有哪些?
软件设计阶段的基本目标是构造系统“怎么做”的模型描述。
总体设计,也称为概要设计,软件结构设计,或高层设计。 体系结构设计:定义软件模块(构件)及模块之间的关系。 接口设计:包括用户接口(界面)、外部接口、内部接口。 数据设计:软件涉及的数据结构、文件系统的结构、数据库的表结构等。 软件详细设计,也称为(模块)过程设计,或低层设计。 模块内部细节设计:包括模块所需的算法和数据结构等。
2.什么是模块(构件)化设计思想?
模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。 把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计(Modular Design)。 软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易得到维护。 分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模块化设计的指导思想。
3.模块独立性的两个度量标准是什么?
模块独立性由两个定性标准度量 模块自身的内聚(Cohesion),也称为块内联系,指一个模块内部元素彼此结合的紧密程度。 模块之间的耦合(Coupling),也称为块间联系。
模块独立性愈高,则块内联系越强,块间联系越弱,即高内聚,低耦合。
4.内聚和耦合的含义是什么?各有那些种类?请举例说明每一类型。
内聚性是从功能的角度对模块内部聚合能力的量度。 高内聚是模块独立性追求的目标。
功能性内聚(解析XML文档模块)、顺序性内聚(规则引擎)、通信性内聚(学生管理系统的数据库CRUD操作)、过程性内聚(读/写文件操作)、时间性内聚(初始化模块)、逻辑性内聚(一个输出设备模块将打印机类和显示器类封装 到同一个包里,该包即输出设备模块。打印机类和显 示器类虽然都具有输出功能,但是具有不同的职责。)、偶然性内聚(一个处理正方形的模块有两个功能:计算面积, 画出这个正方形。)。
耦合性是对一个软件结构内不同模块之间互连程度的度量。 耦合性的强弱取决于模块间接口的复杂程度,以及通过接口的数据类型和数目。 弱耦合是模块独立性追求的目标。
非直接耦合(同级模块相互之间没有信息传递,即没有耦合。 非常底层的模块,自给自足,可以无耦合。 较高层的模块,通常需要重用其他模块的功能,产生耦合。)、数据耦合(调用下属模块时,如果交换的都是简单变量,便构成数据耦合。 要点:通过参数传递,而不是通过全局数据、配置文 件、共享内存等其他方式; 传递的是基本数据类型,不是数据结构。)、特征耦合(数据结构耦合)(调用下属模块时,如果交换的是数据结构,便构成特征耦合。由于传递的是数据结构,不仅数据量增加,而且会使模块的相关性增加。)、控制耦合(模块间传递的信息不是一般的数据,而是作为控制信息的开关值或标志量。 例如,逻辑性内聚的模块调用就是典型的控制耦合。)、外部耦合(若允许一组模块访问同一个全局变量,可称它们为外部耦合。)、 公共耦合(若允许一组模块访问同一个全局性的数据结构,则称它们为公共耦合。全局性的数据结构可以是共享的通信区、公共的内存区域、任何存储介质文件、物理设备等。)、内容耦合(若一个模块可以直接访问另一个模块中的内部数据,或者一个模块直接转到另一个模块的内部,或者一个模块有多个入口,则称为内容耦合。)
5.为什么要高内聚和低耦合?高内聚低耦合是否意味着内聚越高越好,耦合越低越好呢?
在软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则是高内聚低耦合。从模块粒度来看,高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合); 低耦合:减少类内部,一个成员方法调用另一个成员方法。从类角度来看, 高内聚低耦合:减少类内部,对其他类的调用;从功能块来看 高内聚低耦合:减少模块之间的交互复杂度(接口数量,参数数据)即横向:类与类之间、模块与模块之间;纵向:层次之间;尽可能,内容内聚,数据耦合。
并不是内聚越高越好,耦合越低越好,真正好的设计是在高内聚和低耦合间进行平衡,也就是说高内聚和低耦合是冲突的。最强的内聚莫过于一个类只写一个函数,这样内聚性绝对是最高的。但这会带来一个明显的问题:类的数量急剧增多,这样就导致了其它类的耦合特别多,于是整个设计就变成了“高内聚高耦合”了。由于高耦合,整个系统变动同样非常频繁。对于耦合来说,最弱的耦合是一个类将所有的函数都包含了,这样类完全不依赖其它类,耦合性是最低的。但这样会带来一个明显的问题:内聚性很低,于是整个设计就变成了“低耦合低内聚”了。由于低内聚,整个类的变动同样非常频繁。真正做到高内聚、低耦合是很难的,很多时候未必一定要这样,更多的时候“最适合”的才是最好的,不过、审时度势、融会贯通、人尽其才、物尽其用,才是设计的王道。

浙公网安备 33010602011771号