抽象
抽象是一种设计技术,重点说明一个实体的 本质方面,而忽略或者掩盖不太重要或非本质的方面。
将复杂的现象 简化 到可以 分析、实验 或者可以 理解 的程度。
软件工程中从软件定义到软件开发要经历多个阶段,每个阶段都是对软件 抽象层次的一次细化。
模块化
模块在程序中是 数据说明、可执行语句 等程序对象的集合
在软件的体系结构中,模块是可组合、分解和更换的单元。
模块化:是指将一个待开发的软件分解成 若干个 小的 简单部分,每个模块可 独立地开发、测试,最后组装成完整的程序。
这是一种复杂问题“分而治之”的原则。
模块化的目的:是使程序的结构清晰,容易阅读、理解、测试和修改。
信息隐蔽
将每个程序的成分 隐蔽 或 封装 在一个单一的设计模块中,在定义每一个模块时尽可能少地显露其内部的处理。
在设计时首先列出一些可能发生变化的因素,在划分模块时将一个可能发生变化的因素隐蔽在某个模块的内部,使其他模块与这个因素无关。当这个因素发生变化时,只需修改含有这个因素的模块,而与其他模块无关。
目的:对提高软件的 可修改性、可测试性 和 可移植性 都有重要的作用。
模块独立
模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单。
衡量模块独立程度的标准有两个:
- 耦合性
- 内聚性
将软件系统划分模块时,应尽量做到 高内聚、低耦合
耦合
耦合是 模块之间 相互联系的 紧密程度的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。
模块之间,相互联系程度越低,则 耦合越低,即:模块的独立性就越好
耦合方式有7种类型,如图
无直接耦合:指两个模块之间 没有直接的关系,它们分别从属于不同模块的控制与调用,它们之间不传递任何信息。因此,模块间耦合性最弱,模块独立性最高。
数据耦合:指两个模块之间有调用关系,传递的是 简单数据,相当于高级语言中的值传递。
标记耦合:指两个模块之间传递的是 数据结构
控制耦合:指一个模块调用另一个模块时,传递的是 控制变量,被调用模块通过该控制变量 执行不同功能。
外部耦合:一组模块都访问 同一全局简单变量,而且不是通过参数表传递该全局变量的信息。
公共耦合:多个模块都访问 同一个公共数据环境(即:多个变量)
内容耦合:
当一个模块直接使用 另一个模块的内部数据
通过 非正常入口转入另一个模块内部
两个模块有一部分 程序代码重叠
一个模块有 多个入口
归纳:
数据、标记、控制:模块之间传递数据
外、公:多个模块访问同一变量
内聚
内聚是对一个 模块内部 各个元素(语句、程序段)之间的联系的紧密程度 的度量。
一个模块内,各个元素(语句、程序段)之间的 联系程度越高,则 内聚越高,设计越合理
一个内聚程度高的模块(在理想情况下)应当只做一件事。
内聚性分为7种类型,如图
偶然内聚(巧合内聚)。最低,指一个模块内的各处理元素之间 没有任何联系。
逻辑内聚:逻辑上相似 的功能,通过 参数 确定该模块 完成哪一个功能。
时间内聚(瞬时内聚)。把需要 同时执行 的动作组合在一起
过程内聚。指一个模块完成多个任务,这些任务必须按 指定的过程执行。
通信内聚:多个操作作用于相同数据
模块内的所有处理元素都在 同一个数据结构上操作,如:多个代码要处理同一个文件
各处理使用 相同的输入数据 或者 产生相同的输出数据
顺序内聚。密切相关的功能 顺序执行,前一功能的输出 是 下一功能的输入。
功能内聚。最强,完成一个 单一功能,各个部分协同工作,缺一不可
理解:
| 内聚模式 | 例子 |
|---|---|
| 偶然内聚 | 不认识的几个人,偶然之下几个人被分到一个班了 |
| 逻辑内聚 | 哥几个都擅长体育,逻辑上说应该有关系,然而并无 |
| 时间内聚 | 哥几个每次到吃饭这个时间点,都要去食堂 |
| 过程内聚 | 哥几个先去网吧,再撸烤串,最后去KTV |
| 通信内聚 | 哥几个都共享同一台电脑,文件数据都放一起 |
| 顺序内聚 | 跑接力赛,前一个跑完,把接力棒传给后一个,后一个接着跑 |
| 功能内聚 | 哥几个一起做个项目,少谁都不完整,都实现不了目标 |
题
以下关于模块化设计的叙述中,不正确的是
A、尽量考虑高内聚、低耦合,保持模块的相对独立性
B、模块的控制范围在其作用范围内
C、模块的规模适中
D、模块的宽度、深度、扇入和扇出适中
答案
B
题
某模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一处理元素的输出就是下一处理元素的输入,则该模块的内聚类型为()内聚。
A、过程
B、时间
C、顺序
D、逻辑
答案
C
题
模块A将学生信息,即学生姓名、学号、手机号等放到一个结构体中,传递给模块B。模块A和B之间的耦合类型为()耦合。
A、数据
B、标记
C、控制
D、内容
答案
B
参考:
https://blog.csdn.net/Biu_Destiny/article/details/116999122


