1、结构化详细设计的结构和特点结构化详细设计工具人机交互界面设计数据库设计编码实现详细设计就是在概要设计的基础上决定如何具体实现各模块的内部细节,直到对系统中的每个模块给出足够详细的过程描述。在编码实现阶段就可以完全按照详细设计的细节过程来映射到代码,最终实现整个系统。一般使用结构化程序设计工具来描述结构化详细设计也称为结构化程序设计。结构化程序设计的理念是在20世纪60年代,由Dijkstra等人提出并加以完善的。结构化的程序一般只需要用三种基本的逻辑结构就能实现。这三种基本逻辑结构是顺序结构、选择结构和循环结构。结构化程序设计是一种设计程序的技术,它采用自顶向下逐步求精的设计方法和单入口单出口
2、的控制结构。三种基本结构顺序结构选择结构循环结构 A B a.顺序 exp B A b.if-then-else 选择 exp A c.do-while 循环 或 exp A T F F T 自顶向下逐步求精的方法符合人类解决复杂问题的普遍规律,因此可以显著提高软件开发工程的成功率和生产率。用先全局后局部、先整体后细节、先抽象后具体的逐步求精过程开发出的程序有清晰的层次结构,因此容易阅读和理解。不使用GOTO语句仅使用单入口单出口的控制结构,使得程序的静态结构和它的动态执行情况比较一致。因此,程序容易阅读和理解,开发时也比较容易保证程序的正确性,即使出现错误也比较容易诊断和改正。控制结构有确定
3、的逻辑模式,编写程序代码只限于使用很少几种直截了当的方式,因此源程序清晰流畅,易读易懂而且容易测试。程序清晰和模块化使得在修改和重新设计一个软件时可以重用的代码量最大。程序的逻辑结构清晰,有利于程序正确性证明。图形工具:把过程的细节表示成一个图的组成部分,在这个图上,逻辑构造用具体的图形来表示。列表工具:用一个表来表示过程的细节,这个表列出了各种操作及其相应的条件。也即,描述了输入、处理和输出信息。语言工具:用类语言来表示过程的细节,这种类语言很接近于编程语言。程序流程图又称为程序框图,Goldstine于1946年首先采用。它的主要优点是对控制流程的描绘很直观,便于初学者掌握。程序流程图的主
4、要缺点:程序流程图本质上不是逐步求精的好工具,它诱使程序员过早地考虑程序的控制流程,而不去考虑程序的全局结构;程序流程图中用箭头代表控制流,因此程序员不受任何约束,可以完全不顾结构程序设计的精神,随意转移控制;程序流程图不易表示数据结构。程序流程图符号(a)预处理 (b)选择 (c)多分支 (d)循环上界 (e)循环下界(f)开始/结束 (g)准备 (h)注释 (i)虚线 (j)省略 (k)并行方式 (l)控制流举例:pp79盒图是由Nassi和Shneiderman提出的,所以又称为N-S图。每个处理步骤都用一个盒子来表示,这些处理步骤可以是语句或语句序列,在需要时,盒子中还可以嵌套另一个盒
5、子,嵌套深度一般没有限制。盒图具有下述特点:功能域(即,一个特定控制结构的作用域)明确,可以从盒图上一眼就看出来。由于只能从上边进入盒子然后从下面走出盒子,除此之外没有其它的入口和出口,所以盒图限制了任意的控制转移,保证程序有良好的结构。很容易确定局部和全程数据的作用域。很容易表现嵌套关系,也可以表示模块的层次结构。盒图很容易表示程序结构化的层次结构,确定局部和全局数据的作用域。由于没有箭头,因此不允许随意转移控制。盒图符号 A B a.顺序 F P T B A b.IF-THEN-ELSE 选择 F P T A Do while p S c.do-while 循环 S Do until p
6、d.do-until 循环 P =1 =2 =n A1 A2 An e.多分支选择 举例:pp80PAD是问题分析图(Problem Analysis Diagram)的英文缩写,自1973年由日本日立公司发明。它是由程序流程图演化而来,用二维树形结构的图来表示程序的控制流,将这种图翻译成程序代码比较容易。PAD图的基本原理:采用自顶向下、逐步细化和结构化设计的原则,力求将模糊的问题解的概念逐步转换为确定的和详尽的过程,使之最终可采用计算机直接进行处理。PAD图符号 P1 P2 a.顺序 C P1 P2 b.if-then-else 选择 X= P1 P2 L1 L2 Pn Ln c.case
7、 多分支选择 While c P d.do-while 型循环 until c P e.repeat-until 型循环 使用表示结构化控制结构的PAD符号设计出来的程序必然是结构化程序。PAD图所描绘的程序结构十分清晰。图中最左边的竖线是程序的主线,即第一层结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数。用PAD图表现程序逻辑,易读、易懂、易记。PAD图是二维树形结构的图形,程序从图中最左竖线上端的结点开始执行,自上而下,从左向右顺序执行,遍历所有结点。容易将PAD图转换成高级语言源程序,这种转换可用软件工具自动完
8、成,从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。既可用于表示程序逻辑,又可用于描绘数据结构。PAD图举例 P1 P2 C P3 P4 P2 a.初始的 PAD 图 b.使用 def 符号细化处理框 P2 后的 PAD 图 P5 def P6 C1 P8 until C2 P7 until C3 P9 P10 问题:1、程序流程图、盒图和PAD如何分别表示程序的3种基本控制结构的?2、比较程序流程图、盒图和PAD的特点特点:历史最悠久、使用最广泛、最混乱优:直观,适合初学者缺:1.不是逐步求精的好工具2.不以表示数据结构3.用箭头表示数据流,程序员可能随意转移控制特点:1.功能域
9、明确,一眼看出2.不可能任意转移控制3.容易确定局部、全程数据的作用域4.容易表现嵌套关系,模块层次结构 坚持使用N-S图作为详细设计的工具,可是程序员养成结构化的方式思考问题和解决问题 的习惯!优点:1.结构化程序-PAD符号是表示结构化控制的;2.程序结构清晰(竖线总条数即程序层次数);易读、易懂、易记;易将PAD图转为高级语言源程序; 可用于表示程序逻辑,也可用于描绘数据结构支持自顶向上,逐步求精;问题:3、下面2张程序流程图表示的程序是结构化的吗?若不是,请将其转化为功能等价的结构化程序。再分别用盒图和PAD加以表示。结构化程序一般应由三种基本结构即顺序结构、分支结构和循环结构组成。其
10、特点是: :1) 1) 只有一个入口; ;2) 2) 只有一个出口( (指结构与结构之间) ;) ;3) 3) 无死语句( (即没有永远执行不到的语句) ;) ;4) 4) 无死循环( (即没有永远执行不完的循环) )。非结构化程序往往表现为有两个或两个以上出口和不加限制地使用G OT O 语句。盒图if (POWER_N=1) OUTPUT;else caculate new line; while (Required LINE_NUMBER in triang) caculate new line; output expansion; PAD图举例:条件复合法条件复合法这种方法是把控制循环
11、结束的两个或两个以上的单一条件组合成一个复合条件,用一个逻辑表达式作为循环控制条件, 把循环体中产生非正常出口的条件语句移到循环体之外。布尔标志变量法:它是利用向非结构化程序中引入一个赋了某个假定值的辅助变量作标志, 并把此辅助变量作为循环控制条件之一, 从而有效地使循环多出口转化为循环单出口终止标志变盘法:在B A SI C 语言的FO R 一N E x T 循环中, 终止标志技术是消除循环体内非正常出口的有效方法. 它是利用循环变量作终止标志, 解决循环体内多出口问题, 变非结构化程序为结构化程序。HIPO(Hiberarchy Plus Input-Process-Output,层次加输
12、入-处理-输出)图是根据IBM公司研制的软件设计与文件编制技术发展而来的。HIPO图采用功能框图和PDL来描述程序逻辑,它由两部分组成:可视目录表给出程序的层次关系体系框图:又称层次图(H图),是可视目录表的主体,用它表明各个功能的隶属关系图例:图形符号说明描述说明:每一框的补充说明IPO图则为程序各部分提供具体的工作细节盘存销售系统工作流程图层次图说明IPO图详细的IPO图例如:某数据流图中有一个“确定保险类别”的加工,指的是申请汽车驾驶保险时,要根据申请者的情况确定不同的保险类别。加工逻辑为:如果申请者的年龄在21岁以下,要额外收费;如果申请者是21岁以上并是26岁以上的女性,适用于A类保
13、险;如果申请者是26岁以下的已婚男性,或者26岁以上的男性,适用于B类保险;如果申请者是21岁以下的女性或26岁以下的单身男性适用于C类保险;除此之外的其他申请者都适用于A类保险。提取问题中的条件:年龄、性别、婚姻。标出条件的取值条件名条件名取值取值符号符号取值数取值数m年龄年龄2121年龄21未婚C类保险且额外收费已婚B类保险且额外收费未婚C类保险已婚D类保险年龄21C类保险收额外收费A类保险B类保险2126年龄21确保保险类别男性女性“检查发货单” 的判定表11234条件发货单金额$500$500=$50060天天60天天$500 60天天5年年3-5年年 5年年3-5 年年 3年年优先分
14、房优先分房非中非中级职称级职称正常分房正常分房正常分房正常分房晚晚 婚婚非晚婚非晚婚晚晚 婚婚非晚婚非晚婚优先分房优先分房不不 分分 房房过程描述语言(PDL-Procedural Description Language)介于自然语言和形式语言之间的一种半形式化语言,是在自然语言基础上加了一些限定,使用有限的词汇和有限的语句来描述加工逻辑。外层用来描述控制结构,采用顺序、选择、重复三种基本结构。内层一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词,其动词含义要具体,尽量不用形容词和副词来修饰。顺序结构A seq Block1 Block2 Block3A end选择结构A
15、 select cond1 Block1A or cond2 Block2A or cond3 Block3A end重复结构A iter until cond Block1A end A iter while cond Block1A end统计空格 seq打开文件读入字符串Totalsum = 0程序体 iter until文件结束程序体end印总数seq 印出空格总数印总数end关闭文件停止统计空格end人机界面设计的任务,就是根据对用户在使用交互式系统时的所作所为,或者是用户想象中的所作所为,或者是他人想象中用户的所作所为的抽象,创建或导出一致的表示界面。设计人机界面要充分考虑到人的因
16、素,如用户的特点、用户怎样学会与系统交互工作、用户怎样理解系统产生的输出信息以及用户对系统有什么期望等。考虑界面的风格,可用的软、硬件技术及应用本身产生的影响。美学规则置用户于控制之下减少用户的记忆负担保持界面一致人机界面模型软件工程师创建的用户模型软件工程师创建的设计模型最终用户对未来系统的假想系统的实现者创建的实现模型人机界面的设计工作应与软件系统的需求分析工作同步进行。它主要包括:通过界面和系统交互的最终用户分析最终用户为完成工作要做的任务分析确定界面的类型任务处理的环境人机交互界面分析过程(1)建立任务的目标和意图;(2)为每个目标和意图制定特定的动作序列;(3)按照在界面上执行的方式
17、对动作序列进行规约;(4)指明系统状态,即执行动作时的界面表现;(5)定义控制机制,即用户可用的改变系统状态的设备和动作;(6)指明控制机制如何影响系统状态;(7)指明用户如何通过界面上的信息解释系统状态;交互界面的设计指南信息显示的设计指南数据输入的设计指南需求分析概念设计逻辑设计物理设计实施运行与维护编码语言编码风格编码的目的是实现人和计算机的通信,指挥计算机按人的操作意图正确工作。程序设计语言是人和计算机之间进行通信的最基本的工具,其特性会影响人的思维和解决问题的方式。分为两大类:低级语言:这两种语言都依赖于相应的计算机硬件。机器语言属于第一代语言汇编语言属于第二代语言 高级语言:第三代
18、程序设计语言利用类英语的语句和命令,尽量不再指导计算机如何去完成一项操作,如BASIC、COBOL和FORTRAN等。第四代程序设计语言比第三代程序设计语言更像英语但过程更弱,与自然语言非常接近,它兼有过程性和非过程性的两重特性,如数据库查询语言、程序生成器等。心理特性语言的心理特性是指影响程序员心理的语言性能,包括歧义性、简洁性、局限性和顺序性、传统性。工程特性从软件工程的观点,编码语言的特性着重考虑软件开发项目的需要。因此对编码有如下要求:可移植性、开发工具的可利用性、软件的可复用性、可维护性。技术特性语言的技术特性对软件工程各阶段都有影响,特别是当确定了软件需求之后,编码语言的技术特性就
19、显得非常重要了,要根据项目的特性选择相应特性的语言。分类:一类是纯面向对象语言,如Eiffel。另一类是混合型面向对象语言,也就是在过程语言的基础上增加面向对象机制,如C+。为使程序容易测试和维护以减少软件的总成本,所选用的高级语言应该有理想的模块化机制,以及可读性好的控制结构和数据结构。为便于调试和提高软件可靠性,应该使编译程序能够尽可能多地发现程序中的错误。为降低软件开发和维护的成本,选用的高级语言应该有良好的独立编译机制。实用标准语言自身的特性 软件的应用领域 软件开发的环境 软件开发的方法 算法和数据结构的复杂性 软件可移植性要求 软件开发人员的知识良好的程序设计风格对保证程序质量的重
20、要性。良好的程序设计风格对面向对象实现来说尤其重要,不仅能明显减少维护或扩充的开销,而且有助于在新项目中重用已有的程序代码。良好的面向对象程序设计风格,既包括传统的程序设计风格准则,也包括为适应面向对象方法所特有的概念而必须遵循的一些新准则。编码风格指一个人编制程序时所表现出来的特点、习惯、逻辑思路等。良好的编码风格可以减少编码的错误,减少读程序的时间,从而提高软件的开发效率。良好的编码风格体现在源程序文档化、数据说明、语句构造、输入和输出及对效率的追求等几个方面。源程序文档化数据说明语句构造满足工程学输入、输出风格效率结构化详细设计,也称为结构化程序设计。结构化详细设计一般只需要用三种基本的逻辑结构就能实现。这三种基本逻辑结构是顺序结构、选择结构和循环结构。在详细设计工具中主要有程序流程图、盒图、PAD图、HIPO图、判定表与判定树和PDL语言等。编码实现要根据应用特点考虑编码语言、编码风格等。人机交互界面设计要遵守美学原则进行交互分析。本周作业:2、奇数组每组要求至少在课程中心论坛发表发起一个帖子,内容不限(课程、技术、疑问等),偶数组每组至少要求在课程中心论坛回复一个帖子,多了不限,欢迎大家共同讨论。3、完成课本P94-95,第3,4,5,6题P94-95第3,4,5,6题