授课教师:梁丽西华大学数学与计算机学院第五章详细设计内容要点:本章主要介绍详细设计的基本任务、描述方法和设计方法。教学重点:详细设计的基本任务教学难点:流程图、PAD图及过程设计语言详细设计与总体设计详细设计以总体设计阶段的工作为基础,但又不同于总体设计阶段,主要表现为以下两方面:(1)在总体设计阶段,数据项和数据结构以比较抽象的方式描述,例如,总体设计可以申明一组值从概念上表示一个矩阵,详细设计就要确定用什么数据结构来实现这样的矩阵。(2)详细设计要提供关于算法的更多的细则,例如,总体设计可以申明一个模块的作用是对一个表进行排序,详细设计则要求确定使用哪种排序算法。在详细设计阶段为每个模块增加了足够的细节,使得程序员能够以相当直接的方式编码每个模块。因此,详细设计的模块包含实现对应的总体设计的模块所需要的处理逻辑,主要有:(1)详细的算法(2)数据表示和数据结构(3)实施的功能和使用的数据之间的关系每个模块被编码成过程、子程序、函数或企图类型的命名实体。详细设计的目的——是具体确定实现目标系统的精确描述,即对系统中每个模块的内部过程进行设计和描述。使程序员可以将这种描述直接翻译为某种语言程序。详细设计与总体设计详细设计阶段:根本目标是确定应该怎样具体地实现所要求的系统。概念详细设计主要确定每个模块具体执行过程,也称过程设计。详细设计的结果基本上决定了最终的程序代码的质量。详细设计的任务不是编写程序,而是要设计出程序的“蓝图”,便于以后根据这个蓝图写出实际的程序代码。①为每个模块进行详细的算法设计。用某种图形、表格、语言等工具将每个模块处理过程的详细算法描述出来。②为模块内的数据结构进行设计。③对数据库进行物理设计,即确定数据库的物理结构。④其他设计。根据软件系统类型,可能要进行代码设计、输入/输出格式设计、人机对话设计。⑤编写详细设计说明书。⑥评审。评审处理过程的算法和数据库的物理结构。详细设计的基本任务:结构程序设计(SP)结构化程序设计是一种典型的面向数据流的软件设计方法,它采用采用自顶向下、逐步求精的设计方法和单入口单出口的控制结构,且只包含顺序、选择和重复3种结构。基本要点是:①采用自顶向下、逐步求精的程序设计方法:详细设计中某个模块内部处理过程仍然可以逐步求精,降低处理细节的复杂程度。结构程序设计②使用3种基本控制结构(顺序、选择和重复,其共同点是单入口、单出口)构造程序:·用顺序方式对过程分解,确定各部分的执行顺序。·用选择方式对过程分解,确定某个部分的执行条件。·用循环方式对过程分解,确定某个部分进行循环的开始和结束的条件。·对于处理过程仍然模糊的部分反复使用以上分解方法,最终将所有细节确定下来。严格控制GOTO语句,仅在下列情形才可使用:①用一个非结构化的程序设计语言去实现一个结构化的构造。②若不使用GOTO语句就会使程序功能模糊。③在某种可以改善而不是损害程序可读性的情况下。结构化程序设计的主要原则例打印A,B,C三数中最小者的程序程序1if(AB)gotob12;if(BC)gotob11;b10:printf(“%d”,C);gotob14;b11:printf(“%d”,B);gotob14;b12:if(AC)gotob13;gotob10;b13:printf(“%d”,A);b14:…程序2if(ABandAC)printf(“%d”,A);else{if(ABandBC)printf(“%d”,B);elseprintf(“%d”,C);}结构程序设计③主程序员组的组织形式:突出主程序员的领导,设计责任集中在少数人身上,有利于提高软件质量和软件生产率。其组织形式是:·一个主程序员:负责全部技术活动。·一个后备程序员:协调、支持主程序员。·一个程序管理员:负责事务性工作,如收集、记录数据,文档资料管理等。·一些专家(如通信专家、数据库专家)。·其他技术人员。自顶向下,逐步求精在详细设计和编码阶段,应当采取自顶向下,逐步求精的方法。把一个模块的功能逐步分解,细化为一系列具体的步骤,进而翻译成一系列用某种程序设计语言写成的程序。自顶向下,逐步求精例,用筛选法求100以内的素数筛选法就是从2到100中去掉2,3,…,9,10的倍数,剩下的就是100以内的素数。为了解决这个问题,可先按程序功能写出一个框架。main(){//程序框架建立2到100的数组A[],其中A[i]=i;-----------------------------------1建立2到10的素数表B[],其中存放2到10以内的素数;-----------2若A[i]=i是B[]中任一数的倍数,则剔除A[i];---------------------3输出A[]中所有没有被剔除的数;-----------------------------------4}main(){/*建立2到100的数组A[],其中A[i]=i*/for(i=2;i=100;i++)A[i]=i;/*建立2到10的素数表B[],其中存放2到10以内的素数*/B[1]=2;B[2]=3;B[3]=5;B[4]=7;/*若A[i]=i是B[]中任一数的倍数,则剔除A[i]*/for(j=1;j=4;j++)检查A[]所有的数能否被B[j]整除并将能被整除的数从A[]中剔除;-----3.1/*输出A[]中所有没有被剔除的数*/for(i=2;i=100;i++)若A[i]没有被剔除,则输出之---4.1}对框架中的局部再做细化,得到整个程序。(){/*建立2到100的数组A[],其中A[i]=i*/for(i=2;i=100;i++)A[i]=i;/*建立2到10的素数表B[],其中存放2到10以内的素数*/B[1]=2;B[2]=3;B[3]=5;B[4]=7;/*若A[i]=i是B[]中任一数的倍数,则剔除A[i]*/for(j=1;j=4;j++)/*检查A[]所有的数能否被B[j]整除并将能被整除的数从A[]中剔除*/for(i=2;i=100;i++)if(A[i]/B[j]*B[j]==A[i])A[i]=0;/*输出A[]中所有没有被剔除的数*/for(i=2;i=100;i++)/*若A[i]没有被剔除,则输出之*/if(A[i]!=0)printf(“A[%d]=%d\n”,i,A[i]);}符合人们解决复杂问题的普遍规律。可提高软件开发的成功率和生产率用先全局后局部,先整体后细节,先抽象后具体的逐步求精的过程开发出来的程序具有清晰的层次结构,程序容易阅读和理解自顶向下,逐步求精方法的优点:程序自顶向下,逐步细化,分解成一个树形结构。在同一层的节点上的细化工作相互独立。有利于编码、测试和集成程序清晰和模块化,使得在修改和重新设计一个软件时,可复用的代码量最大每一步工作仅在上层节点的基础上做不多的设计扩展,便于检查有利于设计的分工和组织工作。自顶向下,逐步求精方法的优点:在详细设计阶段,要决定各个模块的实现算法,并精确地表达这些算法。表达过程规格说明的工具叫做详细设计工具,它可以分为以下三类:图形工具表格工具语言工具详细设计的工具图形工具:·结构化程序流程图:是程序逻辑结构的描述工具。·盒图(N-S图):描述常用的基本控制结构。·问题分析图(简称PAD图):是一种算法描述工具。·IPO图:描述模块间的信息传递和模块内部的处理。详细设计的工具表格工具:·判定表:是描述逻辑条件复杂的算法。语言工具:·过程设计语言(简称PDL):是一种用于描述模块算法设计和处理细节的语言。详细设计的工具程序流程图也称为程序框图,是一种描述程序逻辑结构的工具。结构化流程图:要求流程图应由3种基本控制结构顺序组合和完整嵌套而成,不能有相互交叉,从而克服了流程图的最大缺陷。程序流程图使用五种基本控制结构是:程序流程图示例程序流程图的标准符号循环的标准符号注解的使用多出口判断优点:直观清晰、易于使用,是开发者普遍采用的工具。缺点:①可随心所欲地画控制流程线的流向,容易造成非结构化的程序结构。编码时势必不加限制地使用GOTO语句,导致基本控制块多入口多出口,使软件质量受到影响,与软件设计原则相违背。②流程图不易反映逐步求精的过程,往往反映的是最后的结果。③不易表示数据结构。④对于大型软件而言,流程图过于琐碎,不容易阅读和修改。程序流程图五种基本控制结构由五种图形构件表示。盒图(N-S图):(1)顺序型ABC(2)选择型(If–then–else)If–then–elseIf–thenABF条件TAFT条件then–部分then–部分else–部分(3)多分支选择型(CASE型)A1值1A2An........条件值2值n(4)WHILE重复型(5)UNTIL重复型S(循环体)DO-WHILEPS(循环体)REPEATUNTILP(先测试循环)(后测试循环)循环条件(6)移出标记ACBFX6TA:D(调用结构)示例N-S图的嵌套定义形式主要特点:控制结构明确禁止任何转移控制容易确定数据作用域可以表现模块嵌套结构。盒图是训练、养成结构化程序设计思维方式和解决方案的有效工具。盒图(N-S图):问题分析图(PAD图)PAD图是一种由左往右展开的二维树形结构,它的控制流程为自上而下,从左到右地执行。优点:①清晰反映程序的层次结构。②支持逐步求精的设计方法。③易读易写,使用方便。④支持结构化程序设计原理。⑤可自动生成程序,可由软件工具自动生成相应源代码。问题分析图(PAD图)基本控制结构:(1)顺序结构(2)选择结构ABCABTF条件(3)重复结构WHILECSUNTILCS(先测试循环)(后测试循环)等价的PASCAL语言:REPEATSUNTILC等价的PASCAL语言:WHILECDOS(4)多分支选择型(CASE型)A1值1值2值nA2An......条件PAD描述的示例对应于增量型循环结构fori:=n1ton2stepn3do在PAD中有相应的循环控制结构PAD的扩充控制结构例1:对数组X进行排序。“自顶而下,逐步求精”J:=hk:=h+1,nJ:=kh:=1,n-1排好第h个X[h]W:=X[h]X[h]:=X[j]X[j]:=w1、循环一次,排好一个X[h]排好第h个X[h]找X[J]=MAX(X[h]…X[n])交换X[J]和X[h]2、细化X[k]X[J](a)(b)(b)(a)3、连接各图,构成完整的PAD图h:=1,n-1判定表用于表示程序的静态逻辑在判定表中的条件部分给出所有的两分支判断的列表,动作部分给出相应的处理要求将程序流程图中的多分支判断都改成两分支判断判定表判定表是一种二维的表格,常用于较复杂的组合条件(与结构化语言比较)。条件框条件条目操作框操作条目特点:可处理较复杂的组合条件,但不易理解.不易输入计算机。通常由四部分组成。条件框—条件定义。操作框—操作的定义。条件条目—各条件的取值及组合。操作条目—在各条件取值组合下所执行的操作。例如:对商店每天的营业额所收税率营业额X(¥)1000≤X50005000≤X10000X≥10000税率5%8%10%列出与一个具体过程(或模块)有关的所有处理。列出过程执行期间的所有条件(或所有判断)。将特定条件取值组合与特定的处理相匹配,消去不可能发生的条件取值组合。将右部每一纵列规定为一个处理规则,即对于某一条件取值组合将有什么动作。建立判定表的步骤:例:一图书销售系统,其中一加工为“优惠处理”,条件是:顾客的营业额大于1000元,同时必须信誉好,或者虽然信誉不好,但是20年以上的老主顾。12341000元YYYN信誉好YNN-20年-YN-优惠XX正常XX化简后123456781000元YYYYNNNN信誉好YYNNYYNN20年YNYNYNYN优惠XXX正常XXXXXY-满足条件N-不满足条件X-选中判定的结论判定表应用举例无多分支判断结构特点:描述一般组合条件较清晰,易理解。不易输入