其他分享
首页 > 其他分享> > 第7章思考题-软件设计

第7章思考题-软件设计

作者:互联网

软件设计的目标及主要任务有哪些?

软件设计的目标:软件系统设计是把软件需求“变换”为用于构造软件的蓝图,“输入”是需求分析各种模型元素,“输出”是软件设计模型和表示,软件设计阶段的基本目标是构造系统“怎么做”的模型描述 ,“设计先于编码”,这是软件工程“推迟实现”的基本原则。

主要任务:主要有以下几类设计活动

总体设计:也称为概要设计,软件结构设计,或高层设计。
体系结构设计:定义软件模块(构件)及模块之间的关系。
接口设计:包括用户接口(界面),外部接口,内部接口。
数据设计:软件涉及的数据结构,文件系统结构,数据库的表结构等。
软件详细设计:也称为模块过程设计,或低层设计。
模块内部细节设计:包括模块所需的算法和数据结构等。

什么是模块(构件)化设计思想?

模块是一个独立命名的,拥有明确定义的输入、输出和特性的程序实体。
把一个大型软件系统的全部功能,按照一定的原则合理地划分为若干个模块,每个模块完成一个特定的子功能,所有的这些模块以某种结构形式组成一个整体,这就是软件的模块化设计。
软件模块化设计可以简化软件的设计和实现,提高软件的可理解性和可测试性,并使软件更容易得到维护。
分解、抽象、逐步求精、信息隐蔽和模块独立性,是软件模块化设计的指导思想。

模块独立性的两个度量标准是什么?

模块自身的内聚:也称为模块内联系,指一个模块内部元素彼此结合的紧密程度。
模块之间的耦合:也称为块间联系。
模块独立性愈高,则块内联系越强,块间联系越弱,即高内聚,低耦合。

内聚和耦合的含义是什么?各有那些种类?请举例说明每一类型。

内聚的含义:内聚性是从功能的角度对模块内部聚合能力的量度。高内聚是模块独立性追求的目标。

内聚的种类(从上到下内聚性依次减弱):

1.功能性内聚:模块各个成分结合在一起,完成一个特定的功能,功能性模块具有内聚性最强,与其它模块联系少的特点。例如:解析XML文档模块(解析XML元素,解析XML属性,解析XML注释等)。
2.顺序性内聚:模块内的各个任务是顺序执行的。通常,上一个任务的输出是下一个任务的输入。例如:规则引擎:一个任务读配置,输出执行计划,另一个任务以执行计划为输入,执行该计划。
3.通信性内聚:模块内部的各个任务靠公用数据联系在一起,即都使用同一个输入数据,或者产生同一个输出数据。例如:学生管理系统的数据库CRUD操作,都对学生信息进行增删改查操作。
4.过程性内聚:模块内个各个任务必须按照某一特定次序执行。例如:读/写文件操作:判断文件是否存在,判断文件是否有相应权限,打开文件,读,写文件。
5.时间性内聚:模块内的各个子任务由相同的执行时间联系在一起。例如:初始化模块,异常处理模块,某个异常处理模块封装了“释放资源”,“记录日志”,“通知用户”等几个任务。
6.逻辑性内聚:模块通常由若干个逻辑功能相似的任务组成,通过模块外引入的一个开关量选择其一执行。这种内聚增大了模块间的耦合。例如:一个输出设备模块将打印机类和显示器类封装到同一个包里,该包即输出设备模块。打印机类和显示器类虽然都具有输出功能,但是具有不同的职责。
7.偶然性内聚:模块内的各个任务在功能上没有实质性联系,纯属“偶然”因素组合子块内各个互不相关的任务。例如:一个处理正方形的模块有两个功能,计算面积,画出这个正方形。
内聚性总结:在软件设计中,应力求做到高内聚、尽量少用中内聚,不用低内聚。一般来说,在系统较高层次上的模块功能复杂,内聚要低一些;而较低层次上的模块内聚程度较高,达到功能内聚的可能性比较大。
耦合的含义:耦合性是对一个软件结构内不同模块之间的互连程度的度量。耦合性的强弱取决于模块间接口的复杂程度,以及通过接口的数据类型和数目。弱耦合是模块独立性追求的目标。

耦合的种类(从上到下耦合性依次增强):

1.非直接耦合:同级模块相互之间没有信息传递,即没有耦合。非常底层的模块,自给自足,可以无耦合。较高层的模块,通常需要重用其他模块的功能,产生耦合。
2.数据耦合:调用下属模块时,如果交换的都是简单变量,便构成数据耦合。
3.特征耦合(数据结构耦合):调用下属模块时,如果交换的是数据结构,便构成数据特性耦合。由于传递的是数据结构,不仅数据量增加,而且会使模块的相关性增加。
4.控制耦合:模块间传递的信息不是一般的数据,而是作为控制信息的开关值或标志量。
5.外部耦合:若允许一组模块访问同一个全局变量,可称他们为外部耦合。
6.公共耦合:若允许一组模块访问同一个全局性的数据结构,则称他们为公共耦合。全局性的数据结构可以是共享的通信区,公共的内存区域,任何存储介质文件,物理设备等。
7.内容耦合:若一个模块可以直接访问为另一个模块中的内部数据,或者一个模块直接转到另一个模块的内部,或者一个模块有多个入口,则称为内容耦合。
耦合性总结:耦合是影响模块结构和软件复杂程度的一个重要因素,应该遵循如下的设计原则:尽量使用数据耦合,少用控制耦合,限制公共耦合,完全不用内容耦合。

为什么要高内聚和低耦合?高内聚低耦合是否意味着内聚越高越好,耦合越低越好呢?

高内聚,低耦合的好处体现在系统持续发展的过程中,高内聚,低耦合的系统具有更好的重用性,维护性,扩展性,可以更高效的完成系统的维护开发,持续的支持业务的发展,而不会成为业务发展的障碍。

要知道
1.并不是内聚越高越好,耦合越低越好,真正好的设计是在高内聚和低耦合间进行平衡,也就是说高内聚和低耦合是冲突的。

2.最强的内聚莫过于一个类只写一个函数,这样内聚性绝对是最高的。但这会带来一个明显的问题:类的数量急剧增多,这样就导致了其它类的耦合特别多,于是整个设计就变成了“高内聚高耦合”了。由于高耦合,整个系统变动同样非常频繁。

3.对于耦合来说,最弱的耦合是一个类将所有的函数都包含了,这样类完全不依赖其它类,耦合性是最低的。但这样会带来一个明显的问题:内聚性很低,于是整个设计就变成了“低耦合低内聚”了。由于低内聚,整个类的变动同样非常频繁。

4.真正做到高内聚、低耦合是很难的,很多时候未必一定要这样,更多的时候“最适合”的才是最好的,不过、审时度势、融会贯通、人尽其才、物尽其用,才是设计的王道。

标签:思考题,软件设计,任务,模块,内聚,耦合,设计,软件
来源: https://www.cnblogs.com/Shexiaox/p/14942649.html