SE04第4章结构化设计.ppt

上传人:牧羊曲112 文档编号:6518700 上传时间:2023-11-08 格式:PPT 页数:175 大小:3.29MB
返回 下载 相关 举报
SE04第4章结构化设计.ppt_第1页
第1页 / 共175页
SE04第4章结构化设计.ppt_第2页
第2页 / 共175页
SE04第4章结构化设计.ppt_第3页
第3页 / 共175页
SE04第4章结构化设计.ppt_第4页
第4页 / 共175页
SE04第4章结构化设计.ppt_第5页
第5页 / 共175页
点击查看更多>>
资源描述

《SE04第4章结构化设计.ppt》由会员分享,可在线阅读,更多相关《SE04第4章结构化设计.ppt(175页珍藏版)》请在三一办公上搜索。

1、1/174,第4章 结构化设计(Structured Design,SD),4.1 结构化设计与结构化分析的关系4.2 软件设计的概念和原理4.3 模块独立4.4 启发规则4.5 表示软件结构的图形工具4.6*面向数据流的设计方法(概要设计)4.7 人机界面设计4.8*过程设计(详细设计)4.9*过程设计的工具4.10 面向数据结构的设计方法(详细设计),2/174,软件设计是后续开发步骤及软件维护工作的基础。没有设计,只能建立一个不稳定的系统结构。,软件设计的意义,3/174,软件设计的任务,4/174,软件设计的任务(技术角度),根据用信息域表示的软件需求,以及功能和性能需求,进行数据设计

2、结构设计(体系结构设计、系统结构设计)接口设计(界面设计)过程设计(过程处理设计),5/174,数据设计:将分析阶段创建的信息域模型转变成实现软件所需要的数据结构。系统结构设计:定义软件系统各主要成份之间的关系(计算机程序的模块框架)。接口设计:描述软件内部、软件与协作系统之间以及软件与使用者之间的通信方式。过程设计:把程序体系结构中的结构元素转换成软件构件的过程性描述。在编码阶段根据这种过程性描述,生成源程序代码。,软件设计的任务(技术角度),6/174,软件设计任务(管理角度),从工程管理的角度来看,软件设计分两步完成:概要设计:通过分析软件规格说明,对软件进行适当的功能分解,将软件划分为

3、模块,并设计出完成预定功能的模块结构。详细设计(即过程设计):详细地设计每个模块,确定完成每个模块功能所需要的数据结构和算法。,7/174,4.1结构化设计与结构化分析的关系,分析模型中的每一个成份都提供了建立设计模型所需的信息。软件设计的信息流如图4.1所示。根据用数据、功能和行为模型表示的软件需求,采用某种设计方法进行数据设计、体系结构设计、接口设计和过程设计。,8/174,图4.1 将分析模型转变成软件设计,9/174,4.2 软件设计的概念和原理,模块化抽象化自顶向下,逐步细化信息隐蔽,10/174,4.2.1 模块化,模块(Module)(组件):由边界元素()限定的相邻的程序元素的

4、序列,有一个总体标识符来代表它。例如:过程、函数、子程序、宏模块一般具有如下三个基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境和条件,11/174,模块化的基本概念,模块化:将整个程序划分成若干独立命名且可独立访问的模块,每个模块完成一个子功能。这些模块集成起来构成一个整体,可以完成指定的功能、满足用户的需求。能够把一个大而复杂的软件系统划分成易于理解的比较单纯的模块结构。,12/174,模块大小、模块数目与费用的关系,13/174,4.2.2 抽象,抽象:抽出事物的本质特性(共性)而暂不考虑其细节(差异)进行模块设计时,可有不同的抽象层次。最高抽象层次

5、:可以使用问题所处环境的语言概括地描述问题的解法。较低抽象层次:更过程化的方法。最低抽象层次:以直接实现的方式叙述问题的解法。,14/174,例:开发一个CAD软件时的三种抽象层次,抽象层次.用问题所处环境的术语来描述这个软件:该软件包括一个计算机绘图界面,向绘图员显示图形,以及一个数字化仪界面,用以代替绘图板和丁字尺。所有直线、折线、矩形、圆及曲线的描画、所有的几何计算、所有的剖面图和辅助视图都可以用这个CAD软件实现。,15/174,任务需求的描述。CAD SOFTWARE TASKS user interaction task;2-D drawing creation task;grap

6、hics display task;drawing file management task;end.在这个抽象层次上,未给出“怎样做”的信息,不能直接实现。,抽象层次.,16/174,程序过程表示。以2-D 绘图生成任务为例:PROCEDURE:2-D drawing creation REPEAT UNTIL(drawing creation task terminates)DO WHILE(digitizer interaction occurs)digitizer interface task;DETERMINE drawing request CASE;line:line drawi

7、ng task;rectangle:rectangle drawing task;circle:circle drawing task;,抽象层次.,17/174,4.2.3 逐步求精,定义:为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。基本思想:将软件的体系结构按自顶向下方式,对各个层次的过程细节和数据细节逐层细化,直到用程序设计语言的语句能够实现为止,最后确立整个体系结构。,18/174,4.2.4 信息隐藏,问题:为了得到最好的一组模块,应该怎样分解软件?信息隐藏原理:应该这样设计和确定模块,使得一个模块内包含的信息(数据和过程)对于不需要这些信息的模块来说是不能访问的。(细节隐

8、藏)给测试和维护带来的好处,19/174,模块独立性:指软件系统中每个模块只涉及软件要求的具体的子功能,和软件系统中其它模块的接口是简单的。例如,若一个模块只具有单一的功能且与其它模块之间没有过多的相互作用,则称此模块具有模块独立性 一般采用两个准则度量模块独立性。即模块间耦合和模块内聚,4.3 模块独立,20/174,耦合:一个软件结构内不同模块之间互连程度的度量。内聚:一个模块内各个元素彼此结合的紧密程度(模块功能强度)的度量。模块独立性比较强的模块应是高内聚低耦合的模块。,模块独立性度量准则,21/174,4.3.1模块间的耦合,22/174,非直接耦合(Nondirective Cou

9、pling),如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和调用来实现的,就是非直接耦合。这种耦合的模块独立性最强。,23/174,数据耦合(Data Coupling)如果两个模块彼此间通过参数交换信息,而且交换的信息仅仅是数据(不是控制参数、公共数据结构或外部变量)则称这种耦合为数据耦合。标记耦合(Stamp Coupling)如果一组模块通过参数表传递记录信息,就是标记耦合。这个记录是某一数据结构的子结构,而不是简单变量。,24/174,A,B,C,D,X,传递数据,传递数据结构,AB为非直接耦合AC为数据耦合AD为标记耦合,25/174,控制耦合(Control

10、Coupling),如果传递的信息中有控制信息,如开关、标志、名字等(尽管有时这种控制信息以数据的形式出现),称为控制耦合。,26/174,外部耦合(External Coupling)一组模块都访问同一全局简单变量而不是同一全局数据结构,而且不是通过参数表传递该全局变量的信息,称为外部耦合。公共耦合(Common Coupling)当两个或多个模块通过一个公共数据环境,相互作用时,它们之间的耦合称为公共耦合。公共环境可以是全程变量、共享的通信区、内存的公共覆盖区、任何存储介质上的文件和物理设备等。,27/174,Example of common coupling,28/174,松散的公共耦

11、合,紧密的公共耦合,公共耦合的复杂程度随耦合模块的个数增加而显著增加。若只是两模块间有公共数据环境,则公共耦合有两种情况:松散公共耦合和紧密公共耦合。,29/174,内容耦合(Content Coupling),如果发生下列情形之一,两个模块间就发生了内容耦合一个模块访问另一个模块的内部数据;一个模块不通过正常入口而转到另一模块的内部;两个模块有一部分程序代码重叠(只可能出现在汇编程序中);一个模块有多个入口(意味着一个模块有几种功能)。,30/174,进入另一模块内部,多入口模块,模块代码重叠,内容耦合,31/174,示例1:,下面的程序段出现了哪种类型的耦合?public class Em

12、ailer public void sendEmail(Employee e,String text),32/174,示例2:,下面的程序段出现了哪种类型的耦合?public routineX(String command)if(command.equals(“driwCircle”)drawCircle();else drawRectangle();,33/174,示例3:,下面的程序段出现了哪种类型的耦合?public class Line private point start,end;public point getStart()return start public point ge

13、tEnd()return end public class Arch private Line baseline;void slant(int)point theEnd=baseline.getEnd;theEnd.setLocation(theEnd.getX,newY);,34/174,耦合是影响软件复杂程度的一个重要因素应该采取下述设计原则 尽量使用数据耦合,少用控制耦合和标记耦合,限制公共耦合的范围,完全不用内容耦合,35/174,c,4.3.2 内聚,36/174,功能内聚(Functional Cohesion),一个模块中各个部分都是完成某一具体功能必不可少的组成部分,或者说该模

14、块中所有处理元素属于一个整体,完成一个单一的功能,则称为功能内聚。功能内聚是最高程度的内聚。例如,计算工资、打印月报表等。由于这类模块的功能明确、模块间的耦合简单,所以便于维护。,37/174,顺序内聚,如果一个模块内的处理元素和同一个功能密切相关,而且这些处理必须顺序执行(通常一个处理元素的输出数据作为下一个处理元素的输入数据),则称为顺序内聚。顺序内聚是次高程度的内聚。例如,“录入和汇总”模块、“统计和打印”模块都是顺序内聚模块。顺序内聚的模块中有可能包含几个功能,因而会给维护带来不便。,38/174,信息内聚(Informational Cohesion),这种模块完成多个功能,各个功能

15、都在同一数据结构上操作,每一项功能有一个唯一的入口点。这个模块将根据不同的要求,确定该执行哪一个功能。由于这个模块的所有功能都是基于同一个数据结构(符号表),因此,它是一个信息内聚的模块。(例),39/174,40/174,信息内聚模块可以看成是多个功能内聚模块的组合,并且达到信息的隐蔽。即把某个数据结构、资源或设备隐蔽在一个模块内,不为别的模块所知晓。,41/174,通信内聚(Communication Cohesion),如果一个模块内所有元素都使用同一个输入数据和(或)产生同一个的输出数据,则称之为通信内聚。通常,通信内聚模块是通过数据流图来定义的。例如报表打印模块,各成分都从若干共同的

16、数据来源接收数据,然后转换、汇总并打印出各种报表。,42/174,读文件,打印检验结果,计算A,计算B,合并,新文件,文件,加工记录模块,通信内聚,43/174,过程内聚(Procedural Cohesion),如果一个模块内的处理元素是相关的,而且必须以特定次序执行,则称为过程内聚。使用流程图作为工具设计程序时,把流程图中的某一部分划出组成模块,就得到过程内聚模块。例如,把流程图中的循环部分、判定部分、计算部分分成三个模块,这三个模块都是过程内聚模块。,44/174,时间内聚,如果一个模块包含的任务必须在同一段时间内执行,则称为时间内聚。时间内聚属于低内聚。例如,模块完成各种初始化工作,4

17、5/174,逻辑内聚(Logical Cohesion),这种模块把几种 相关的功能组合 在一起,每次被 调用时,由传送 给模块的判定参 数来确定该模块 应执行哪一种功 能。,46/174,例如,把系统中与“输出”有关的操作抽取出来组成一个模块,包括将数据在屏幕上显示、从打印机上打印、拷贝到磁盘上等,则该模块就是逻辑内聚的。,47/174,偶然内聚(Coincidental Cohesion),当模块内各部分之间没有联系,或者即使有联系,这种联系也很松散,则称这种模块为偶然内聚模块,它是内聚程度最低的模块。有时在写完一个程序之后,发现一组语句在两处或多处出现,于是把这些语句作为一个模块以节省内

18、存,48/174,ASTORE rec()to NREAD X FileADD 1 to z,BSTORE rec()to NREAD X FileADD 1 to z,M STORE rec()to N READ X File ADD 1 to z,A,B,49/174,Examples of Cohesion,50/174,4.4 启发式规则,软件工程师们在开发计算机软件的长期实践中积累了丰富的经验,总结这些经验得出了一些启发规则。这些启发规则虽然不像基本原理那样普遍适用,但是在许多场合仍然能给软件工程师有益的启示,往往能帮助找到改进软件设计提高软件质量的途径,有助于实现有效的模块化。,5

19、1/174,几条常用的启发规则,改进软件结构提高模块独立性模块规模应该适中深度、宽度、扇入、扇出适中模块的作用域应该在控制域之内降低模块接口的复杂程度设计单入口单出口的模块模块功能应该可以预测,52/174,4.4.1改进软件结构提高模块独立性,审查分析软件的结构,通过模块分解或合并,力求降低耦合提高内聚多个模块公有的一个子功能可以独立成一个模块,由这些模块调用。有时通过模块分解或合并以减少控制信息的传递及对全程数据的引用,并降低接口的复杂度。,53/174,4.4.2 模块规模应适中,模块的大小,可以用模块中所含语句的数量的多少来衡量。把模块的大小限制在一定的范围之内。通常规定其语句行数在6

20、0左右,保持在一页纸之内。,54/174,过大的模块往往是由于分解不充分,但是进一步分解必须符合问题结构,一般说来,分解后不应该降低模块独立性过小的模块开销大于有效操作,而且模块数目过多将使系统接口复杂。因此过小的模块有时不值得单独存在,特别是只有一个模块调用它时,通常可以把它合并到上级模块中去而不必单独存在。,55/174,4.4.3深度、宽度、扇入、扇出应适当(程序的系统结构图),56/174,如果一个模块的扇出数过大,就意味着该模块过分复杂,需要协调和控制过多的下属模块。应当适当增加中间层次的控制模块。,57/174,设计较好的软件结构顶层扇出比较高中层扇出比较少底层扇入到公共的实用模块

21、中去(底层模块有高扇入),58/174,4.4.4模块的作用域应在控制域之内,59/174,模块的作用域应在控制域之内,模块的控制域:模块本身及其所有从属模块的集合。(例:A-A,B,C,D,E,F)模块的作用域:受该模块内一个判定影响的所有模块的集合。如果一个判定的作用域包含在这个判定所在模块的控制域之内,则这种结构是简单的(例:A-B);否则,它的结构是不简单的(例:A-G)。解决办法?,60/174,模块A的某些处理决定于B2中判定的结果B2返回B的一个标记flag,表示判定的结果,再送给Y,最后送到Aflag不是数据,而是控制信息,因而造成模块间的控制耦合,61/174,4.4.5 模

22、块功能应可预测,设计功能可预测的模块,但要避免模块功能过分局限功能可预测的模块:不论内部处理细节如何,对相同的输入数据,总能产生同样的结果如果模块内部蕴藏有一些特殊的鲜为人知的功能时,这个模块就可能是不可预测的。这种模块既难于理解又难于测试和维护,62/174,4.5 表示软件结构的图形工具,软件结构包括程序的模块结构数据的结构软件的体系结构通过一个划分过程来完成该划分过程从需求分析确立的目标系统的模型出发,对整个问题进行分割,使其每个部分用一个或几个软件成份加以解决,整个问题便得以解决。,63/174,待解问题与软件解决方案的对应划分,64/174,总体设计,设计阶段的任务解决怎么做的问题总

23、体设计的任务将系统的功能分配到软件结构,形成模块结构图,65/174,总体设计的表示形式,层次图通过模块之间的关系图表示软件的总体结构HIPO图(IBM)层次图+输入/处理/输出图结构图描述能力更强,能够区分各种具体的调用情形,66/174,4.5.1 层次图和HIPO图,层次图(Hierarchy图):描绘软件层次结构的图形工具矩形框:代表模块连线:代表调用关系(位于上方的矩形框所代表的模块调用位于下方的矩形框所代表的模块)在自顶向下逐步求精设计软件的过程中,使用H图很方便加编号的H图(具有可跟踪性),67/174,例:正文加工系统的层次图,68/174,例:加编号的正文加工系统的层次图,6

24、9/174,HIPO(层次图加输入/处理/输出)图,IPO图:与H图中的每个方框相对应,描绘这个方框所代表模块的处理过程IPO图基本形式:左边的框列出有关的输入数据中间的框列出主要的处理(其次序暗示执行顺序)右边的框列出产生的输出箭头:指出数据通信的情况,70/174,例:HIPO图,71/174,改进的IPO图(IPO表),72/174,4.5.2 结构图,Yourdon(Computer Hall of Fame)提出的结构图是进行软件结构设计的一个有力工具。结构图:描绘软件结构的图形工具矩形框:代表模块,框内注明模块名字或主要功能连线:代表调用关系(位于上方的矩形框所代表的模块调用位于下

25、方的矩形框所代表的模块)带注释的箭头:表示模块调用过程中来回传递的信息;尾部为空心圆传递数据;尾部为实心圆传递控制信息,73/174,程序结构,程序结构:表明程序各个部件(模块)的组织情况,是软件的过程表示。,74/174,例:产生最佳解的一般结构,75/174,结构图的附加符号,76/174,层次图和结构图并不严格表示模块的调用次序。层次图和结构图并不指明什么时候调用下层模块。通常上层模块中除了调用下层模块的语句之外还有其他语句,究竟是先执行调用下层模块的语句还是先执行其他语句,在图中丝毫没有指明。事实上,层次图和结构图只表明一个模块调用哪些模块,至于模块内还有没有其他成分则完全没有表示。,

26、77/174,通常用层次图作为描绘软件结构的文档。结构图作为文档并不很合适。利用IPO图或数据字典中的信息得到模块调用时传递的信息,从而由层次图导出结构图的过程,却可以作为检查设计正确性和评价模块独立性的好方法。传送的每个数据元素是否都是完成模块功能所必须的,反之,完成模块功能必须的每个数据元素是否都传送来了,所有数据元素是否都只和单一的功能有关?,78/174,4.6 面向数据流的设计方法*,目标:给出设计软件结构的一个系统化途径基本思想:定义一些不同的“映射”,利用它们将DFD变换成软件结构结构化设计方法=基于数据流的设计方法,79/174,4.6.1 概念,面向数据流的设计方法将信息流映

27、射成软件结构,信息流类型决定了映射方法信息流类型变换流事务流,80/174,变换流,根据基本系统模型,信息通常以“外部世界”的形式进入软件系统,经过处理以后再以外部世界”的形式离开系统。,81/174,2 事务流(事务中心T选择一个动作执行),处理T称为事务中心:接收输入数据(输入数据又称为事务);分析每个事务以确定它的类型:根据事务类型选取一条活动通路。,82/174,3 设计过程,83/174,4.6.2 变换分析,变换分析设计步骤复查基本系统模型复查并精化数据流图确定数据流图具有变换特性/事务特性确定输入流和输出流的边界,孤立出变换中心完成“第一级分解”完成“第二级分解”使用设计度量和启

28、发规则对第一次分割得到的软件结构进一步精化,84/174,例:汽车数字仪表板的设计,仪表板应有功能(需求描述)通过模-数转换实现传感器和微处理机接口在发光二极管面板上显示数据指示mile/h,行驶的里程,mile/Gal指示加速/减速超速警告:若车速超过55 mile/h,则发出超速警告铃声,85/174,86/174,设计步骤,复查基本系统模型:确保输入/输出符合实际复查并精化DFD(已足够详细)应该对需求分析阶段得出的数据流图认真复查,并且在必要时进行精化确保数据流图给出了目标系统的正确的逻辑模型使数据流图中每个处理都代表一个规模适中相对独立的子功能,87/174,设计步骤,确定DFD具有

29、的特性(具有变换特性还是事务特性):2条数据输入通路,5条输出通路无明显的事务中心可认为信息流具有变换流的总特征,88/174,设计步骤,确定输入流和输出流的边界,孤立出变换中心输入流和输出流的边界和对它们的解释有关,不同设计人员可能会在流内选取稍微不同的点作为边界的位置。在确定边界时应该仔细认真,但是把边界沿着数据流通路移动一个处理框的距离,通常对最后的软件结构只有很小的影响。,89/174,90/174,完成“第一级分解”,分解:软件结构代表对控制自顶向下的分配,分解即分配控制的过程对变换流的情况:DFD被映射成一个特殊的软件结构,这个结构控制输入、变换和输出等信息处理过程。,91/174

30、,“第一级分解”方法,位于软件结构最顶层的控制模块Cm协调下述从属的控制功能输入信息处理控制模块Ca,协调对所有输入数据的接收变换中心控制模块Ct,管理对内部形式的数据的所有操作输出信息处理控制模块Ce,协调输出信息的产生过程,92/174,仪表板的第一级分解,93/174,完成“第二级分解”,第二级分解:将DFD中的每个处理映射成软件结构中一个适当的模块。分解方法:从变换中心边界开始沿着输入通路向外移动,把输入通路中每个处理映射成模块Ca控制的一个低层模块沿着输出通路向外移动,把输出通路中每个处理映射成直接或间接受模块Ce控制的一个低层模块把变换中心内每个处理映射成受模块Ct控制的一个模块,

31、94/174,“第二级分解”方法,95/174,仪表板的第二级分解(参考图4.15),96/174,仪表板的第二级分解(参考图4.15),97/174,仪表板的第二级分解(参考图4.15),98/174,对第二级分解模块的简要说明,图中每个模块的名字表明了它的基本功能,但是仍然应该为每个模块写一个简要说明,描述:进出该模块的信息(接口描述)模块内部的信息过程陈述,包括主要判定点及任务对约束和特殊特点的简短讨论可用IPO表描述每个模块,99/174,使用设计度量和启发规则对第一次分割得到的软件结构进一步精化,对第一次分割得到的软件结构,总可以根据模块独立原理进行精化为了产生合理的分解,得到尽可能

32、高的内聚、尽可能松散的耦合,最重要的是,为了得到一个易于实现、易于测试和易于维护的软件结构,应该对初步分割得到的模块进行再分解或合并。,100/174,下面是某些可能的修改:输入结构中的模块“转换成rmin”和“收集Signals”可以合并;模块“确定加速减速”可以放在模块“计算mileh”下面,以减少耦合;模块“加速减速显示”可以相应地放在模块“显示mileh的下面。,101/174,102/174,上述七个设计步骤的目的是,开发出软件的整体表示一旦确定了软件结构就可以把它作为一个整体来复查,从而能够评价和精化软件结构在这个时期进行修改只需要很少的附加工作,但是却能够对软件的质量特别是软件的

33、可维护性产生深远的影响,103/174,4.6.3 事务分析,在很多软件应用中,存在某种作业数据流,它可以引发一个或多个处理,这些处理能够完成该作业要求的功能。这种数据流就叫做事务。当数据流有一个明显的“发射中心”(事务中心)时,宜采用事务分析。事务分析与变换分析的设计步骤类似,主要差别为由DFD到软件结构的映射方法不同.,104/174,事务分析的映射方法,由事务流映射成的软件结构包括一个接收分支和一个发送分支从事务中心的边界开始,把沿着接收流通路的处理映射成模块发送分支结构包含一个调度模块,它控制下层的所有活动模块把DFD中的每个活动流通路映射成与它的流特征相对应的结构,105/174,1

34、06/174,事务型系统结构图,107/174,变换分析是软件系统结构设计的主要方法,一般,一个大型的软件系统是变换型结构和事务型结构的混合结构通常,利用以变换分析为主,事务分析为辅的方式进行软件结构设计。,108/174,109/174,4.6.4 设计优化,格言:“先使它能工作,然后再使它快起来”原则:在有效的模块化的前提下使用最少量的模块在满足信息要求的前提下使用最简单的数据结构,110/174,4.6.4 设计优化,对时间起决定性作用的软件在不考虑时间因素的前提下开发并精化软件结构选出最耗时的模块,仔细设计其处理过程(算法)使用高级程序设计语言编写程序在软件中孤立出大量占用处理器资源的

35、模块必要时重新设计或用依赖于机器的语言重写上述模块的代码,111/174,4.7 人机界面设计4.7.1 人机界面设计问题,系统响应时间用户帮助设施出错信息处理命令交互,112/174,系统响应时间,概念:指从用户完成某个控制动作到软件给出预期响应的这段时间重要属性长度过长:用户紧张、沮丧过短:用户紧张、易错易变性:系统响应时间相对于平均响应时间的偏差,113/174,用户帮助设施,设施类型:集成、附加信息提供范围:部分功能、全部功能用户请求方式:帮助菜单、特殊功能键、HELP命令信息显示方式:在独立窗口中指出参考某个文档、在屏幕固定位置显示简短提示用户返回方式:屏幕上的返回按钮、功能键信息组

36、织方式:平面结构(关键字)、层次结构、超文本结构,114/174,出错信息处理,以用户可理解的术语描述问题提供有助于从错误中恢复的建设性意见指出错误可能导致哪些负面后果伴随听觉或视觉上的提示不能带有指责色彩,115/174,命令交互,是否每个菜单选项都有对应的命令命令形式:控制序列、功能键、键入命令学习、记忆、回忆命令的难度用户是否可以定制或缩写命令一致的命令使用方法,116/174,4.7.2 人机界面设计过程,创建界面设计模型用原型实现设计模型用户试用、评估修改模型,117/174,4.7.3 人机界面设计指南,一般交互信息显示数据输入,118/174,4.8 过程设计*,任务:设计程序的

37、处理过程。即在使用程序设计语言编制程序以前,对所采用算法的逻辑关系进行分析,设计出全部必要的过程细节,并给予清晰的表达。,119/174,应该在数据设计、体系结构和接口设计完成之后进行,是详细设计阶段应该完成的主要任务设计出程序的蓝图(blueprint),过程设计的结果基本上决定了最终的程序代码的质量衡量程序的质量不仅看程序逻辑是否正确,性能是否满足要求,更主要的是要看它是否容易阅读和理解。结构程序设计技术是实现上述目标的关键技术,因此是过程设计的逻辑基础,120/174,结构程序设计,经典定义:一个程序的代码块仅仅通过顺序、选择和循环这三种控制结构进行连接,并且每个代码块只有一个入口和一个

38、出口,则称此程序是结构化的。,121/174,经典的结构程序设计,122/174,扩展的结构程序设计,结构程序设计的概念最早是由E.W.Dijkstra提出。“可以从高级语言中取消goto语句”,“程序的质量与程序中所包含的goto语句的数量成反比”改进定义:尽可能少用GO TO语句的程序设计方法。最好仅在检测出错时才使用GO TO语句,而且应该总是使用前向GO TO语句,123/174,124/174,工具类型:图形、表格、语言基本要求:能提供对设计无歧义的描述控制流程处理功能数据组织其他实现细节在此阶段,要决定各个模块的实现算法,精确地表达这些算法,从而在编码阶段能把对设计的描述直接翻译成

39、程序代码。表达过程规格说明的工具叫做详细设计工具。,4.9 过程设计的工具*,125/174,过程设计的工具,程序流程图盒图(N-S图)PAD图(Problem Analysis Diagram 问题分析图)判定表判定树过程设计语言(PDL,Program Design Language),126/174,4.9.1 程序流程图,程序流程图也称为程序框图程序流程图的标准符号五种基本控制结构,127/174,程序流程图的标准符号,128/174,基本控制结构,129/174,示例,130/174,循环的标准符号 注解的使用,131/174,程序流程图的主要缺点如下:程序流程图本质上不是逐步求精的

40、好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构。程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制。程序流程图不易表示数据结构。详细的微观程序流程图每个符号对应于源程序的一行代码,对于提高大型系统的可理解性作用甚微。,132/174,4.9.2 盒图(NS图),出于要有一种不允许违背结构程序设计精神的图形工具的考虑,Nassi和Shneiderman提出了盒图,又称为NS图。有下述特点:功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。不可能任意转移控制。很容易确定局部和全程数据的作用域。很容易表现嵌套

41、关系,也可以表示模块的层次结构。,133/174,盒图没有箭头,因此不允许随意转移控制。坚持使用盒图作为详细设计的工具,可以使程序员逐步养成用结构化的方式思考问题和解决问题的习惯。,134/174,示例,135/174,N-S图的嵌套定义形式,136/174,PAD图,PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明以后,已得到一定程度的推广。它用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。,137/174,138/174,PAD图的主要优点,使用表示结构化控制结构的PAD符号所设计出来的程序必然是结构化程

42、序用PAD图表现程序逻辑,易读、易懂、易记容易将PAD图转换成高级语言源程序PAD图的符号支持自顶向下、逐步求精方法的使用,139/174,140/174,PAD描述的示例,PAD描述的示例,141/174,PAD图是面向高级程序设计语言的,为FORTRAN,COBOL和PASCAL等每种常用的高级程序设计语言都提供了一整套相应的图形符号。由于每种控制语句都有一个图形符号与之对应,显然将PAD图转换成与之对应的高级语言程序比较容易。,142/174,4.9.4 判定表,用途:表示程序的静态逻辑特点当包含多重嵌套的条件时,能清晰地表示复杂的条件组合与应做动作间的对应关系。不能同时清晰地表示顺序和

43、重复,不适合作为通用的设计工具。方法:由4部分组成,143/174,下面以行李托运费的算法为例说明判定表的组织方法。假设某航空公司规定,乘客可以免费托运重量不超过30kg的行李。当行李重量超过30kg时,对头等舱的国内乘客超重部分每公斤收费4元,对其他舱的国内乘客超重部分每公斤收费6元,对外国乘客超重部分每公斤收费比国内乘客多一倍,对残疾乘客超重部分每公斤收费比正常乘客少一半。用判定表可以清楚地表示与上述每种条件组合相对应的动作(算法)。,144/174,145/174,4.9.5 判定树,当数据元素的值多于两个时(例如,4.9.4节例子中假设对机票需细分为头等舱、二等舱和经济舱等多种级别时)

44、,判定表的简洁程度也将下降。判定树是判定表的变种,也能清晰地表示复杂的条件组合与应做的动作之间的对应关系。,146/174,147/174,判定树的优点在于,它的形式简单到不需任何说明,一眼就可以看出其含义,因此易于掌握和使用。虽然判定树比判定表更直观,但简洁性却不如判定表,数据元素的同一个值往往要重复写多遍,而且越接近树的叶端重复次数越多。画判定树时分枝的次序可能对最终画出的判定树的简洁程度有较大影响。,148/174,4.9.6 过程设计语言(PDL,Program Design Language),PDL(伪码):用正文形式表示数据和处理过程的设计工具。PDL的语法规则严格的关键字外部语

45、法,用于定义控制结构和数据结构(某种结构化程序设计语言的语法)灵活自由、可使用自然语言词汇的内部语法,用于表示实际操作和条件。,149/174,示例:拼词检查程序,PROCEDURE spellcheck IS BEGIN split document into single words look up words in dictionary display words which are not in dictionary create a new dictionary END spellcheck,150/174,PDL的特点,关键字的固定语法,提供了结构化控制、数据说明和模块化的特点。自

46、然语言的自由语法,它描述处理特点。数据说明的手段,包括简单的(如标量和数组)与复杂的(如链表和层次结构)的数据结构。模块定义和调用的技术,用以表达各种方式的接口说明。规定关键字一律大写,其它单词一律小写。或者规定关键字加下划线,或者为黑体字。,151/174,PDL的优点与缺点,可以作为注释直接插在源程序中间,有利于程序代码与PDL注释同步修改,以保持文档和程序的一致性。可以使用普通的正文编辑程序或文字处理系统方便地完成PDL的书写和编辑已有自动处理程序,可由PDL自动生成程序代码不如图形工具形象直观描述复杂条件组合与动作间对应关系时,不如判定表清晰简单,152/174,使用PDL语言,逐步求

47、精:,PROCEDURE spellcheckBEGIN-*split document into single wordsLOOP get next word add word to word list in sortorder EXIT WHEN all words processedEND LOOP-*look up words in dictionaryLOOP get word from word list,153/174,IF word not in dictionary THEN-*display words not in dictionary display word prom

48、pt on user terminal IF user response says word OK THEN add word to good word list ELSE add word to bad word list ENDIF ENDIF EXIT WHEN all words processedEND LOOP,154/174,-*create a new words dictionary dictionary:merge dictionary and good word listEND spellcheck,155/174,4.10 面向数据结构的设计方法,面向数据流的设计方法:

49、根据数据流确定软件结构(模块)(概要设计)面向数据结构的设计方法:根据数据结构设计程序处理过程(详细设计),156/174,领域信息(输入、内部存储如DB,File、输出数据)可能有独特的结构数据结构既影响程序的结构也影响程序的处理过程重复出现的数据循环控制结构的程序处理选择数据(可能出现/可能不出现)分支控制结构的程序处理,157/174,4.10.1 Jackson图,程序中实际使用的数据结构种类繁多,但它们的数据元素之间的逻辑关系只有顺序选择重复所以逻辑数据结构也只有上述三种,158/174,159/174,Jackson图的优点与缺点,优点:便于表示层次结构,是对结构进行自顶向下分解的

50、有力工具形象直观易读既能表示数据结构也能表示程序结构(结构程序设计也只使用上述三种基本结构)缺点:表示选择或重复结构时,选择条件或循环条件不能直接在图上表示出来,不易直接将图翻译成程序框间连线为斜线,不易在行式打印机上输出,160/174,4.10.2 改进的Jackson图,161/174,Jackson图和描绘软件结构的层次图形式相当类似,但是含义却很不相同:层次图中的一个方框通常代表一个模块;Jackson图即使在描绘程序结构时,一个方框也并不代表一个模块,通常一个方框只代表几个语句。层次图表现的是调用关系,通常一个模块除了调用下级模块外,还完成其他操作;Jackson图表现的是组成关系

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号