第5章 总体设计
第5章 总体设计

第 5 章 总 体 设 计
通信内聚:如果模块中所有元素都使用同一个输入数
据和(或)产生同一个输出数据,则称为通信内聚。
25
软 件 工 程
高内聚也有两类: 顺序内聚:如果一个模块内的处理元素和同一个功 能密切相关,而且这些处理必须顺序执行(通常一个 处理元素的输出数据作为下一个处理元素的输入数 据),则称为顺序内聚。
设 计
8
软 件 工 程
5. 设计软件结构
通常程序中的一个模块完成一个适当的子功能。应该把 模块组织成良好的层次系统,顶层模块调用它的下层模块以 实现程序的完整功能,每个下层模块再调用更下层的模块, 从而完成程序的一个子功能,最下层的模块完成最具体的功 能。软件结构(即由模块组成的层次系统)可以用层次图或结 构图来描绘,第5.4节将介绍这些图形工具。
逻辑内聚:如果一个模块完成的任务在逻辑上属于 相同或相似的一类,则称为逻辑内聚。
第 5 章 总 体 设 计
时间内聚:如果一个模块包含的任务必须在同一段 时间内执行,就叫时间内聚。
24
软 件 工 中内聚主要有两类: 程
过程内聚:如果一个模块内的处理元素是相关的,而 且必须以特定次序执行,则称为过程内聚。 (使用程序流程图作为工具设计软件时,常常通过研究 流程图确定模块的划分,这样得到的往往是过程内聚 的模块)
第 5 章 总 体 设 计
如果数据流图已经细化到适当的层次,则可以直接从数 据流图映射出软件结构,这就是第5.5节中将要讲述的面向 数据流的设计方法。
9
软 件 工 程
6. 设计数据库
对于需要使用数据库的那些应用系统,软件 工程师应该在需求分析阶段所确定的系统数据需 求的基础上,进一步设计数据库。 在数据库课中已经详细讲述了设计数据库的 方法,本书不再赘述。
第五章总体设计

外部表示 信息
输入流 变换流
内部表示
事务
输出流 时间
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章_总体设计 数据库原理

Contents
5.1 设计过程 5.2 设计原理 5.3 启发规则 5.4 描绘软件结构的图形工具 5.5 面向数据流的设计方法
闽南科技学院计算机系
软件设计宣言:Mitch Kapor • “什么是设计?设计是你站在两个世界——技 术世界和人类的目标世界——而你尝试将这两 个世界结合在一起……”。 罗马建筑批评家Vitruvius提出的观念: • “设计良好的建筑应该展示出坚固、适用和令 人赏心悦目”。
• 耦合衡量不同模块彼此间互相依赖(连接)的紧密
程度。耦合要低,即每个模块和其他模块之间的 关系要简单;
• 内聚衡量一个模块内部各个元素彼此结合的紧密
程度。内聚要高,每个模块完成一个相对独立的 特定子功能。
闽南科技学院计算机系
1. 耦合
• 耦合:是对一个软件结构内不同模块之间互连程 • • •
度的度量。 要求:在软件设计中应该追求尽可能松散耦合的 系统。 可以研究、测试或维护任何一个模块,而不需要 对系统的其他模块有很多了解; 模块间联系简单,发生在一处的错误传播到整个 系统的可能性就很小; 模块间的耦合程度强烈影响系统的可理解性、可 测试性、可靠性和可维护性。
A Flag B Flag
f1
f2
„
fn
闽南科技学院计算机系
• • • • • • • • • • • • • • • • • • • • • • • •
#include <stdio.h> static bool Signal; void AdultOrNot(int age) { if (age > 18) { Signal = 1; } else { Signal = 0; } } void WineOrNot() { if (Signal == 1) { printf("%s\n", "您已到达法定饮酒年龄!"); } else { printf("%s\n","您未到达法定饮酒年龄!"); } }
第5章 总体设计

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

模块划分的工具,因此,这样得到的模块往往具有过程内聚的
特性
2014年春 • 软件工程
过程内聚模块
读入 成绩单
审查 成绩单
统计 成绩
打印 成绩
读入并 审查成绩单
统计并 打印成绩单
2014年春 • 软件工程
(5) 通信内聚:
一个模块中的各个部分使用同一个输入数据或产生同一个输出数 据,则称该模块的内聚为通信内聚。 由于通信内聚模块中的各个部分都与某个共同的数据密切相关,
2014年春 • 软件工程
时间内聚模块中的各个部分在时间上的联系,其内聚
程度比逻辑内聚高一些。
往往会和其他相关模块有着紧密的联系,因而会造成
耦合性的增加。
2014年春 • 软件工程
(4) 过程内聚:
一个模块中的各个部分相关,并且必须按特定的
次序执行,则称该模块的内聚为过程内聚。
• 在结构化程序中,通常采用程序流程图作为设计软件和确定
内容耦合是所有耦合关系中程度最高的,会使因 模块间的联系过于紧密而对后期的开发和维护工作带 来很大的麻烦。
许多高级程序设计语言在设计时就充分考虑到了内容耦合的危 害,因而在规定语法时就已经杜绝了任何形式的内容耦合。
2014年春 • 软件工程
内容耦合
A
B
A
一模块直接访问 另一模块的内部 信息 (程序代码 或数据)
2014年春 • 软件工程
1. 耦合
设计目标:低耦合
2014年春 • 软件工程
(1) 数据耦合: 两个模块之间仅通过模块参数交换信息,且交
换的信息全部为简单数据。
数据耦合的耦合性最低。通常软件中都包含有 数据耦合。
2014年春 • 软件工程
软件工程导论第5章 总体的设计

⑵内聚:衡量一个模块内部各个元素彼此结合的紧密 程度。
5.2 续
耦合
软件结构中各个模块之间相互关联程度的度量。 常见的耦合: • ⑴非直接耦合 • ⑵数据耦合 • ⑶控制耦合 • ⑷特征耦合 • ⑸公共环境耦合 • ⑹内容耦合 设计原则:尽量使用数据耦合,少用控制耦合, 限制公共耦合的范围,避免使用内容耦合。
划分模块时尽量做到高内聚,低耦合,保持模块相对 独立性,并以此原则优化初始的软件结构。
⑴如果若干模块之间耦合强度过高,每个模块内功能 不复杂,可将它们合并,以减少信息的传递和公共区 的引用。
⑵若有多个相关模块,应对它们的功能进行分析,消 去重复功能。
设计准则
5.3 续
⑵模块规模应该适中
过大的模块往往是由于分解不充分。 过小的模块开销大于有效操作。
设计方法:定义一些不同的“映射”,把数据流 图变换成软件结构。
结构化设计方法——面向数据流的设计方法。
变换流
5.5 续
信息沿输入通路进入系统,同时由外部形式变换 成内部形式,进入系统的信息通过变换中心,经 加工处理以后再沿输出通路变换成外部形式离开 软件系统。当数据流图具有这些特征时,这种信 息流就叫作变换流。
B
C
D
(a) 基 本 形 式
(b) 顺 序
B
C
(c) 选 择
B
(d) 重 复
结构图
5.4 续
判定为真时调用A,为假时调用B
结构图
5.4 续
模块M循环调用模块A、B、C
概念
5.5 面向数据流的设计方法
定义:把信息流映射成软件结构,信息流的类型 决定了映射的方法。
目标:给出设计软件结构的一个系统化的途径。
总体设计

第 5 章 总体设计
a. 偶然内聚 如果一个模块完成一组任务, 如果一个模块完成一组任务,这些任务彼此之 间即使有关系,关系也是松散的, 间即使有关系,关系也是松散的,这种内聚称为偶 然内聚。 然内聚。 b. 逻辑内聚 如果一个模块完成的任务在逻辑上属于相同或 相似的一类,则称为逻辑内聚。 相似的一类,则称为逻辑内聚。 c. 时间内聚 如果一个模块包含的任务必须在同一段时间内 执行,就叫时间内聚。 执行,就叫时间内聚。
第 5 章 总体设计 5.2.2 抽象
在现实世界中一定事物、 在现实世界中一定事物、状态或过程之 间总存在着某些相似的方面, 间总存在着某些相似的方面,把这些相似 的方面集中和概括起来, 的方面集中和概括起来,暂时忽略它们之 间的差异,就是抽象。 间的差异,就是抽象。
第 5 章 总体设计
例 考虑适用于低级CAD的图形软件包 抽象Ⅰ 该CAD软件系统配有能与绘图员进行可 视化通信的图形界面,能用鼠标代替绘图工具,画 各种直线和曲线;能完成所有几何计算以及所有截 面视图和辅助视图的设计。图形设计的结果存在图 形文件中,图形文件可包含几何的、正文的和其他 各种补充设计信息。 抽象Ⅱ 软件任务: 用户界面任务; 创建二维图形任务; 显示图形任务; 管理图形文件任务。
第 5 章 总体设计
总体设计的目的: 总体设计的目的: 回答“概括地说,系统应该如何实现? 回答“概括地说,系统应该如何实现?”。 总体设计的任务: 总体设计的任务: 1. 划分出组成系统的物理元素—— 程序、文件、 划分出组成系统的物理元素—— 程序、文件、 数据库、人工过程和文档。 数据库、人工过程和文档。 2. 设计软件结构,也就是要确定系统中每个程 设计软件结构, 序是由哪些模块组成的, 序是由哪些模块组成的,以及这些模块相互之间 的关系。 的关系。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
典型的总体设计过程包括下述9个步骤:
1. 设想供选择的方案
以数据流图为基础,寻找实现目标系统的各种不同的方 案。
由需求分析的数据流图作为出发点,把数据流图中的处理分 组的各种可能的方法,抛弃在技术上行不通的分组方法, 提供可供选择的物理系统。如P46图2.8、2.9所示。
模块化的后果:随着模块数目增加,设计模块间接 口所需要的工作量也将增加。
根据这两个因素,得出了图中的总成本曲线。每 个程序都有一个最适当的模块数目M,使得系统 的开发成本最小。
图5.1 模块化和软件成本
模块化优点
• 使软件结构清晰,容易设计也容易阅读和理解。 • 提高软件的可靠性。 程序错误局限在有限的模块中,使软件容易测试和 调试。 • 提高了软件的可修改性。 即使有变动,往往只涉及少数几个模块。 • 有助于软件开发工程的组织管理。 一个大型程序由许多程序员分工编写,分配技术熟 练的程序员编写困难的模块。
2. 选取合理的方案
至少选取低成本、中等成本和高成本的三种方案。 对每个合理的方案分析员都应该准备下列资料: (1) 系统流程图; (2) 组成系统的物理元素清单; (3) 成本/效益分析; (4) 实现这个系统的进度计划。
3. 推荐最佳方案
推荐一个最佳的方案,并且为推荐的方案制定详细的实现计 划。 提请使用部门负责人进一步审批之后,将进入总体设计过程 的下一个重要阶段——结构设计。
模块独立程度的度量标准:内聚和耦合。 耦合:模块间互相依赖(连接)的紧密程度; 内聚:模块内部各个元素彼此结合的紧密程度。 模块独立要求:高内聚、低耦合 1. 耦合 耦合是对一个软件结构内不同模块之间互连程度的 度量。 耦合强弱取决于模块间接口的复杂程度,进入或访 问一个模块的点,以及通过接口的数据。
9. 审查和复审
5.2 设计原理
好的设计准则 • 模块化 • 抽象 • 逐步求精 • 信息隐藏和局部化 • 模块独立
5.2.1 模块化
模块:
是由边界元素限定的相邻程序元素(例如,数据说明,可执 行的语句)的序列,而且有一个总体标识符代表它。
模块化:
把程序划分成独立命名且可独立访问的模块,每个模块完成 一个子功能,把这些模块集成起来构成一个整体,可以完 成指定的功能,满足用户的需求。
• 如果一个模块完成一组任务,这些任务之间即使有关 系,关系也是很松散的,则称为偶然内聚。
函数A 函数B 函数C 函数E
函数D
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
逻辑内聚( logically cohesive )
求精实际上是细化过程。求精要求设计者细化原始 陈述,随着每个后续求精(即细化)步骤的完成而提 供越来越多的细节。 抽象与求精是一对互补的概念。 • 抽象使得设计者能够说明过程和数据,同时却忽略 低层细节。 • 求精则帮助设计者在设计过程中逐步揭示出低层细 节。 • 这两个概念都有助于设计者在设计演化过程中创造 出完整的设计模型。
• 体系结构设计
设计软件的结构,确定系统中每个程序是由哪些模块组 成的,以及这些模块相互间的关系。
• 总体设计必要性(详细设计之前):站在 全局高度上,花较少成本,从较抽象的层 次上分析对比多种可能的系统实现方案和 软件结构,从中选出最佳方案和最合理的 软件结构,降低成本、提高质量。
5.1 设计过程
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
标记耦合( Stamp coupled )
若两个模块间传递的参数中至少有一个是数据结构,如 字符串或记录,并且在模块中仅用到该数据结构中的 部分元素,则称这两个模块之间存在标记耦合。 • • 在这种情况下,被调用的模块可以使用的数据多于它确 实需要的数据,将导致对数据的访问失去控制,从而 给计算机犯罪提供了机会。
第五章 总体设计
本章 内容
5.1 5.2 5.3 5.4 5.5 5.6 习题 设计过程 设计原理 启发规则 描绘软件结构的图形工具 面向数据流的设计方法 小结 要求 :
掌握概要设计过程、设计原理、模块化方法 及模块独立性原则、软件结构的确定。 重点: 模块独立性原则。 难点: 软件结构的确定。
A
B
A
B
…. Entry2 ….
多重入口
进入另一模块内
部分代码重迭
模块独立性与耦合的关系
内容耦合 耦合性 高 低 模块独立性 低 高 公共耦合 控制耦合 标记耦合 数据耦合
总之,耦合是影响软件复杂程度的一个重要因素。 应该采取下述设计原则: 尽量使用数据耦合,少用控制耦合和标记耦合,限 制公共环境耦合的范围,完全不用内容耦合。
5.2.2 抽象
抽象:把事务相似的方面集中和概括起来,暂时忽 略它们之间的差异。 • • 抽象就是抽出事物的本质特性而暂时不考虑 它们的细节。
软件工程过程的每一步都是对软件解法的抽象 层次的一次精化。 • 在可行性研究阶段,软件作为系统的一个完整 部件; • 在需求分析期间,软件解法是使用在问题环境 内熟悉的方式描述的; • 当由总体设计向详细设计过渡时,抽象的程度 也就随之减少了; • 最后,当源程序写出来以后,也就达到了抽象 的最低层。
模块化的根据:把复杂的问题分解成许多容易解决 的小问题,原来的问题也就容易解决了。
设函数C(x)定义问题x的复杂程度,函数E(x)确定解决问题x 需要的工作量(时间)。对于两个问题P1和P2,如果 C(P1)>C(P2),显然E(P1)>E(P2)。 规律:C(P1+P2)>C(P1)+C(P2) 得到:E(P1+P2)>E(P1)+E(P2)
局部化:是指把一些关系密切的软件元素物理地放 得彼此靠近。 局部化有助于实现信息隐藏。
5.2.5 模块独立
模块独立的概念是模块化、抽象、信息隐藏和局部 化概念的直接结果。 模块独立:具有独立功能而且和其他模块之间没有 过多的相互作用的模块。
模块独立的重要性: 第一,具有独立模块的软件比较容易开发。 第二,独立模块比较容易测试和维护。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
公共耦合( Common coupled )
• 若干模块访问一个公共的数 据环境,则它们之间的耦合称 为公共耦合。公共环境可为全 局数据结构、共享的通信区、 内存的公共覆盖区等。显然, 公共数据区的变化,将影响所 有公共耦合模块,严重影响模 块的可靠性和可适应性,降低 软件的可读性。
2. 内聚 内聚标志一个模块内各个元素彼此结合的紧 密程度。理想内聚的模块只做一件事情。 设计时力求做到高内聚。
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 耦合性 强 逻辑内聚 强
弱
功能内聚 顺序内聚 通信内聚 过程内聚 时间内聚 偶然内聚 内聚性 弱 逻辑内聚 强
偶然内聚( coincidental cohesion )
6. 设计数据库
对于需要使用数据库的应用系统,软件工程师应该 在需求分析阶段所确定的系统数据需求的基础上, 进一步设计数据库。
7. 制定测试计划 开发早期考虑测试问题,可提高软件的可测 试性。
8. 书写文档
(1) 系统说明。主要内容包括: 系统流程图描绘的系统构成方案,组成系统的物理元素 清单,成本/效益分析; 精化的数据流图,用层次图或结构图描绘的软件结构, 用IPO图描述的各个模块的算法,模块间的接口关系 等。 (2) 用户手册 (3) 测试计划 (4) 详细的实现计划 (5) 数据库设计结果
• 系统方案设计
总体设计的基本 目的就是回答“概 括地说,系统应该 如何实现?”
① 设想实现目标系统的各种可能方案。 ② 根据系统规模和目标综合考虑经济、技术、操作等 各种因素,从设想的供选择的方案中选取若干个合 理的方案。 ③ 综合分析、对比所选取的各种合理方案的利弊,从 中选出一个最佳方案,并制定最佳方案的详细实现 计划。
5. 设计软件结构
程序中一个模块完成一个适当的子功能,应该把模块组 织成良好的层次系统。 软件结构(即由模块组成的层次系统)可以用层次图或结 构图来描绘,第5.4节将介绍这些图形工具。 如果数据流图已经细化到适当的层次,可以直接从数据 流图映射出软件结构,这就是第5.5节中将要讲述的面 向数据流的设计方法。
Байду номын сангаас
结构化设计
传统的软件工程方法学采用结构化设计技术 完成软件设计(总体设计和详细设计)工 作。结构化设计技术的基本要点如下: • 软件系统由层次化结构的模块构成 • 模块是单人口和单出口的 • 构造和联结模块的基本准则是模块独立 • 用图来描述软件系统的结构,并且使软件 结构与问题结构尽量一致
总体设计任务
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
控制耦合(Control coupled)
控制耦合:一个模块向另一个模块传 递控制信息,接收信息的模块的动 作根据信息值进行调整。 • • 控制耦合是中等程度的耦合, 它增加了系统的复杂程度。在把模 块适当分解之后通常可以用数据耦 合代替它。
内容耦合 耦合性 高
公共耦合 控制耦合
标记耦合 数据耦合 低
模块独立性 低 高
内容耦合( Content coupled )
内容耦合的四种情况: • 一个模块直接访问另一模块的内部数据。 • 一个模块不通过正常入口转到另一模块的内部。 • 两个模块有部分代码重迭。
• 一个模块有多个入口。
Entry1
逐步求精和模块化的概念,与抽象是紧密相关 的。在软件结构每一层中的模块,表示了对软件 抽象层次的一次精化。 • 软件结构顶层的模块,控制了系统的主要功能 并且影响全局; • 在软件结构底层的模块,完成对数据的一个具 体处理。 用自顶向下由抽象到具体的方式分配控制,简 化了软件的设计和实现,提高了软件的可理解性 和可测试性,并且使软件更容易维护。