第四章 总体设计.docx
- 文档编号:15704723
- 上传时间:2023-07-06
- 格式:DOCX
- 页数:26
- 大小:682.75KB
第四章 总体设计.docx
《第四章 总体设计.docx》由会员分享,可在线阅读,更多相关《第四章 总体设计.docx(26页珍藏版)》请在冰点文库上搜索。
第四章总体设计
第四章总体设计
4.1总体设计的任务
4.1.1目的
确定系统怎么做,也就是确定系统应该由哪些部份组成,它们是如何联结在一起的。
4.1.2主要内容
1.系统结构设计
确定系统的具体物理实现方案,也就是划分出组成系统的物理元素——程序、文件、数据库、人工过程和文档等等。
2.软件结构设计
确定组成每一个程序的模块,以及模块间的关系。
[注]对于给定的系统逻辑要求,往往存在着若干种不同的物理实现方案,都能满足这个逻辑。
总体设计首先要找出实现目标系统的各种不同物理方案,从中选取合理的方案,并在综合分析比较的基础上选出一个最佳方案向用户推荐,如果用户接受了推荐的方案,分析员应该为这个最佳方案设计软件结构,进行必要的数据库设计,确定测试要求并制定测试计划。
4.2总体设计的过程
[注]教材2.4例子
图2.5定货系统的基本系统模型(DFD1)
图2.6定货系统的功能级数据流图(DFD2)
图2.7把处理事务的功能进一步分解后的数据流图(DFD3)
图2.8这种划分自动化边界的方法暗示以批量方式更新库存清单
图2.9这种划分自动化边界的方法建议以联机方式更新库存清单
[注]
(1)C/S(Client/Server)结构
C/S(Client/Server)结构(又称客户/服务器模式),即客户机和服务器结构。
它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。
C/S结构软件分为客户机和服务器两层,客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。
由于服务器连接个数和数据通信量的限制,这种结构的软件适于在用户数目不多的局域网内使用。
C/S结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。
客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS的核心功能,是一种客户请求服务、服务器提供服务的处理方式。
C/S结构中服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如ORACLE、SYBASE、InfORMix或SQLServer。
客户端需要安装专用的客户端软件。
C/S技术从上世纪90年代初出现至今已经相当成熟,并得到了非常广泛的应用,其结构经历了二层C/S、三层C/S的更迭。
(2)B/S(Browser/Server)结构
B/S(Browser/Server)结构,即浏览器/服务器结构,是WEB兴起后的一种网络结构模式,WEB浏览器是客户端最主要的应用软件。
这种模式统一了客户端,将系统功能实现的核心部分集中到服务器上,简化了系统的开发、维护和使用。
客户机上只要安装一个浏览器(Browser),如NetscapeNavigator或InternetExplorer,服务器安装Oracle、Sybase、Informix或SQLServer等数据库。
浏览器通过WebServer同数据库进行数据交互。
B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用,客户端零维护。
系统的扩展非常容易。
B/S技术是伴随着Internet的普及而来的。
需要说明的是,B/S最早并不叫“B/S”,此类应用国外通常叫Web应用,是国内一些公司“创造”了“B/S”这个词。
图:
B/S结构示意图
4.3结构化设计(StructuredDesign)
张海藩书中在本阶段所用的方法就是所谓的SD方法:
1974年美国的康斯坦丁(L.Constantine)、斯蒂文斯(W.Stevens)、梅约斯(G.Myers)三人联名在IBM系统杂志(IBMSystemJournal,Vol.13,NO.2)上发表了一篇题为“结构化设计(StructuredDesign)”的论文,第一次提出了结构化设计的思想,“结构化设计”概括地说就是:
用一组标准的工具和准则来确定系统应该由哪些模块、用什么方式联结在一起,才能构成一个最好的软件结构。
工具我们在前面已经介绍,下面我们就来学习这些准则,这就是书中所介绍的“5.2设计原理(P94)”和“5.3启发规则(P99)”,我们把它概括为:
4.4软件结构设计的基本概念
4.4.1模块化
(1)模块
具有四种属性的一组程序语句称为一个模块,这四种属性分别是:
输入和输出、逻辑功能、运行程序、内部数据。
[注]
(1)输入和输出:
输入来源和输出去处都是同一个调用者,也就是一个模块从调用者那里获得输入,然后再把产生的输出返回给调用者;
(2)逻辑功能:
逻辑功能是指它能够做什么事情,表达了它把输入转换成输出的功能;
(3)运行程序:
运行程序是指它如何用程序设计语言(PDL)实现这种逻辑功能的;
(4)内部数据:
内部数据是指属于该模块自己的数据。
(5)输入和输出、逻辑功能是模块的外部属性;运行程序、内部数据是模块的内部属性。
在“总体设计”阶段仅完成模块的外部属性设计,下一阶段“详细设计”才完成模块的内部属性设计。
(2)模块化
模块化就是把程序划分成若干个模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户的需求。
[注]模块及模块间关系的图形表示:
(1)模块的图形表示:
(2)模块间联结的图形表示:
(3)模块间通讯的图形表示:
模块间的通讯分两种类型:
1)数据通讯:
它表示一个经过处理的数据从一个模块传向另一个模块;2)控制通讯:
它只传送一个标志·,此标志表达了处理工作的某种状态,而不是由发送模块真正进行过处理的数据。
(4)模块间判断调用的图形表示:
(5)模块间循环调用的图形表示:
4.4.2模块独立
开发具有独立功能而且和其它模块之间没有过多相互作用的模块。
那么,怎么来做到模块独立呢?
换句话说:
影响模块独立的因素主要有哪些?
4.4.2.1Coupling
联结(耦合)是对一个软件结构内不同模块之间互连程度的度量(或指两个模块之间的相互依赖关系)。
(1)数据联结
如果两个模块之间的通讯信息仅仅是一个个数据元素,那么这种联结称为数据联结。
[注]1)尽量减少两个模块间不必要的数据传输;
2)必须消除所有的“游离数据”。
(2)特征联结
如果两个模块都与同一个数据结构有关,那么这种联结称为特征联结。
[注]1)特征联结会使本应毫无关系的模块产生相互依赖性,应尽可能的把不需要的数据去掉,最好修改成数据联结;
2)严禁“捆绑”。
(3)控制联结
如果模块A向模块B所传递的信息控制了模块B的内部逻辑,那么模块A和模块B之间的联结称为控制联结。
[注]1)控制联结的形式:
b)描述性标志:
描述数据的状态或性质——形容词+名词
a)控制性标志:
要求执行非正常的动作或与该模块功能不相关的事情——动词
2)使用控制联结的原则:
a)使用描述性标志
b)消除控制性标志
(4)公共联结
如果两个模块都和同一个公用数据域有关,那么这两个模块之间的联结称为公共联结。
[注]1)“公用数据域”的概念来自FORTRAN中的公用语句COMMON。
所有程序和函数都能够存取公用数据域,比如:
Pascal中的全程变量,PowerBuilder中全局变量、共享变量、例子变量;
2)如果有n个公用数据元素存在于m个模块中,那么总的“公共联结”关系个数R:
(5)内容联结
如果一个模块和另一个模块的内部属性有关,那么这种联结称为内容联结(也称病态联结)。
[注]Coupling设计原则:
1)应以数据联结为主,特征联结为辅,必要时才建立控制联结和公共联结,完全不用内容联结;
2)在建立模块间的数据联结时,要消除“游离数据”;在建立模块间的特征联结时,要严禁“捆绑”;在建立模块间的控制联结时,要避免使用控制性标志,而使用描述性标志;
3)尽量少用混合形式。
4.4.2.2Cohesion
组合(内聚)是指一个模块内各个元素彼此结合的紧密程度。
(1)功能组合
如果一个模块内部所有组成部分全部为执行同一功能而存在,并且只执行一个功能,那么这种组合称为功能组合。
[注]1)判断一个模块是不是功能组合,可从它的名称看它是否执行一个简单的功能:
a)名称:
动词+单数名词;b)为上级模块完成单一的任务;
2)例:
读库存记录、打印发货单、确定事务类型、计算实发工资;
3)功能组合模块是一个纯“暗盒”模块。
(2)顺序组合——受同一个数据流支配,执行顺序重要
如果一个模块内部所有组成部分执行的几个功能有这样的特征,前一个功能所产生的输出数据是下一个功能的输入数据,那么这种组合称为顺序组合。
[注]1)顺序组合模块维护不太容易,它不完全是一个“暗盒”;
2)顺序组合模块的内容包含了一个线性、有序的数据转换链。
(3)通讯组合——受同一个数据流支配,执行顺序不重要
如果一个模块内部所有组成部分都使用相同的输入数据或产生相同的输出数据,那么这种组合称为顺序组合。
[注]1)通讯组合模块往往和输入输出有关:
读文件记录、排列、打印、写记录记录等等。
2)通讯组合模块的缺点:
产生多余联结、产生重复功能等。
(4)过程组合——受同一个控制流支配,执行顺序重要
如果一个模块内部的若干个功能各不相同,彼此也没有什么关系,但它们都受同一个控制流支配来决定它们的执行次序,那么这种组合称为过程组合。
(因若干个功能受同一个控制流支配而聚集在一个模块里。
一般是若干个处理动作的公共过程单元,比如循环体、判断过程。
)
(5)时间组合——受同一个控制流支配,执行顺序不重要
如果一个模块内部的若干个处理动作必须在同一时间段内执行完成,那么这种组合称为时间组合。
[例]宏定义、函数声明、数据结构声明、*.h文件。
(6)逻辑组合
如果一个模块内部的若干个处理动作在逻辑上相似,但功能却彼此不同或无关,那么这种组合称为逻辑组合。
(7)偶然组合
如果一个模块内部的若干个处理动作彼此没有任何关系,那么这种组合称为偶然组合。
[注]力求高内聚,低耦合。
4.4.3模块的分解(Factoring)
仅有模块化和模块独立这两项原则还是不够的,但是我们已经知道高内聚低耦合是我们设计软件结构的指路明灯;当你设计出初步的软件结构后,应该审查分析这个结构,运用各种手段,力求降低耦合提高内聚。
(1)模块分解的作用:
1)模块太大;
2)使模块容易理解;
3)避免产生相同功能的模块;
4)提供通用性强的模块;
5)简化程序设计。
(2)模块分解的原则:
按功能分解直到无法作出明确的功能定义为止。
(3)经验分解数据:
一个模块内包含的语句条数在30条左右,不应超过60条。
4.4.4模块的扇出与扇入
(1)模块的扇出(Fan-Out)——模块的扇出系数
模块的扇出是指一个模块拥有的直接下级模块的个数。
[注]统计规律:
模块的扇出系数应控制在7以内,平均扇出系数是3或4。
(2)模块的扇入(Fan-In)——模块的扇入系数
模块的扇入是指一个模块的直接上级模块的个数。
[注]尽可能的加大模块的扇入系数。
4.4.5模块的控制域和作用域
(1)模块的控制域(控制范围):
是指这个模块本身以及所有直接或间接从属于它的模块的集合。
(2)模块的作用域(判断作用范围):
是指受该模块内一个判断影响的所有模块的集合。
(也就是该模块内存在着判断调用语句,而所有受到该判断逻辑影响的模块,就是该模块的作用域。
)
[注]E.Yourdon和L.Constantine设计原则:
1)作用域应该是控制域的子集;
2)存在作用域的模块所在的层次,不要与那些属于作用域的模块所在的层次相隔过远——理想的是作用域都是直接下属模块。
4.5面向数据流的设计方法
4.5.1数据流类型——数据在DFD中流径特征
(1)变换流
进入系统中的数据所流经的路径几乎是一样的。
(2)事务流
进入系统中的数据所流经的路径不完全是一样的。
4.5.2设计策略
4.5.3变换分析
图:
结构图的例子——产生最佳解的一般结构
【例一】变换分析
4.5.4事务分析
[注]1)“事务”是指一组输入数据。
2)事务中心往往包含多个处理逻辑。
3)获得事务(控制):
获得原始的事务记录
确定类型(分析):
分析每个事务从而确定它的类型
选择处理(调度):
对每个事务选择相应的逻辑处理路径
确保完全:
确保每个进入系统的事务都能得到完全的处理
【例二】事务分析
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四章 总体设计 第四 总体 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)