第五章 总体设计(wang)
第5章-总体设计(概要设计)

3. 推荐最佳方案 分析员应该综合分析对比各种合理方案的利弊,推 荐一个最佳的方案,并且为推荐的方案制定详细的 实现计划。制定详细实现计划的关键技术是本书第 13章中将要介绍的工程网络。 用户和有关的技术专家应该认真审查分析员所推荐 的最佳系统,如果该系统确实符合用户的需要,并 且是在现有条件下完全能够实现的,则应该提请使 用部门负责人进一步审批。在使用部门的负责人也 接受了分析员所推荐的方案之后,将进入总体设计 过程的下一个重要阶段——结构设计。
5.2.3 逐步求精
逐步求精是人类解决复杂问题时采用的基本方法, 也是许多软件工程技术(例如,规格说明技术,设 计和实现技术)的基础。可以把逐步求精定义为: “为了能集中精力解决主要问题而尽量推迟对问题 细节的考虑。” 逐步求精之所以如此重要,是因为人类的认知过程 遵守Miller法则:一个人在任何时候都只能把注意 力集中在(7±2)个知识块上。
事实上,可以把逐步求精看作是一项把一个时期内 必须解决的种种问题按优先级排序的技术。逐步求 精方法确保每个问题都将被解决,而且每个问题都 将在适当的时候被解决,但是,在任何时候一个人 都不需要同时处理7个以上知识块。 逐步求精最初是由Niklaus Wirth提出的一种自顶向 下的设计策略。按照这种设计策略,程序的体系结 构是通过逐步精化处理过程的层次而设计出来的。 通过逐步分解对功能的宏观陈述而开发出层次结构, 直至最终得出用程序设计语言表达的程序。 Wirth本人对逐步求精策略曾做过如下的概括说明:
但是,在开发软件的过程中,软件工程师在一段时 间内需要考虑的知识块数远远多于7。例如,一个 程序通常不止使用7个数据,一个用户也往往有不 止7个方面的需求。逐步求精方法的强大作用就在 于,它能帮助软件工程师把精力集中在与当前开发 阶段最相关的那些方面上,而忽略那些对整体解决 方案来说虽然是必要的,然而目前还不需要考虑的 细节,这些细节将留到以后再考虑。Miller法则是 人类智力的基本局限,我们不可能战胜自己的自然 本性,只能接受这个事实,承认自身的局限性,并 在这个前提下尽我们的最大努力工作。
第五章总体设计

外部表示 信息
输入流 变换流
内部表示
事务
输出流 时间
T
事务中心 活动通路
事务中心 T 完成下述任务: 接受输入数据(事务) 分析每个事务以确定它的类型 根据事务类型选取一条活动通路
5 面向数据流的设计方法(续) 精化数据流图
? 流类型
区分事务中心和 数据接收通路
区分输入和输出 分支
映射成事务结构
映射成变换结构
控产制生
mpg
mph显
产生
示
mpg显
示
计
算
里
英里
程
驱动仪 表板
铃声
输 入 控 制
Ca
MpCg t
Ce
显示
产生 里程 显示
显示
D
C
A B
Cm Ca
C
B
D
接受传感 器信号
A
驱动仪表板
转换成rpm 收集SPS 读旋转信号
计算gph
读燃料流 确定 加/减速
数字仪表 板控制
加速/减 速显示
显示 mpg
显示 mph
Flag=1?
S1
S2
内聚:一个模块内各个元素彼此结合的紧密程度。
低内聚
偶然内聚:一个模块完成一组任务,任务之间的关系很松散。公共语句。 逻辑内聚:若干个逻辑功能类似的任务组成一个模块。 时间内聚:若干个任务必须在同一段时间内执行。如初始化工作。
模块A 模块B 模块C
模块A
模块A 模块B 模块C
S1;
• 模块化:把程序划分成若干个模块,每个模块完成一个子功能,
把这些模块集总起来组成一个整体,可以完成指定的功能,满足问题的 功能。
模块 是数据说明、可执行语句等程序对象的说明。
第5章 总体设计

8
设计原理(续1)
◆设计示例: “用 AND, OR, and NOT 门构
建的计算机。 ”
chip1
chip2
◆第一种设计:设计师 设计三个功能芯片
chip3
2013-7-16
上海大学计算机学院
9
设计原理(续2)
◆第二种设计:每芯片一种门
2013-7-16
上海大学计算机学院
10
设计原理(续3)
2013-7-16
上海大学计算机学院
16
耦合(续1)
1. 内容耦合
● 一个模块直接引用另一个模块的内容 ● 示例
模块a修改模块b的语句 模块 a的分支转移到模块 b的局部标号
● 缺点
模块b的任何变化都要求变化a
2013-7-16
上海大学计算机学院
17
耦合(续2)
2. 共用耦合
● 两模块存取相同的数据 ● 示例
第5章 总体设计
◆设计任务
◆设计过程
◆设计原理
◆启发规则
◆图形工具 ◆面向数据流的设计
2013-7-16
上海大学计算机学院
1
总体设计的任务
◆“概括地说,系统应该如何实现?”
◆总体设计阶段的任务
●系统划分: 程序、文件、数据库、人工过程和文档等 ●设计软件的结构
每个程序是由哪些模块组成,以及这些模块相互间的关系。
2013-7-16
上海大学计算机学院
26
内聚(续4)
4. 过程性内聚
●一个模块内的处理元素是相关的,而且必须以特定次 序执行. ●示例
Function { read part number from database update repair record on master file }
第5章 总体设计

第5章总体设计软件总体设计又称概要设计,它的主要任务就是软件结构的设计,为了提高设计的质量,必须根据软件设计的原理改进软件设计。
本章内容主要内容包括:软件总体设计的基本任务,软件设计的基本原理,软件结构以及软件结构设计优化准则,面向数据流的设计方法,IDEFO图的设计方法,以及表示软件结构的另一种图形工具——HIPO 图。
5.1 基础知识5.1.1 软件总体设计的基本任务软件总体设计阶段是概要地回答系统应该如何实现。
因此要把握与详细设计的区别。
要完成如下任务。
1.软件系统结构设计按照结构化理论,实现一个系统目标需要程序和数据。
所以必须设计出组成这个系统的所用程序结构和数据库(文件)。
具体方法如下:(1)采用某种设计方法,将一个复杂的系统按功能划分成模块。
(2)确定每个模块的功能。
(3)确定模块之间的调用关系。
(4)确定模块之间的接口,即模块之间传递的信息。
(5)评价模块结构的质量。
2.数据结构及数据库设计在结构化理论软件系统中,尤其是对于大型数据处理的软件系统,除了系统结构设计外,数据结构与数据库设计是很重要的。
1)数据结构的设计根据需求分析阶段对系统数据的组成,操作约束和数据之间的描述,确定数据结构特性。
总体设计阶段利用逐步细化的方法对数据结构进行深入的设计。
2)数据库的设计一般的软件系统都有数据的存储,存储要借助数据库技术。
数据库的设计指数据存储文件的设计,设计包括概念设计,逻辑设计和物理设计。
3.网络系统设计如果采用的是网络环境,则要进行网络系统的设计。
4.软件总体设计文档总体设计说明书是总体设计阶段结束时提交的技术文档。
按国际GB8576-88《计算机软件产品开发文件编制指南》的规定,软件设计文档可分为“总体设计说明书”,“详细设计说明书”和“数据库数据说明书”。
5. 评审在该阶段,对涉及部分是否完整地实现需求中的功能,性能等要求,设计方案的可行性,关键的处理及内外部接口定义正确性,有效性以及各部分之间的一致性等,都一一进行评审。
第5章 总体设计

…抽象…
抽象层次II:任务需求的描述。列出“What” 而不是“How”。
CAD SOFTWARE TASKS:
user interaction task; 2-D drawing creation task; graphics display task; drawing file management task;
5- 11
联机
批处理
5- 12
联机
批处理
5- 13
2
…步骤…
选取合理的方案
至少选取低成本、中等成本和高成本三
种方案 每种方案准备四份资料
系统流程图
组成系统的物理元素清单
成本/效益分析 实现这个系统的进度计划
5- 14
3
…步骤…
推荐最佳方案
综合分析对比各种合理方案的利弊,推
5- 35
局部化
局部化:把一些关系密切的软件元素
物理地放得彼此靠近
局部化有助于实现信息隐藏
信息隐蔽和局部化的优点
减少错误的传播
5- 36
模块独立(module independence)
模块独立的概念是模块化、抽象、信息隐藏 和局部化概念的直接结果 每个模块完成一个相对独立的子功能,并且 与其它模块间的接口简单 模块独立性的重要性
5- 20
模块化…
模块
由边界元素限定的相邻程序元素的序列,
而且有一个总体标志符代表它 数据说明;可执行的语句 Pascal或Ada中
模块化
Begin…end对
C,C++ 和Java中 把程序化分成独立命名且可独立访问的模 块,每个模块完成一个子功能,把这些模 {…}对 块集成起来构成一个整体,可以完成制定 的功能满足用户的需求
第5章 总体设计

对时间起决定性作用的软件进行优化:
• 在不考虑时间因素的前提下开发并精化软件结 构;
• 在详细设计阶段选出最耗费时间的那些模块, 仔细地设计它们的处理过程,以求提高效率; • 使用高级程序设计语言编写程序; • 在软件中孤立出那些大量占用处理机资源的模 块; • 必要时重新设计或用依赖于机器的语言重写上 述大量占用资源的模块的代码,以求提高效率。
5.5.4 设计优化
• 设计优化应该力求做到在有效的模块化的 前提下使用最少量的模块,以及在能够满 足信息要求的前提下使用最简单的数据结 构。 • 对于时间是决定性因素的应用场合,可能 有必要在详细设计阶段,也可能在编写程 序的过程中进行优化。 • 软件开发人员应该认识到,程序中相对说 比较小的部分(典型地,10%~20%),通常 占用全部处理时间的大部分(、功能分解、设计软件结构、设 计数据库、制定测试计划、书写文档、审查和复查 设计原理: 模块化,抽象,逐步求精,信息隐藏和局 部化,模块独立(耦合、内聚) 启发规则:改进结构、规模适中、扇入扇出、作用域、 降低接口复杂程度、单入口单出口、可预测。 图形工具:层次图和HIPO图、结构图 面型数据流的设计方法:变换流、事务流、设计过程、 变幻分析、事务分析、设计优化
软件工程第五章总体设计

软件工程第五章总体设计在软件工程中,总体设计是一个至关重要的环节。
它就像是为一座大厦绘制蓝图,为后续的详细设计和编码工作奠定坚实的基础。
总体设计的主要任务是根据需求分析阶段确定的系统功能和性能要求,设计出软件系统的总体结构。
这包括确定系统由哪些模块组成,以及这些模块之间的关系。
通过合理的总体设计,可以有效地提高软件的可维护性、可扩展性和可靠性。
首先,我们来谈谈模块的划分。
模块是软件系统中具有相对独立功能的单元。
在划分模块时,需要遵循高内聚、低耦合的原则。
高内聚意味着一个模块内部的各个部分紧密相关,共同完成一个明确的功能;低耦合则表示模块之间的相互依赖程度要低,以便于独立开发、测试和维护。
例如,一个在线购物系统可以划分为用户管理模块、商品管理模块、订单管理模块等。
每个模块都有其特定的职责,相互之间通过清晰定义的接口进行通信。
模块的结构也有多种形式,如层次结构、网状结构和混合结构等。
层次结构是一种常见的结构,它将系统按照功能的层次进行划分,上层模块调用下层模块,形成一个树形的结构。
这种结构清晰明了,易于理解和维护。
网状结构则模块之间的关系更加复杂,适用于一些对性能要求较高的系统。
而混合结构则是结合了层次结构和网状结构的特点,根据系统的实际需求进行灵活的设计。
接下来,说说数据结构的设计。
数据结构的选择直接影响到系统的性能和效率。
在总体设计阶段,需要确定系统中主要的数据结构,如数据库表结构、文件结构等。
对于数据库设计,要考虑数据的完整性、一致性和安全性。
合理地设计索引和存储过程,可以提高数据的查询和更新速度。
文件结构的设计则要根据数据的特点和访问方式来确定,例如是顺序访问还是随机访问。
在总体设计中,还需要考虑软件的架构风格。
常见的架构风格有客户机/服务器架构(C/S)、浏览器/服务器架构(B/S)和分布式架构等。
C/S 架构适用于对性能要求较高、数据处理较为复杂的系统;B/S 架构则具有易于部署和维护的优点,适用于广泛的互联网应用;分布式架构则可以提高系统的处理能力和可靠性,适用于大规模的应用场景。
软件工程第5章 总体设计

内聚
模块功能强 度的度量
1. 耦合
耦合性是程序结构中各个模块之间相互关联的度量 它取决于各个模块之间接口的复杂程度、调用模块的方 式以及那些信息通过接口。
低
非直接 耦合 数据 耦合 标记 耦合
耦合性
高
外部 耦合 公共 耦合 内容 耦合
控制 耦合
强
模块独立性
弱
(1) 非直接耦合
两个模块没有直接关系(模块1和模块2),
析对比多种可能的系统实现方案和软件
结构,从中选出最佳方案和最合理的软
件结构,从而用较低成本开发出较高质
量的软件系统。
5.1
设计过程
• 总体设计过程通常由两个主要阶段组成:
-- 系统设计阶段,确定系统的具体实现方案; -- 结构设计阶段,确定软件结构。
典型的总体设计过程包括下述9个步骤:
1. 设想供选择的方案 2. 选取合理的方案 3. 推荐最佳方案 4. 功能分解 5. 设计软件结构 6. 设计数据库 7. 制定测试计划 8. 书写文档 9. 审查和复审
(6) 逻辑内聚(Logical Cohesion) • 把几种相关功能(逻辑上相似的功能)组合 在一模块内,每次调用由传给模块的参数确 定执行哪种功能。
• 信息隐藏和局部化 • 模块独立
5.2.1
模块化
• 模块是由边界元素限定的相邻程序元素(例如, 数据说明,可执行的语句)的序列,而且有一个 总体标识符代表它。
-- 如:过程、函数、子程序、宏、对象等,都可作为模块。
• 模块化就是把程序划分成独立命名且可独立访问 的模块,每个模块完成一个子功能,把这些模块 集成起来构成一个整体,可以完成指定的功能满 足用户的需求。
(2) 用户手册 根据总体设计阶段的结果,修改更正在需求 分析阶段产生的初步的用户手册。
5.总体设计

第 5 章 总体设计
5.2.5 模块独立
1. 定义: 开发具有独立功能而且和其他模块没有过多的 相互作用的模块,就可以做到模块独立。 模块独立的概念是模块化、抽象、信息隐藏 和局部化概念的直接结果。 2. 重要性: 1. 有效的模块化的软件比较容易开发出来。 2. 独立的模块化比较容易测试和维护。
第 5 章 总体设计
5.2 设计原理
• 模块化 • 抽象
• 逐步求精
• 信息隐藏和局部化
• 模块独立
第 5 章 总体设计
5.2.1 模块化
模块:
模块是单独命名的而且可通过名字来访问 的程序对象,是构成程序的基本构件。 模块化: 把程序划分成若干个模块,每个模块完成 一个子功能,把这些模块组装成一个整体, 可以完成指定的功能,满足用户的需求。
学生成绩管理系统
数据处理
录 入
查 询
修 改 删 除
打印输出
第 5 章 总体设计
带编号的层次图
学生成绩管理系统
数据处理 1.0
查 询 2.0
打印输出 3.0
录 入 1.1
修 改 1.2
删 除 1.3
第 5 章 总体设计
2. IPO图
系统: 模块: 编号: 被调用: 输入:
IPO表
作者: 日期: 调用: 输出:
第 5 章 总体设计
5.2.3 逐步求精
为了能集中精力解决主要问题而尽量推 迟对问题细节的考虑。
第 5 章 总体设计 5.2.4 信息隐藏
信息隐藏原理: 应该这样设计和确定模块,使得一个模 块内包含的信息(过程和数据)对于不需 要这些信息的模块来说是不能访问的。 局部化: 是指把一些关系密切的软件元素物理地 放得彼此靠近。 局部化有助于信息隐藏
第05章 总体设计

下面看人类解决问题的一般规律: 下面看人类解决问题的一般规律:
设函数C( )为定义问题x的复杂程度 的复杂程度, 设函数 (x)为定义问题 的复杂程度, 函数 E(x)为解决问题 的工作量 。 对于两个问题 1 为解决问题x的工作量 为解决问题 的工作量。 对于两个问题P 和P2,如果 C(P1) >C(P2) 显然 E (P1) >E (P2) 量也大) 量也大) (即复杂程度大,工作 即复杂程度大,
2011-4-2
(8)书写文档 ) 编写总体设计文档(包括系统构成方案、 ※ 编写总体设计文档(包括系统构成方案、 物理元素清单、成本/效益分析 效益分析、 物理元素清单、成本 效益分析、最佳方案的概 括描述、数据流图、软件结构、 括描述、 数据流图 、软件结构、各个模块的算 模块间的接口关系) 法,模块间的接口关系)。 ※ 用户手册 测试计划(测试策略,测试方案, ※ 测试计划(测试策略,测试方案,预期的 测试结果,测试进度计划) 测试结果,测试进度计划) ※ 详细的实现计划 (9)审查和复审 审查和复审 应该进行严格的技术审查和管理复审。
2011-4-2
结构设计是总体设计阶段的任务; 结构设计是总体设计阶段的任务; 的任务 过程设计是详细设计阶段的任务。 过程设计是详细设计阶段的任务。 的任务 为确定软件结构, 为确定软件结构 , 首先把复杂的功能进一 步分解成一系列简单的功能。 步分解成一系列简单的功能 。 功能分解导致数 据流图的进一步细化, 并用IPO图或其他工具 据流图的进一步细化 , 并用 图或其他工具 来描述细化后每个处理的算法。 来描述细化后每个处理的算法。
2011-4-2
局部化的概念和信息隐蔽概念是密切相关的。 局部化的概念和信息隐蔽概念是密切相关的。 所谓局部化 局部化是指把一些关系密切的软件元素物理 所谓局部化是指把一些关系密切的软件元素物理 地放得彼此靠近。 地放得彼此靠近。在模块中使用局部数据元素是 局部化的一个例子。显然, 局部化的一个例子。显然,局部化有助于实现信 息隐蔽。 息隐蔽。 信息隐蔽和局部化的概念是由Parnas提出的。 提出的。 信息隐蔽和局部化的概念是由 提出的 Parnas提出在总体设计时就要注意软件的可维护性和 提出在总体设计时就要注意软件的可维护性和 可靠性的设计措施。这就是信息隐蔽的原则。 可靠性的设计措施。这就是信息隐蔽的原则。 信息隐蔽的原则 为了适应软件在生命周期中的多次修改, 为了适应软件在生命周期中的多次修改, 在模块划分的总体设计阶段就要尽量设法将 可变性因素隐蔽在一个或几个局部的模块中。 可变性因素隐蔽在一个或几个局部的模块中。 2011-4-2
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全 局 性简单变量
外部耦合
T S1
Flag=1?
F
S2
设计原则:尽量使用数 据耦合,少用控制耦合,限 制公共环境耦合,完全不用 内容耦合
2014/12/5
19
5.2.5 模块独立——耦合
(1)非直接耦合
如果两个模块之间没有直接关系,
它们之间的联系完全是通过主模 块的控制和调用来实现的,这就
是非直接耦合。
15
信息隐蔽和局部化的优点
5.2.5 模块独立
模块独立是模块化、抽象、信息隐蔽和局部化概念的直接结果
每个模块完成一个相对独立的子功能,和其他模块间关系简单 为什么模块的独立性很重要呢?模块独立是做好设计的关键, 而设计又是决定软件质量的关键环节
有效的模块化(即具有独立的模块)的软件比较容易开发出来。 (当许多人分工合作开发同一个软件时,这个优点尤其重要。)
用户界面设计 数据结构与算法设计
系统实现
编码和单元测试 综合测试
1
软件工程
第五章
总体设计
中南大学 Central South University
总体设计阶段的任务
需求分析回答了“系统必须做什么?”这个问题。总体设计的
基本目的是回答“怎么做?如何实现?”这个问题
总体设计的两项任务 划分出组成系统的物理元素----程序、文件、数据库、文档 设计软件的结构----确定每个程序的模块组成及模块之间的相互关系
标识符代表它。 把程序划分成若干个模块,每个模块完成一个子功能,把这
些模块集成起来组成一个整体,可以完成指定的功能,满足用
户的需求。 有人认为模块化是为了使复杂的大型程序能被人的智力所管
理,软件应具备的唯一属性。
一个大型程序如果只有一个模块组成,它将很难被人理解。
6
5.2.1 模块化
设函数C(x)定义问题x的复杂程度,函数E(x)定义解决问题x需
5.1 设计过程
总体设计过程的两个阶段: 系统设计阶段,确定系统的具体实现方案 结构设计阶段,确定软件结构
3
5.1总体设计过程
1.设想供选 择的方案 2.选 取 合 理的方案 3.推荐最 佳方案 4.功能 分解 5.设计软 件结构
•系统流程图
数据流图是总 体设计极好的 出发点 •组成系统的物理元素清单 • 成本/效益分析 • 实现系统的进度计划 9.审查和 复 审 8.书写 文档 •系统说明 •用户手册 • 测试计划 • 详细的实现计划 • 数据库设计结果
弱耦合
模块B
模块1模块26. 共耦合7. 内容耦合较强耦合
模块3 模块4
同构耦合 通过数据结 构交换数据
强耦合
非直接耦合 控制耦合 公共环境耦合 内容耦合 低 高
2014/12/5
18
5.2.5 模块独立——耦合
耦合
模块B
模块A
模块C 模块D 全局性数据结构 公共耦合
模块L
模块N
模块1
控制耦合 模块之间传递 的是控制信息
步求精定义为:“为了能集中精力解决主要问题而尽量推迟对问题细
节的考虑。” 逐步求精:最初是由Wirth提出的一种自顶向下的设计策略。按照此 策略,程序的体系结构是通过逐步精化处理过程的层次而设计出来的。 通过逐步分解对功能的宏观陈述而开发出层次结构,最终得到用程序 设计语言表达的程序。
13
5.2.3
7.制订测 试计划
6.数据库 设 计
典型的总体设计过程步骤
4
5.2 设计原理
在软件设计过程中应该遵循的基本原理和 相关概念
模块化
抽象
逐步求精
信息隐蔽和局部化
模块独立
5
5.2.1 模块化
模块是由边界元素限定的相邻程序元素(如数据说明、可执
行语句等)的序列,是构成程序的基本构件,而且有一个总体
造和理解,这些高级概念又可以用一些较低级的概念构
造和理解,如此进行下去,直至最低层次的具体元素。
10
5.2.2 抽象
软件工程中的抽象:软件工程过程中的每一步都是对 软件解决方法抽象层次的一次细化。
一个元素(完整部件)。
① 在可行性研究(即系统定义)阶段,软件作为整个计算机系统的
② 在需求分析阶段,软件解决方案使用问题环境中的术语来描述。 ③ 从概要设计到详细设计阶段抽象层次逐步降低,将面向问题的计 算机术语和面向实现的计算机术语结合起来描述解决方法。 ④ 最低层抽象层次,是产生源代码,用可以直接实现的方法叙述问 题的解决方法。
“隐蔽”意味着模块彼此间仅仅交换那些为了完成系统功能而必 须交换的信息。
“局部化”是指把一些关系密切的软件元素物理地放得彼此靠近。 局部化有助于实现信息隐蔽。 测试期间和软件维护期间需要修改软件,使用信息隐蔽原理作为 模块化系统设计的标准就会带来极大好处。
因为大多数数据和过程对于软件的其他部分而言是隐蔽的,在修 改期间由于疏忽而引入的错误就很少可能传播到软件的其他部分。
逐步求精
抽象与求精的关系
抽象与求精是一对互补的概念。
抽象使得设计者能够说明过程和数据,同时却忽略低层细节。 求精则帮助设计者在设计过程中逐步揭示出低层细节。 这两个概念都有助于设计者在设计演化过程中创造出完整的设 计模型。
14
5.2.4 信息隐蔽和局部化
信息隐蔽原理:应该这样设计和确定模块,使得一个模块内包 含的信息(过程和数据)对于不需要这些信息的模块来说,是 不能访问的。
Computer_water(&Struct_user) { 计算水费 }; Computer_ elect (&Struct_user) { 计算电费 }; Main { Computer_water(&user1); Computer_elect(&user1); }
2014/12/5
22
5.2.5 模块独立——耦合
要的工作量(时间)。对于两个问题P1和P2,如果: C(P1)>C(P2)
那么 E(P1)>E(P2)
根据解决问题的经验,有一个规律是: C(P1+P2)>C(P1)+C(P2)
于是有
E(P1+P2)>E(P1)+E(P2)
“各个击破”的结论——把复杂的问题分解成许多容易解决的小问题, 原来的问题也就容易解决了
24
5.2.5 模块独立——耦合
(4)控制耦合
如果一个模块通过传送开关、标志、
名字等控制信息,明显地控制选择另 一模块的功能,就是控制耦合。
控制耦合传递的是控制变量。
对所控制模块的任何修改,都会影响 控制模块。
控制耦合也意味着控制模块必须知道 所控制模块内部的一些逻辑关系,这 些都会降低模块的独立性。
23
5.2.5 模块独立——耦合
将特征耦合转换为数据耦合?
Struct_user { char[8] name; Char[8] identy_ID; Char[20] address; float water; 数据耦合传递的是简单参数 float electricity; } user1; Computer_water(float) { 计算水费 }; Computer_ elect (float) { 计算电费}; Main { Computer_water(&user1->water); Computer_elect(&user1->electricity); }
这种耦合的模块独立性最强。
但是,在一个软件系统中不可能
所有模块之间都没有任何连接。
2014/12/5
20
5.2.5 模块独立——耦合
(2)数据耦合
如果一个模块访问另一个模块时,彼此之间是通过数据参数(不是控 制参数、公共数据结构或外部变量,而是简单的数据)来交换输入、 输出信息的,则称这种耦合为数据耦合。 数据耦合是松散的耦合,模块之间的独立性比较强。在软件程序结构 中至少必须有这类耦合。最好的耦合方式 main() { int x,y; printf("x+y=%d",sum(x,y)); } sum(int a,int b) { int c; c=a+b; return(c); } 主函数与sum函数之间即为数据耦合关系
11
5.2.2 抽象
抽象在软件设计中的作用:
抽象与逐步求精,模块化密切相关; 抽象帮助我们定义软件结构中模块的实体; 由抽象到具体地分析和构造出软件的层次结构,提高软件的可
理解性。
12
5.2.3
逐步求精
什么是逐步求精
逐步求精是人类解决复杂问题时采用的基本方法,也是许多软件工 程技术(例如,规格说明技术,设计和实现技术)的基础。可以把逐
控制耦合:模块之间传递的参数含有控制信息
公共环境耦合:两个或多个模块通过一个公共数据环境相互作用 内容耦合:是最高程度的耦合,出现下列情况之一,两个模块就发 生了内容耦合: 一个模块访问另一个模块的内部数据 一个模块不通过正常入口而转到另一个模块内部 两个模块由一部分程序代码重叠
Struct_user { char[8] name; Char[8] identy_ID; Char[20] address; float water; float electricity; } user1; Computer_water(&Struct_user) { 计算水费 }; Computer_ elect (&Struct_user) { 计算电费 }; Main { 标记耦合传递的是数据结构的地址 Computer_water(&user1); Computer_elect(&user1); }