软考-软件设计师:结构化开发方法-系统设计的基本原理:抽象、模块化、信息隐蔽、模块独立(高内聚、低耦合)

抽象

抽象是一种设计技术,重点说明一个实体的 本质方面,而忽略或者掩盖不太重要或非本质的方面。

将复杂的现象 简化 到可以 分析、实验 或者可以 理解 的程度。

软件工程中从软件定义到软件开发要经历多个阶段,每个阶段都是对软件 抽象层次的一次细化。

模块化

模块在程序中是 数据说明、可执行语句 等程序对象的集合

在软件的体系结构中,模块是可组合、分解和更换的单元。

模块化:是指将一个待开发的软件分解成 若干个 小的 简单部分,每个模块可 独立地开发、测试,最后组装成完整的程序。

这是一种复杂问题“分而治之”的原则。

模块化的目的:是使程序的结构清晰,容易阅读、理解、测试和修改。

信息隐蔽

将每个程序的成分 隐蔽 或 封装 在一个单一的设计模块中,在定义每一个模块时尽可能少地显露其内部的处理。

在设计时首先列出一些可能发生变化的因素,在划分模块时将一个可能发生变化的因素隐蔽在某个模块的内部,使其他模块与这个因素无关。当这个因素发生变化时,只需修改含有这个因素的模块,而与其他模块无关。

目的:对提高软件的 可修改性、可测试性 和 可移植性 都有重要的作用。

模块独立

模块独立是指每个模块完成一个相对独立的特定子功能,并且与其他模块之间的联系简单。

衡量模块独立程度的标准有两个:

  • 耦合性
  • 内聚性

将软件系统划分模块时,应尽量做到 高内聚、低耦合

耦合

耦合是 模块之间 相互联系的 紧密程度的度量。耦合取决于各个模块之间接口的复杂程度、调用模块的方式以及通过接口的信息类型等。

模块之间,相互联系程度越低,则 耦合越低,即:模块的独立性就越好

耦合方式有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


原文出处:/show_1GWxcDbTWUX.html