第4结构化软件设计.ppt

上传人:豆**** 文档编号:65722972 上传时间:2022-12-06 格式:PPT 页数:85 大小:871KB
返回 下载 相关 举报
第4结构化软件设计.ppt_第1页
第1页 / 共85页
第4结构化软件设计.ppt_第2页
第2页 / 共85页
点击查看更多>>
资源描述

《第4结构化软件设计.ppt》由会员分享,可在线阅读,更多相关《第4结构化软件设计.ppt(85页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第4结构化软件设计 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望引言 设计人员把分析的结果设计图纸 程序员拿着设计图纸编写代码名字:读者信息编号:DS01描述:记录读者的基本信息定义:读者信息=姓名+单位+读者类型+职称+电话位置:数据库的读者信息表输入处理说明输出读者输入读者DS102备注:需求规格说明书概要设计概要设计设计图纸设计图纸-软件结构图软件结构图模块模块4设计设计详细设计详细设计需求分析成果第4章 结构化软件设计 1)结构化设计的基本概念2)方法和

2、步骤2)详细设计的方法。3)软件设计的原则。4)影响软件设计的主要因素。掌握掌握 掌握理解了解要求要求o通过软件设计将用户的需求变为实现软件的“蓝图”。蓝图只描述软件的整体框架,也叫做概要设计。概要设计之后,就要对软件进行详细设计,通过对软件设计的不断细化,形成一个可以实施的设计方案。o软件设计的最终目标是要取得最佳方案。“最佳”是指在所有候选方案中,能够以最低的成本,在最短的时间内,生产出可靠性和可维护性俱佳软件的方案。4.1 软件设计的概念4.1.1模块和模块化o一般把用一个名字就可调用的一段程序称为“模块”。模块具有如下三个基本属性。n功能:指该模块要完成的任务。n逻辑:模块内部执行过程

3、。n状态:使用该模块时的环境和条件。4.1.1模块和模块化(续)o把整个系统划分成若干个模块,每个模块完成一个子功能,将多个模块组织起来实现整个系统的功能。o模块化设计方法强调清楚地定义每个模块的功能和它的输入/输出参数,而模块的实现细节隐藏在各自的模块之中,与其它模块之间的关系可以是调用关系,因此模块化程序易于调试和修改。o随着模块规模的减小,模块的开发成本减少,但是模块之间的接口变得复杂起来,使得模块的集成成本增加。4.1.2内聚和耦合内聚和耦合o在软件设计中应该保持模块的独立性原则。反映模块独立性的有两个标准:内聚和耦合。n内聚衡量一个模块内部各个元素彼此结合的紧密程度n耦合衡量模块之间

4、彼此依赖的程度。4.1.2内聚和耦合(续)内聚和耦合(续)o模块间相互关联的程度取决于下面几点:n一个模块对另一个模块的访问,比如模块A可能要调用模块B来完成一个功能。n模块间传递的数据量。n模块间接口的复杂程度。Great deal of dependenceIndependent Highly coupledLoosely coupledUncoupled 7种耦合的独立性4.1.2内聚和耦合(续)内聚和耦合(续)内容耦合:如果一个模内容耦合:如果一个模块直接引用另一个模块块直接引用另一个模块的内容。的内容。例例1:A访问访问C的内部数的内部数据或不通过正常入据或不通过正常入口而转入口而转

5、入C的内部。的内部。ABCDA:goto C1C:C1:公共耦合公共耦合多个模块都访问同一个公共数据环境,则称它们是公共耦合。问题:公共部分的改动将影响所有调用它的模块;问题:公共部分的改动将影响所有调用它的模块;公共部分的数据存取无法控制;公共部分的数据存取无法控制;复杂程度随耦合模块的个数增加而增加复杂程度随耦合模块的个数增加而增加Global:V1,V2A:A1=V1+V2B:V1=B1Global:V1,V2A:V1+B:V2=B1+V1控制耦合控制耦合模块A向模块B传递一个控制信息,称这两个模块是控制耦合的。oB模块的具体功能取决于控制信息FlagABFlagF2F1FnFlag数据

6、耦合数据耦合如果两个模块传递的是数据项,则这两个模块是数据耦合。A模块B模块参数内聚:内聚:模块内部各个元素彼此结合的紧密程度模块内部各个元素彼此结合的紧密程度7种内聚的独立性o功能内聚功能内聚 :一个模块中各个部分都:一个模块中各个部分都是完成某一具体功能必不可少的组成是完成某一具体功能必不可少的组成部分,或者说该模块中所有部分都是部分,或者说该模块中所有部分都是为了完成一项具体功能而协同工作,为了完成一项具体功能而协同工作,紧密联系,不可分割的。则称该模块紧密联系,不可分割的。则称该模块为功能内聚模块。为功能内聚模块。内聚和耦合(续)内聚和耦合(续)o顺序内聚顺序内聚如果一个模块中的处理元

7、素和如果一个模块中的处理元素和同一个功能密切相关,并且这些处理必须是同一个功能密切相关,并且这些处理必须是顺序执行的,那么这个模块具有顺序内聚。顺序执行的,那么这个模块具有顺序内聚。内聚和耦合(续)内聚和耦合(续)o通信内聚通信内聚:一个模块内各功能部分一个模块内各功能部分都针对相同输入都针对相同输入/输出数据进行处输出数据进行处理。理。内聚和耦合(续)内聚和耦合(续)o过程内聚:过程内聚:模块执行的若干动作,相互关联并且有顺模块执行的若干动作,相互关联并且有顺序关系。例如,从录入界面读取数据,然后更新数据序关系。例如,从录入界面读取数据,然后更新数据库记录。它仍然是将多个相关的功能放在一个模

8、块中库记录。它仍然是将多个相关的功能放在一个模块中实现。实现。内聚和耦合(续)内聚和耦合(续)o时间内聚:时间内聚:模块的各个功能的执模块的各个功能的执行与时间有关,通常要求所有功行与时间有关,通常要求所有功能必须在同一时间段内执行。例能必须在同一时间段内执行。例如初始化模块和终止模块。如初始化模块和终止模块。内聚和耦合(续)内聚和耦合(续)o逻辑内聚:逻辑内聚:一个模块一个模块完成的任务在逻辑上完成的任务在逻辑上相同相同/相似。相似。A:读磁盘读磁盘读磁带读磁带读光盘读光盘from diskfrom tapefrom 内聚和耦合(续)内聚和耦合(续)o巧合内聚又称为偶巧合内聚又称为偶然内聚。

9、当模块内然内聚。当模块内各部分之间没有联各部分之间没有联系,或者即使有联系,或者即使有联系,这种联系,这种联 系也系也很松散。很松散。内聚和耦合(续)内聚和耦合(续)4.1.3抽象o所谓抽象就是将事务的相似方面集中和概括起来,暂时忽略它们之间的差异。或者说,抽象就是抽出事务的本质特性而暂时不考虑它们的细节。o在最高的抽象层次上,用自然语言,配合面向问题的专业术语,概括地描述问题的解法。o在中间的抽象层次上,采用过程化的描述方法。o在最底层,使用能够直接实现的方式来描述问题的解。4.1.4信息隐藏o核心内容是:一个模块中所包含的信息,不允许其他不需要这些信息的模块访问。o模块化可以通过定义一组相

10、互独立的模块来实现,这些独立的模块彼此间仅仅交换那些为完成相应功能而必须交换的信息。o信息隐蔽对模块的过程细节和局部数据结构进行了屏蔽。o在设计模块时采取信息隐藏,使得大多数处理细节对软件的其他部分是隐蔽的。在将来修改软件时偶然引入错误所造成的影响就可以局限在一个或几个模块内部,不至于波及到软件其他部分。4.1.5软件结构图oYourdon提出的软件结构图非常适合表示软件的结构。图中的每个方框代表一个模块,框内注明模块的名称、主要功能,方框之间的箭头线表示模块间的调用关系。o结构图中还可以标注模块之间传递的数据和控制信息。结构图说明o模块的名字应当能够反映该模块的功能,如:查询。o模块的调用关

11、系和接口:两个模块之间用单向箭头连接。箭头从调用模块指向被调用模块,当被调用模块执行结束后,控制又返回到调用模块。o模块间的信息传递:当一个模块调用另一个模块时,调用模块把数据或控制信息传送给被调用模块,以使被调用模块能够运行。被调用模块执行过程中又把它产生的数据或控制信息回送给调用模块。为了区别在模块之间传递的是数据还是控制信息,用 表示数据信息,用 表示控制信息。通常在短箭头附近注有信息的名字。结构图说明(续)o两个辅助符号:用符号表示一个模块有条件地调用另一个模块;用符号表示模块循环调用它的各下属模块。图中模块A下加一个菱形表示控制模块A按条件选择调用模块B、模块C、模块D。结构图说明(

12、续)o结构图的形态特征:上层模块调用下层模块,模块自上而下“主宰”,自下而上“从属”。同一层的模块之间并没有这种主从关系。o结构图的深度:在多层次的结构图中,模块结构的层数称为该结构图的深度。下面结构图的深度为7。结构图的深度在一定意义上反映了程序结构的规模和复杂程度。对于中等规模的程序,结构图的深度约为10左右。对于一个大型程序,深度可以有几十层。o结构图的宽度:结构图中模块数最多的那层的模块个数称为结构图的宽度,下图的宽度为6。结构图说明(续)o模块的扇入和扇出:扇出表示一个模块直接调用的其他模块数目。扇入则定义为调用一个给定模块的模块个数。多扇出意味着需要控制和协调许多下属模块。而多扇入

13、的模块通常是公用模块。4.2软件设计软件设计原则原则和影响设计的因素和影响设计的因素o设计可回溯到需求。软件设计中的每个元素都可以对应到需求,保证设计使用户需要的。o充分利用已有的模块。一个复杂的软件通常是由一系列模块组成,很多模块可能在以前的系统中已经开发过了,如果这些模块设计得好,具有良好的可复用性,那么在设计新软件时应该尽可能使用已有的模块。o软件模块之间应该遵循高内聚、低耦合和信息隐藏的设计原则。o设计应该表现出一致性和规范性。在设计开始之前,设计小组应该定义设计风格和设计规范,保证不同的设计人员设计出风格一致的软件。软件设计软件设计原则原则和影响设计的因素(续)和影响设计的因素(续)

14、o容错性设计。不管多么完善的软件都可能有潜在的问题,所以设计人员应该为软件进行容错性设计,当软件遇到异常数据、事件或操作时,软件不至于彻底崩溃。o设计的粒度要适当。设计不是编码,即使在详细设计阶段,设计模型的抽象级别也比源代码要高,它涉及的是模块内部的实现算法和数据结构。因此,不要用具体的程序代码取代设计。o在设计时就要开始评估软件的质量。软件的质量属性需要在设计时考虑如何实现,不要等全部设计结束之后再考虑软件的质量。软件设计原则和软件设计原则和影响设计的因素影响设计的因素(续)(续)o由多人共同设计一个软件时的协调问题;o设计人员的设计经验、理解力和喜好的差别;o一致的设计规范约束;o设计者

15、的文化背景、信仰、价值观等其他方面的问题,这些都是影响软件设计的因素。4.3 结构化设计方法结构化设计方法o结构化设计方法通常也叫做面向数据流的设计或面向过程的设计。o结构化设计是基于模块化的、自顶向下、逐步求精等技术基础上的设计方法。o结构化设计与结构化分析和结构化编程方法前后呼应,形成了统一、完整的系列化方法。o结构化设计方法以需求分析阶段获得的数据流程图为基础,通过一系列映射,把数据流程图变换为软件结构图。结构化设计方法4步骤1)分分析析数数据据流流的的类类型型。数数据据流流的的类类型型有有变变换换型型和和事事务务型型两两种种,不不同同类类型型的的数数据据流流程程图图映映射射的的软软件件

16、结结构构有所不同。有所不同。2)将数据流程图映射为程序结构图。)将数据流程图映射为程序结构图。3)优化设计结构。)优化设计结构。4)评审软件结构。)评审软件结构。变换型数据流o在变换型的数据流程图上划分逻辑输入、中心变换、逻辑输出的边界;变换型数据流程软件结构图1)重画数据流程图,重画数据流程图应注意以下几个要点:n从物理输入到物理输出。n当数据流进入和离开一个处理时,要仔细地标记它们,不要重名。n数据流程图中的数据存储先略去,造成的数据开链视为数据的物理输入或输出。2)在数据流程图上区分系统的逻辑输入、逻辑输出和中心变换部分。n从数据流程图的物理输入端开始,向系统的中间移动,一直到某个数据流

17、不再被看作是系统的输入为止,这个数据流的前一个数据流就是系统的逻辑输入。从物理输入端到逻辑输入,构成软件的输入部分。n同理从物理输出端开始,向系统的中间移动,就可以找到软件的逻辑输出。n在输入部分和输出部分之间的就是中心变换部分。3)设计软件结构的顶层和第1层。n设计一个主模块,并用系统的名字为它命名,做为系统的顶层。n第1层:为每个逻辑输入设计一个输入模块,它的功能是为主模块提供数据;为每一个逻辑输出设计一个输出模块,它的功能是将主模块提供的数据输出;为中心变换设计一个变换模块,它的功能是将逻辑输入转换成逻辑输出。n主模块控制和协调第1层的输入模块、变换模块和输出模块的工作。4)设计软件结构

18、的下层结构。n每个逻辑输入模块有两个下属模块:一个接收数据;另一个把数据变换成上级模块所需要的数据格式。而接收数据模块又是输入模块,又要重复上述工作。如此循环下去,直到输入模块已经涉及到物理输入端为止。n同样,每个逻辑输出模块有两个下属模块:一个是将上级模块提供的数据变换成输出的形式;另一个是将它们输出。对于每一个逻辑输出,在数据流程图上向物理输出端方向移动,遇到物理输出为止。n设计中心变换模块的下层模块没有通用的方法,一般应参照数据流程图的中心变换部分和功能分解的原则来考虑如何对中心变换模块进行分解。转换后的初始软件结构图事务型数据流o在事务型流程图上划分接收分支和发送分支的边界,见右图。o

19、注意:两种类型的数据流有时会同时出现在一个流程图中,例如右图中的路径L是变换型数据流。事务型数据流程软件结构图1)重画数据流程图,重画数据流程图应注意以下几个要点:n从物理输入到物理输出。n当数据流进入和离开一个处理时,要仔细地标记它们,不要重名。n数据流程图中的数据存储先略去,造成的数据开链视为数据的物理输入或输出。2)标识事务中心、事务接收路径和事务处理路径。n通常事务中心位于几条处理路径的起点,从数据流程图上很容易标识出来,因为事务处理中心一般会有“发射中心”的特征。例如,上图中的“判断命令”处理就是一个事务中心,它有三条发射路径。n事务中心前面的部分叫做接收路径,发射中心后面各条发散路

20、径叫做事务处理路径。对于每条处理路径来讲,还应该确定它们自己的流特征。3)设计软件结构的顶层和第1层。n软件结构图的顶层是系统的事务控制模块。n第1层是由事务流输入分支和事务分类处理分支映射得到的程序结构。也就是说,第1层通常是由两部分组成:取得事务和处理事务。4)设计软件结构的下层结构。n设计事务流输入分支的方法与变换分析中输入流的设计方法类似,从事务中心变换开始,沿输入路径向物理输入端移动。每个接收数据模块的功能是向调用它的上级模块提供数据,它需要有两个下属模块:一个接收数据;另一个把这些数据变换成它的上级模块所需要的数据格式。接收数据模块又是输入模块,也要重复上述工作。如此循环下去,直到

21、输入模块已经涉及到物理输入端为止。n事务处理分支结构映射成一个分类控制模块,它控制下层的处理模块。对每个事务建立一个事务处理模块。如果发现在系统中有类似的事务,就可以把这些类似的事务组织成一个公共事务处理模块。但是,如果组合后的模块是低内聚的,则应该重新考虑组合问题。转换后的初始软件结构图4.4 优化软件结构设计 o数据流程图转换为软件结构图,应该对软件结构图进行优化。使其符合高内聚低耦合的、模块化、信息隐藏的原则。4.4 优化软件结构设计(续)o规则一:模块功能完善化。一个完整的功能模块,不仅能够完成指定的功能,而且还应当能够向调用者返回完成任务的状态,以及失败的原因。因此要求功能模块除了应

22、该执行规定的功能外,还应该具有出错处理的内容,当模块不能完成规定的功能时,必须回送出错标志,向它的调用者报告失败的原因。如果模块正确结束,应该返回正确结束的标志。上述所有内容,都应当看做是一个模块的有机组成部分,不应分离到其他模块中去,否则将会增大模块间的耦合程度。4.4 优化软件结构设计(续)o规则二:设计功能单一和结果可预测的模块。一个功能单一和结果可预测的模块可以被看成是一个“黑箱”,不论内部处理细节如何,对于相同的输入数据,总能产生同样的结果。但是,如果模块内部蕴藏有一些特殊的鲜为人知的功能时,其模块的结果可能无法预测。例如,如果在模块内部有一个局部控制变量,在运行过程中模块的处理由这

23、个控制变量确定,由于这个局部控制变量对于调用模块来说是隐蔽的,所以调用模块无法控制这个模块的执行,也不能预知将会引起什么后果,有可能造成混乱。4.4 优化软件结构设计(续)o规则三:消除重复功能,改善软件结构。应当认真审查初始的软件结构图,如果发现几个模块的功能有相似之处,应该加以改进。例如,当两个模块的功能完全相似,而只是所处理的数据类型不一致时,应该合并模块,同时修改模块的数据类型和变量定义。但是,如果两个模块的功能只是局部相似时,最好不要简单地合二为一,因为这种简单的并后会造成模块内部设置许多判断开关,模块的接口参数势必会传递一些控制信息,造成模块内聚降低。通常的处理办法是分析两个相似的

24、模块,找出相同的部分,然后将相同的部分从分离出去组成一个新的模块。4.4 优化软件结构设计(续)o规则四:模块的作用范围应在控制范围之内。首先定义一个模块的控制范围是:是这个模块及其所有下属模块。例如图中模块E的控制范围是I、H、J。o一个模块的作用范围是:这个模块内判定的作用范围,凡是受这个判定影响的模块都属于这个判定的作用范围。例如图中模块J的一个判定传递给E模块,然后再传递给I和H模块,这时模块J的作用范围是模块E、I、J。显然,这种设计是不好的,因为模块I和H不是模块J的控制范围,这样就导致模块之间传递的是控制参数,使模块之间的耦合增加。J4.4 优化软件结构设计(续)o如果在设计过程

25、中,发现作用范围不在控制范围内,可采用如下办法把作用范围移到控制范围之内:o)提高控制模块的层次。将判定所在模块合并到父模块中,使判定处于较高层次。o)将受判定影响的模块下移到控制范围内;o)将判定上移到层次中较高的位置。但是要注意,判定所在的模块最好不要太高,模块之间的控制参数传递路径太长,增加了模块之间的耦合。比较好的方案是将判定提到模块E中。4.4 优化软件结构设计(续)o规则五:模块的大小要适中。模块的大小一般用模块的源代码数量来衡量,通常在设计过程中,将模块的源代码数量限制在左右,即一页纸的范围内,这样阅读比较方便。实际上,规模大的模块往往是由于分解不充分造成的,应该对其进一步分解,

26、生成一些下级模块或同层模块。有些模块规模非常小,这种情况下要区别对待,如果该模块是公共模块或者是高内聚模块,则一定不要把它合并到其他模块中去;否则可以考虑将规模很小的模块合并到其它相关的模块中。4.4 优化软件结构设计(续)o规则六:尽可能减少高扇出和高扇入的结构。o规则七:将模块中相对变化较大的部分剥离出去。为了加强模块的可复用性,在设计时将模块中相对稳定的部分与可能变化的部分分离,在分离的两个模块之间加一个接口模块对模块之间传递的参数进行整理,这对保持模块的稳定性和可重用性有很大作用。4.4 优化软件结构设计(续)o对于有时间要求的软件结构,在整个设计阶段和编码阶段都必须进行优化,优化的方

27、法如下:n首先改进软件的结构。n在详细设计时,挑出那些有可能占用过多时间的模块,为这些模块精心设计时间效率更高的处理算法。n检测软件,分离出占用大量处理机资源的模块。如果有必要,用汇编语言或其它较低级的语言重新设计、编码,以提高软件的效率。4.5 图书馆图书信息管理系统设计案例o仔细研究这些数据流程图,发现一个图书管理信息系统可以分为五个子系统设计,它们是读者信息管理子系统、借书子系统、还书子系统、采编子系统和系统维护子系统。将一个复杂的系统划分为多个简单的子系统,有利于系统设计和实现。o进入设计阶段后,要从软件设计的角度重审数据流程图。首先应该为流通组设计一个方便的工作环境,在这个工作环境之

28、中包含了流通组日常要做的所有工作,应该增加一个“还书工作环境”的处理,编号IPO320。o“还书工作环境”处理之后应该是流通组门的业务分发处理,所以增加一个“事物分发”处理,编号为IPO321。在处理完某个具体的还书业务之后,有可能导致“通知预约”处理的执行,而“催还”和“通知预约”两个处理之中都隐含了一个共同的处理“发送邮件”,因此,应该将具有相同功能的处理独立成为一个“发送邮件”的处理,编号为IPO324。o在重画数据流程图时发现,处罚操作属于性质相同的处理,应该将它们归并在一起。每种处罚的规则和处理不同,增加了一个“处罚事物分发”处理,判断不同的处罚类型,每种处罚处理的用户界面不同,为三

29、种处罚类型设计不同的用户界面。最终的处罚结果是保存在一个数据库表中,因此调用同一个“保存处罚记录”处理。在整个处罚的处理部分,基本上是按照逻辑输入、处理、逻辑输出划分的。o另外增加了两个界面处理,这是为了将用户界面与业务处理分开来设计和实现,便于系统的维护和修改。下面是修改后的数据流程图:还书数据流程图还书子系统结构图走查软件结构图 o软件结构图中的模块关系体现的是调用关系,模块之间的接口参数在软件结构图上表现出来。o设计者根据调用关系在纸上对系统进行初步的试运行,方法是从软件结构图的最顶层按深度优先原则调用下级模块,直到图的最底层。在纸上试运行过程中,填写一张功能模块对照表。数据结构与程序模

30、块对照表软件功能需求与程序模块对照表功能模块1模块2模块n功能需求1Module nameModule name功能需求2Module nameModule name功能需求nModule name第1列是分析阶段确定的软件功能编号,通常一个功能可能需要多个模块实现,如果模块超过5个,往往说明该功能太大,应该将其细分。每个功能都应该有一条自上而下的模块调用通路,如果发现某条通路走下来不能实现需要的功能,就要重新检查数据流程图到软件结构图的转换是否正确。在走查模块时不要进入模块内部的具体处理算法,只是检查接口参数和分配的功能即可用快速原型法修正设计用快速原型法修正设计o在设计时,有些问题很难确定

31、是否能够实现,可以先开发一个原型,通过开发原型来发现设计中存在的问题,以便在编码之前解决很多棘手的问题。另外,原型可以促进开发人员之间、以及开发人员与用户之间的沟通。o开发原型时,通常忽略功能上的很多细节,只是将注意力放在系统的某个或某几个特定方面。例如,界面方面、性能方面、还有安全方面等等,这种原型肯定会存在许多漏洞,但是,如果一个原型仅仅是要证明设计的可行性时,就不必太多的关注这些漏洞。这种原型属于抛弃型原型,意思是,开发的原型仅仅是为了证明系统某些特征的可行性,它不是最终的产品。关于设计的说明o在程序结构被设计和优化后,应该对设计进行一些必要的说明。每个模块写一份处理说明;为模块之间的接

32、口提供一份接口说明;确定全局数据结构;指出所有的设计约束和限制。o处理说明应该清楚地描述模块的主要处理任务、条件抉择和输人输出。注意概要设计阶段不要对模块的内部处理过程进行详细描述,这项工作是详细设计的任务。o接口说明要给出一张表格,列出所有进入模块和从模块输出的数据。接口说明中应包括通过参数表传递的信息、对外界的输入输出信息、访问全局数据区的信息等等。此外还要指出其下属的模块和上级模块。模块说明表模块名称:编号:主要功能:输入参数及类型:输出参数及类型:上级调用模块:向下调用模块:局部数据结构:约束条件和设计限制:4.6设计复查o采用概要设计复查的方法来检查在概念上的设计;o在关键设计审查中

33、,向其它开发者描述关键技术上的设计细节;o进行程序设计的复查,程序设计的复查属于详细设计阶段。复查的目标是确保软件设计与实现正是用户想要的。4.7数据设计 o尽量使用简单的数据结构。简单的数据结构通常伴随着简单的操作,有些人喜欢使用复杂的工具完成一些简单的事情,这在软件开发中是比较忌讳的。o在设计数据结构时要注意数据之间的关系,特别要平衡数据冗余与数据关联的矛盾。有时,为了减少信息的冗余,需要增加更多的关联,使程序处理比较复杂;如果一味的降低数据之间的关联,可能会造成大量的数据冗余,难以保证数据的一致性。o为了加强数据设计的可复用性,应该针对常用的数据结构和复杂的数据结构设计抽象类型,并且将数

34、据结构与操纵数据结构的操作封装在一起。同时要清楚地描述调用这个抽象数据结构的接口说明。4.7数据设计(续)o4)尽量使用经典的数据结构,因为,对它们的讨论比较普遍,容易被大多数开发人员理解,同时,也能够获得更多的支持。o5)在确定数据结构时一般先考虑静态结构,如果不能满足要求,再考虑动态结构。4.7数据设计(续)o文件设计是指对数据存储文件的设计,主要工作是根据使用要求、处理方式、存储的信息量、数据的使用频率和文件的物理介质等因素,来确定文件的类别、文件的组织方式。设计文件记录的格式,估计文件的容量。o文件的设计过程包括文件的逻辑设计和文件的物理设计两个阶段,文件的逻辑设计在概要设计阶段进行,

35、文件的物理设计在详细设计阶段进行。4.7数据设计(续)o整理必须的数据元素:分析文件中要存储的数据元素,确定每个数据元素的类型、长度,并且给每个数据元素定义一个容易理解的、有意义的名字。o分析数据间的关系:根据业务处理逻辑确定数据元素之间的关系,有时一个文件记录中可能包含多个子数据结构。例如,考生成绩文件的记录中可能包含:考生编号、姓名、学校、(语文、数学、英语、物理、化学)、总成绩。其中,括号部分是一个子结构,描述各科的成绩,这些数据元素可能需要同时处理。o3)确定文件的存储介质。目前,文件的存储介质主要有磁带、软盘、磁盘、光盘、可移动快速闪存。选择文件存储介质是主要考虑下面一些原则:oa)

36、数据量ob)处理方式oc)存储时间od)处理时间oe)数据结构of)操作要求og)费用要求4.7数据设计(续)o确定文件的记录格式。文件的记录格式通常分为无格式的字符流和用户定义的记录格式两种。并且还可以设计为定长记录和不定长记录。o估算记录的存取时间。根据文件的存储介质和类型,计算平均访问时间和最坏情况下的访问时间。o估算文件的存储量。根据一条记录的大小估算整个文件的存储量,然后,考虑文件的增长速度,确定文件的存储介质的规格型号,以及设计文件备份转储的周期 4.7数据设计(续)4.7数据设计(续)o数据库模式设计:模式设计是在物理层和逻辑层面上描述的数据库设计。o第三范式形式的实体及关系数据

37、模型是模式设计过程的输入,模式设计的主要问题是处理具体的数据库管理系统的结构约束。o子模式设计:子模式是用户使用的数据视图。o完整性和安全性设计o优化4.8详细设计o详细设计也叫过程设计,应该在软件结构设计、数据设计之后进行,主要是设计模块内的算法实现细节。o任务不是编写程序,而是要为编写程序代码设计“图纸”,由程序员按“图纸”用某种高级程序设计语言编写程序代码。因此,详细设计的结果基本上决定了最终的程序代码质量。o衡量程序代码的质量不仅要看它的逻辑是否正确,性能是否满足要求,更主要的要看它是否容易阅读和理解。因此,详细设计的目标不仅仅是保证所设计的模块功能正确,更重要的是保证所设计的处理过程

38、简明易懂。4.8详细设计(续)o结构化程序的特征:n 程序模块只有一个入口和一个出口。n程序中只包含顺序、条件和循环三种控制结构。o程序流程图:程序流程图也称为程序框图,是使用最广泛的详细设计方法。流程图画起来很简单,方框表示处理步骤,菱形表示逻辑判断,箭头表示控制流。判定表o有时一个模块内部的实现算法中常常包含着多重嵌套的条件选择,这类算法如果完全用文字表达可能令人费解,因此可以采用判定表。o判定表由四个部分组成,左上部列出了所有的条件,左下部列出了所有可能的动作,右半部构成了一个矩阵,表示条件的组合以及特定条件组合下应执行的操作。例子o某航空公司的行李收费标准:乘客免费行李不超过30公斤。

39、超出部分国内客头等舱4/每公斤,国内客其他舱6/每公斤,国外客是国内客的2倍,残疾客是正常客的一半。123456789国内旅客TTTTFFFF头等舱TFTFTFTF残疾客FFTTFFTT行李重30TFFFFFFFF免费(W-30)*2(W-30)*3(W-30)*4(W-30)*6(W-30)*8(W-30)*12过程设计语言(PDL)o也称为结构化的英语或伪码,它是一种混合语言,通常采用英语(或中文)的词汇,采用某种结构化程序设计语言的语法。过程设计语言的特征:oPDL过程设计语言使用自然语言的词汇描述处理过程,使设计更加易于理解。oPDL具有顺序、选择、循环控制结构和数据说明。o每种不同的

40、PDL都有不同的关键字,这些关键字被用于不同的控制结构之中,增强了设计的清晰性,例如,if endif 关键字。o数据声明机制既可以说明简单数据结构(例如标量和数组),也可以声明复杂数据结构(例如链表和树)。o具有子程序定义和调用描述功能,提供各种接口定义模式。o使用PDL作为详细设计工具的优点是:可以将设计时产生的PDL语句直接作为程序注释插入到源程序代码之中;修改源程序时直接就修改了PDL,由此保证设计与结果的一致性。模块开发文件夹o随着详细设计过程的进行,每个软件模块相关的文档资料的数量也不断增长。模块开发文件夹是组织和保存在软件开发过程中不断产生出来的文档资料的一种有效方法,用这种方法

41、保存和管理文档既方便又容易查阅。o每个开发文件夹中包含一个或多个模块的全部文档,文件夹的封皮上列出工程项目的名称、模块名字、程序员名字,完成的日期、修改的日期,源程序行数,目标代码长度、对模块的简要描述。以及设计、编码、单元测试和集成测试等阶段的起止时间 本章要点o软件设计的主要原则:模块独立性和信息隐藏。反映模块独立性的有两个标准:内聚和耦合。内聚衡量一个模块内部各个元素彼此结合的紧密程度,耦合衡量模块之间彼此依赖的程度。信息隐藏的核心内容是:一个模块中所包含的信息,不允许其他不需要这些信息的模块访问。o结构化设计是基于模块化的、自顶向下、逐步求精等概念上的设计方法。o结构化方法的流程:首先分析数据流的类型,将数据流程图映射为软件结构图,然后根据优化规则对于软件结构图进行设计优化。o数据设计包括:数据结构设计、文件设计和数据库设计。o详细设计是对模块内部的处理过程进行设计,常用的方法有程序流程图、判定树、PDL。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com