结构化设计概念和原理.ppt

上传人:zhu****ei 文档编号:3523444 上传时间:2019-12-17 格式:PPT 页数:45 大小:260KB
返回 下载 相关 举报
结构化设计概念和原理.ppt_第1页
第1页 / 共45页
结构化设计概念和原理.ppt_第2页
第2页 / 共45页
结构化设计概念和原理.ppt_第3页
第3页 / 共45页
点击查看更多>>
资源描述
第7讲设计概念与原理,内容提要,软件设计的重要性、过程及其基本原则设计的相关概念模块化设计模块设计的启发规则,概述,软件设计:应用各种技术和原理,对一个软件系统做出足够详细的决策,使之有可能在物理上得以实现的过程。软件设计是一个迭代的过程。设计目标:将需求分析的结果(分析模型与需求分析规约)转化为实际软件系统的一个模型或软件表达式,即用于构造软件的“蓝图”。最终产品:设计规约,包括描述体系结构、数据、过程和界面设计模型。评审:清晰性、正确性、完整性。软件设计与程序设计不同。,开发阶段的信息流,翻译需求模型到软件设计,需求分析模型,设计模型,数据对象描述,处理规格说明,控制规格说明,E-R,DFD,STD,DD,过程设计,接口设计,体系结构设计,数据设计,翻译分析模型到软件设计,数据设计将分析时创建的信息域模型变换为软件所需的数据结构,侧重于数据结构的定义。体系结构设计定义软件系统各主要结构构件之间的关系。过程设计则是把结构构件转换成软件的过程性描述。在编码步骤,根据这种过程性描述,生成源程序代码,然后通过测试最终得到完整有效的软件。接口设计是建立软件内部的关系以及软件人机之间的交互机制。软件设计的重要性可以用“质量”表达。,1.软件设计的重要性,软件设计是后续开发步骤及软件维护工作的基础。如果没有设计,只能建立一个不稳定的系统结构。,设计和软件质量,指导性原则设计应该展示一种层次性结构。设计应该模块化。设计应该包括数据、体系结构、接口和模块(构件)的清楚的表示。设计应有性质不同的可区分的数据结构和过程。设计应该具有独立功能特征的模块。设计应该降低模块和外部环境之间接口的复杂性。设计应该利用需求分析中获得的信息和可重复的方法。,2.设计过程,从项目管理的角度来看,软件设计分两步完成。概要设计,将软件需求转化为数据结构和软件体系结构。详细设计,即过程设计。通过对体系结构表示进行细化,得到软件的详细的数据结构和算法。,总体设计,从回答“做什么”到回答“怎样做”划分出组成系统的物理元素程序、文件、数据库、过程和文档等等每个元素还是黑盒子-“全局高度,抽象层次”,3.设计基本原理,1.模块化:Modularity模块是数据说明、可执行语句等程序对象的集合,是单独命名的并且可以通过名字来访问,例如过程、函数、子程序、宏、modula等。软件被划分成独立命名和可独立访问的被称作模块的构件,每个构件完成一个子功能,它们集成到一起满足问题需求。,模块化,模块化论据: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)不要过度模块化!每个模块的简单性将被集成的复杂性所掩盖。,模块化,模块化和软件成本如何确定地预测最小成本区?,模块化,如何确定模块的大小:模块可分解性模块可组装性模块可理解性模块的连续性模块的可保护性,设计基本原理,2.抽象Abstraction:忽略细节,分层理解问题,自顶向下层层细化,包括对过程、数据和控制的抽象。过程抽象:一个命名的指令序列,具有特定和有限的功能。数据抽象是命名的数据集合,描述一个数据对象。控制抽象隐含了不必说明的内部细节的程序控制机制。是实现模块化的手段之一。,过程抽象,在这个抽象层次上,给出了初步的过程表示,所用的术语都已面向软件,而且模块化的工作已经开始显露。逐步细化和模块化的概念与抽象紧密相连。,数据抽象,定义“绘图drawing”数据对象作为一种抽象数据类型。TYPEdrawingISSTRUCTUREDEFINEDnumberISSTRINGLENGTH(12)geometryDEFINEDnotesISSTRINGLENGTH(256)ENFdrawingTYPE;BlueprintISINSTANCEOFdrawing;SchematicISINSTANCEOFdrawing;,设计基本原理,3.求精Refinement自顶向下的设计策略。,walktodoor;reachforknob;Switchtheknob;opendoor;walkthrough;closedoor.,求精,设计的求精过程与需求分析的划分类似,只是考虑的细节层次不同。求精实际是一个详细描述的过程。抽象与求精是互补的概念。,设计基本原理,4.信息隐藏informationhiding信息隐藏:在设计和确定模块时,使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说,是不可访问的。每个客户只能通过接口来了解该模块,而所有的实现都隐藏起来。隐藏就是有效的模块化可以通过定义一组独立模块来实现。,信息隐藏,“信息隐藏”,更准确地描述应是“细节隐藏”,因为隐藏的不是信息,而是实现的细节。,4、模块化设计,模块独立性度量标准:内聚cohesion和耦合coupling内聚是一个模块内部的交互程度;耦合是模块之间交互的程度。好处:更有利于开发、设计/编码修改的副作用减小、模块的复用可能。功能独立性是良好设计的关键,设计又是软件质量的关键。,耦合(couple)是度量系统中模块之间的交互程度。Goal:模块之间尽可能独立耦合从低到高依次为:非直接耦合(最好),数据耦合,标记耦合,控制耦合,外部耦合,公共耦合和内容耦合(最差)。,耦合,耦合,内容耦合contentcoupling如果两个模块中的一个直接引用了另一个模块的内容,则它们之间是内容耦合。Onemodulemodifiesanother.,例1:A访问C的内部数据或不通过正常入口而转入C的内部。,例2:部分代码重叠(常出现在汇编程序中),例3:一个模块有多个入口(功能),耦合,公共耦合commoncoupling如果两个模块都可以存取相同的全局数据,则它们之间是公共耦合。acommondatastore.,耦合,公共耦合存在的问题:公共部分的改动将影响所有调用它的模块;公共部分的数据存取无法控制;复杂程度随耦合模块的个数增加而增加。解决方法:通过使用信息隐藏来避免公共耦合。,耦合,控制耦合controlcoupling如果两个模块中的一个模块给另一个模块传递控制信息,则它们具有控制耦合。Onemodulepassesparameterstocontroltheactivityofanothermodule.,特点:接口单一,但仍然影响被控模块的内部逻辑。,耦合,标记耦合stampcoupling如果两个模块都要使用同一数据结构的一部分,不是采用全局公共数据区共享,而是通过模块结构传递数据结构的一部分,则它们之间为标记耦合。数据耦合datacoupling被调用模块的输入与输出是简单的参数或者是数据结构(该数据结构中的所有元素为被调用的模块使用),则它们之间为数据耦合。非直接耦合nodirectcoupling两个模块之间没有联系,则它们之间为非直接耦合。,Themostdesirable.,耦合,实现低耦合,采取下列措施:耦合方式采用非直接耦合,不采用内容耦合。传递信息类型尽量使用数据耦合,少采用控制耦合,外部耦合和公共耦合限制使用。耦合数量模块间相互调用时,传递参数最好只有一个。原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,完全不用内容耦合。,耦合,内聚,内聚:cohesion.Goal:尽可能高内聚.内聚级别:偶然内聚逻辑内聚时间内聚过程内聚通信内聚顺序内聚功能内聚,最差,最好,低内聚,偶然内聚(Coincidentalcohesion):指一个模块内的各处理元素之间没有任何联系。例:readdiskfile;calculatecurrentvalues;produceuseroutput;严重的缺点:产品的可维护性退化;模块是不可复用的,增加软件成本。解决途径:将模块分成更小的模块,每个小模块执行一个操作。,低内聚,逻辑内聚(Logicalcohesion):逻辑上相关的功能或数据放在一个模块中。问题:接口难于理解;完成多个操作的代码互相纠缠在一起,导致严重的维护问题。,低内聚,时间内聚(Temporalcohesion):如果一个模块包含的任务必须在同一段时间内执行。例如:系统的初始化openoldmasterfile;newmasterfile,transactionfileandprintfile;initializesalesregiontable;readfirsttransactionrecordandfirstoldmasterfilerecord;问题:不同的功能混在一个模块中,有时共用部分编码,使局部功能的修改牵动全局。,中内聚,过程内聚(Proceduralcohesion):Functionsaregroupedtogetherinamoduletoensureacertainorderofperformance.例子:Readpartnumberfromdatabaseandupdaterepairrecordonmaintenancefile.,中内聚,通信内聚(Communicationalcohesion):Allthefunctionsinamoduleoperateonorproducethesamedataset.例如:从数据库的操作可能破坏独立性。,高内聚,顺序内聚(Sequentialcohesion):一个处理元素的输出数据作为下一个处理元素的输入数据。功能内聚(Functionalcohesion):模块内的所有处理元素属于一个整体,完成一个单一的功能。原则:在实际工作中,确定内聚的精确级别是不必要的,重要的是力争高内聚和识别低内聚,可以使得设计的软件具有较高的功能独立性。,1.争取低耦合、高内聚(增加内聚减少耦合)2.模块规模适中:过大分解不充分不易理解;太小则开销过大、接口复杂。注意分解后不应降低模块的独立性。3.适当控制深度=分层的层数。过大表示分工过细。宽度=同一层上模块数的最大值。过大表示系统复杂度大。,启发性规则,控制层次,M,c,b,a,l,k,e,d,m,f,g,i,h,j,n,o,p,q,r,Width,Depth,Fan-out,Fan-in,扇出=一个模块直接调用控制的模块数。3fan-out9,扇入=直接调用该模块的模块数在不破坏独立性的前提下,fan-in大的比较好。,启发性规则,尽可能减少高扇出结构,随着深度增大扇入。如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。一般来说,顶层扇出高,中间扇出少,低层高扇入。,启发性规则,控制域,M的控制域为M,A,B,C,作用域:M中的一个判定所影响的模块。,作用域是指该模块中一个判断所影响的所有其它模块;控制域指该模块本身以及所有直接或间接从属于它的模块。,4.模块的作用范围保持在该模块的控制范围内,启发性规则,例:,上例中A的作用超出了控制域。改进方法之一,可以把A中的if移到M中;改进方法之二,可以把C移到A下面。,5、降低接口的复杂程度:模块接口的复杂性是引起软件错误的一个主要原因。接口设计应该使得信息传递简单并且与模块的功能一致。6、单出单入,避免内容耦合,易于理解和维护。7、模块功能可预测相同输入必产生相同输出。反例:模块中使用全局变量或静态变量,则可能导致不可预测。,启发性规则,小结,软件设计的重要性设计过程设计的基本原理抽象、细化、模块化、体系结构、控制层次、数据结构、软件过程、信息隐藏。模块化设计内聚、耦合,启发规则。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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