软件工程及实践[窦万峰]第5章 软件详细设计_第1页
软件工程及实践[窦万峰]第5章 软件详细设计_第2页
软件工程及实践[窦万峰]第5章 软件详细设计_第3页
软件工程及实践[窦万峰]第5章 软件详细设计_第4页
软件工程及实践[窦万峰]第5章 软件详细设计_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、5 . 1 结构化详细设计结构化详细设计5 . 2 结构化设计工具结构化设计工具5 . 3 人机界面设计人机界面设计5 . 4 数据库设计数据库设计5 . 5 面向对象精化设计面向对象精化设计5 . 6 编编 码码结构化程序设计的理念是在20世纪60年代由dijkstra等人提出并加以完善的。结构化的程序一般只需要用3种基本的逻辑结构就能实现,即顺序结构、选择结构和循环结构,如图5-1所示。5.2.1 程序流程图程序流程图程序流程图又称为“程序框图”,是goldstine于1946年首先采用的。它是历史最悠久,使用最广泛的描述软件设计的方法,能直观地描述过程的控制流程,便于初学者掌握。其中较常

2、用的一些符号如图5-2所示,方框表示一个处理步骤,菱形代表一个逻辑条件,箭头表示控制流向。注意,程序流程图中使用的箭头代表控制流,而不是数据流。盒图是由nassi和shneiderman提出的,所以又称为“n-s图”,其基本描述符号如图5-3所示。pad图(problem analysis diagram,问题分析图)自1973年由日本日立公司发明以后,已得到一定程度的推广。它是由程序流程图演化而来,用二维树形结构的图表示程序的控制流,将这种图翻译成程序代码比较容易。图5-4给出pad图中的基本描述符号。pad图的主要优点如下。(1)使用表示结构化控制结构的pad符号设计出来的程序必然是结构化

3、程序。(2)所描绘的程序结构十分清晰,图中最左边的竖线是程序的主线,即第1层结构。(3)表现的程序逻辑易读、易懂且易记。pad图是二维树形结构的图形,程序从图中最左竖线上端的节点开始自上而下,从左向右顺序执行,遍历所有节点。(4)容易将pad图转换成高级语言源程序,这种转换可用软件工具自动完成。从而可省去人工编码的工作,有利于提高软件可靠性和软件生产率。(5)既可用于表示程序逻辑,又可用于描绘数据结构。pad图的符号支持自顶向下,逐步求精方法的使用。开始时设计者可以定义一个抽象的程序,随着设计工作的深入使用def符号逐步增加细节,直至完成详细设计,如图5-5所示。可视目录表由体系框图、图例和描

4、述说明3个部分组成。具体描述如下。(1)体系框图。(2)图例。(3)描述说明。【案例【案例5.1】 盘存盘存/销售系统的销售系统的hipo图图应用hipo法对盘存/销售系统进行分析,得到如图5-6所示的工作流程图。分析此工作流程图,可得如图5-7所示的可视目录表,其中图5-7(a)所示为系统的层次图;图5-7(b)所示为后面ipo图的图例。描述说明如表5-0所示。号 码1.0.01.1.0..0说 明处理订货,维护盘存文件,并且产生发货单、包装单、货运单、顾客付款收据、盘存与销售报表顾客订单检查,核对顾客赊欠金额,产生销售报表用工作文件的盘存项目号,对顾客订单

5、进行核对和排序以地区和人员为单位编制销售报表,并计算销售佣金检验顾客赊欠金额计算折扣,确定支付项目处理盘存管理报表、顾客付款收账、发货、包装和托运概要ipo图用于表达对一个系统,或对其中某一个子系统功能的概略表达,指明在完成某一功能框规定的功能时需要哪些输入、哪些操作和哪些输出。图5-8所示为表示销售/盘存系统第2层的对应h图中1.1.0框的概要ipo图。在概要ipo图中,没有指明输入处理输出三者之间的关系,用它进行下一步的设计是不可能的。所以需要使用详细ipo图用于指明上述三者之间的关系,其图形与概要ipo图一样,但输入和输出最好用具体的介质和设备类型的图形表示。图5-9所示为销售/盘存系统

6、中对应h图中1.1.2框的详细ipo图。【案例【案例5.2】 确定保险类别确定保险类别(1)提取问题中的条件,包括年龄、性别和婚姻。(2)标出条件的取值,表5-1所示为条件值。条 件 名年龄性别婚姻取 值年龄2121年龄26年龄26男女未婚已婚符 号cylmfse取 值 数 mm1=3m2=2m3=2(3)计算所有条件的组合数n。(4)提取可能争取的动作或措施,适用于a类保险,b类保险,c类保险,以及额外收费共4种。(5)制做判定表,如表5-2所示。年龄性别婚姻a类保险b类保险c类保险额外收费1cfs2cfe3cms4cme5yfs6yfe7yms8yme 9lfs10lfe11lms12lm

7、e(6)完善判定表。初步的判定表可能不完善,表现在以下几个方面。 缺少判定到中年采取的动作,如问题陈述中若没有“除此之外导致”第9和第10两列无法选取,则应该补充完整。 有冗余的列,两个或多个规则中具有相同的动作,并且按所对应的各个条件组合中有取值无关的条件。如第1列和第2列,第5列和第6列,第9列和第10列,第11列和第12列都与第3个条件“婚姻”没有关系,因此可合并,合并后如表5-3所示。年龄性别婚姻a类保险b类保险c类保险额外保险1cf3cms4cme5yf7yms8yme9lf11lm判定树是判定表的变形,一般情况下比判定表更直观,并且易于理解和使用。与判定表5-3等价的判定树如图5-

8、10所示。 外层:用于描述控制结构,采用顺序、选择和重复3种基本结构。 内层:一般采用祈使语句的自然语言短语,使用数据字典中的名词和有限的自定义词。其动词含义要具体,尽量不用形容词和副词修饰。以下是pdl语言的3种形式。(1)顺序结构:a seq block1 block2 block3a end(2)选择结构:a select cond1 block1a or cond2 block2a or cond3 block3a end(3)重复结构:a iter until cond block1a end a iter while cond block1a end【案例【案例5.3】 统计单词数

9、目统计单词数目以下是一个用pdl语言描述的统计单词数目的例子:统计空格 seq打开文件读入字符串totalsum = 0程序体 iter until文件结束程序体end打印总数seq 打印出空格总数打印总数end关闭文件停止统计空格end5.3.1 界面分析与设计界面分析与设计1美学规则美学规则在有关界面设计的著作中,theo mandel创造了3条黄金原则(1)置用户于控制之下(2)减少用户的记忆负担。(3)保持界面一致。2人机界面分析人机界面分析人机界面的设计工作应与软件系统的需求分析工作同步进行,主要包括如下几个过程。(1)通过界面和系统交互的最终用户分析。(2)最终用户为完成工作要做的

10、任务分析。(3)确定界面的类型。(4)任务处理的环境。界面分析的过程如图5-11所示。用户特性度量与期望的用户使用模式,以及观测到的用户群体能力有关,主要的衡量标准如下。(1)用户使用的频度:即是否经常使用系统。(2)用户是否能够自由选用界面:所有的界面都应当是良好的。(3)用户对计算机的熟悉程度:对计算机的熟悉程度决定了使用户达到熟练程度需要多少训练。(4)用户知识:有些用户已有相当多的计算机编程和操作的知识,他们需要一种灵活、可编程或包含命令语言的界面。(5)用户思维能力:这是对用户的综合知识和智力的衡量。(6)用户的生理能力和技能:主要指人的视觉、听觉、认知及记忆等方面的特点,因此应该在

11、这一方面去收集信息。界面设计过程的步骤可以简述如下。(1)建立任务的目标和意图。(2)为每个目标和意图制定特定的动作序列。(3)按照在界面上执行的方式对动作序列进行规约。(4)指明系统状态,即执行动作时的界面表现。(5)定义控制机制,即用户可用的用于改变系统状态的设备和动作。(6)指明控制机制如何影响系统状态。(7)指明用户如何通过界面上的信息解释系统状态。1交互界面的设计指南交互界面的设计指南(1)各种交互形式应使用一致的格式。(2)提供有意义的反馈信息。(3)在执行有较大破坏性的动作前要求确认。(4)允许取消大多数操作,即支持undo和redo功能。(5)减少在动作间必须记忆的信息数量。(

12、6)提高交互的效率。(7)允许错误。(8)按功能对动作分类并设置屏幕布局。(9)提供语境相关的帮助机制。(10)用简单的动词或动词短语命名命令。2信息显示的设计指南信息显示的设计指南(1)可以采用多种不同的方式显示界面信息,如文字、图形、声音、颜色、分辨率、大小和位置等。(2)只显示与当前语境有关的信息。(3)不要用信息将用户包围。(4)使用一致的标记、标准的缩写和可预测的颜色。(5)允许用户维持可视化的语境。(6)产生有意义的出错信息。(7)使用格式化的文本帮助理解。(8)使用窗口分隔不同类型的信息。(9)优先采用“模拟”的方式显示信息。(10)有高效的显示空间。3数据输入的设计指南数据输入

13、的设计指南(1)减少用户输入动作数量。(2)消除冗余输入。(3)维护数据输入和信息显示的一致性。(4)交互应该是灵活的。(5)在当前动作的语境中使不适合的命令不起作用。(6)让用户控制交互流。(7)允许用户自定义输入。(8)为所有的输入动作提供帮助。【案例【案例5.4】 cad系统中绘制圆弧的操作命令序列设计系统中绘制圆弧的操作命令序列设计圆弧绘制的基本参数包括圆心(center)、半径(radius)、圆心角(angle)、弦长(chord of length)、切线方向(direction)、起点(start)和终点(end),根据参数的不同和次序,绘制圆弧可以有如下10种方法。(1)3点

14、绘制圆弧。(2)起点圆心终点。(3)起点圆心圆心角。(4)起点圆心弦长。(5)起点终点圆心角。(6)起点终点切线方向。(7)起点终点半径。(8)圆心起点终点。(9)圆心起点圆心角。(10)圆心起点弦长。因此设计绘制圆弧的操作命令序列如下:command:arc或通过菜单或工具选择绘制圆弧命令。提示:指定圆弧起点,或圆心:(给定起点)。提示:指定圆弧第2点,或圆心/圆弧终点:(给定第2点)。提示:指定圆弧的终点:(给定第3点)。上述是通过3点绘制圆弧,若要通过起点和圆心绘制圆弧,则命令序列如下。command:arc或通过菜单或工具选择绘制圆弧命令。提示:指定圆弧起点,或圆心:(指定起点)。提示

15、:指定圆弧第2点,或圆心/圆弧终点:(指定圆心)提示:指定圆弧的圆心点:(指定圆心点)。提示:指定终点,或圆心角/弦长:(指定弦长)。提示:指定圆弧的弦长:(给定弦长)。若要以圆心开始绘制圆弧,则用下列的操作命令序列。command:arc或通过菜单或工具选择绘制圆弧命令。提示:指定圆弧起点,或圆心:(指定圆心)。提示:指定圆弧的圆心点:(给定圆心点)。提示:指定圆弧的起点:(给定第3点)。提示:指定圆弧的终点,或圆心角/弦长:(指定圆心角)。提示:指定圆心角:(给定圆心角)。1需求分析需求分析2概念设计概念设计(1)数据库设计各阶段的任务相对单一化,设计复杂程度得到降低,便于组织管理。(2)

16、概念模式不受特定dbms的限制,也独立于存储安排,所以比通过逻辑设计得到的模式更为稳定。(3)概念模式不包含具体的dbms所附加的技术细节,更容易为用户所理解,所以能准确地反映用户的信息需求。3逻辑设计逻辑设计4物理设计物理设计物理设计可分如下5步完成,前3步涉及物理结构设计;后两步涉及约束和具体的程序设计。(1)存储记录结构设计(2)确定数据存放位置(3)存取方法的设计(4)完整性和安全性考虑(5)程序设计5实施阶段实施阶段(1)建立实际数据库结构。(2)装入试验数据对应用程序进行调试,试验数据可以是实际数据,也可由手工,或随机数发生器生成。(3)装入实际数据,进入试运行状态。6数据库运行与

17、维护数据库运行与维护(1)维护数据库的安全性与完整性(2)监测并改善数据库运行性能(3)根据用户要求对数据库现有功能进行扩充。(4)及时改正运行中发现的系统错误。5.5.1 设计模型精化设计模型精化1泛化关系泛化关系泛化是在多个概念中识别共性,以及定义超类(普遍概念)与子类(具体概念)关系的活动,此活动对概念类进行层次分类。例如,在pos机系统中的cashpayment,creditpayment 和chequepayment的概念很相似,这时就可以将它们组织成泛化-特化层次结构,如图5-12所示。通过以上原则对pos机系统的payment类进行划分,结果如图5-13所示。2关联类关联类可以使

18、用一个关联类servicecontract用于拥有属性merchantid,如图5-14所示。store和authorizationservice类都与servicecontract相关联,这就表示servicecontract类依赖于两者之间的关系,可以将merchantid看做是与store类和authorizationservice类之间的关联所相关的属性。3聚合关系和组合关系聚合关系和组合关系在pos机系统中,saleslineitems可以被视为sale的组成部分;同样productcatalog是productdescriptions的一个组成,如图5-15所示。4时间间隔时间间隔

19、例如,pos机系统在初始设计时,saleslineitems与productdescriptions关联,记录了销售项的价格。在精化过程中,需要关注与信息和合同等相关的时间间隔问题。可以采用两种方法解决此问题,一是可以在productdescriptions中保存当前价格,仅将销售发生时的价格写入saleslineitem;二是将一组productprices与productdescriptions关联,每个productprices关联适用的时间间隔。这样就可以记录所有的历史价格和未来计划的价格,如图5-16所示。5使用包使用包例如,在pos机系统领域模型中包的结构如图5-18所示。prod

20、ucts包如图5-18所示。1层次模型层次模型依赖线可以由一个包发出,如在pos机系统中从sale包指向posruleenginefacade类,从domain包指向log4j包,如图5-19所示。2层次模型中的设计模式层次模型中的设计模式架构性的层次模型用于指导定义大尺度的分块,诸如外观、控制器和观察者这样的微观架构设计模式,则用于设计层和包之间的连接。某些包和层不仅是感观上的一组事物,事实上它们是具有行为和接口的子系统。pricing包不是一个子系统,它仅把定价时用到的工厂和策略组织在一起。然而persistence、posruleenginefacade和jess包是子系统,它们具有内聚

21、职责的独立引擎。子系统可以用构造型标志,如图5-20所示。(1)外观和控制器。例如,在pos机系统中既可以通过外观模式,又可以用控制器模式实现processsaleframe对象和领域层对象的交互,如图5-21所示。(2)模型-视图分离和“向上”通信。例如,在pos机系统中如图5-22所示,在ui层中增加了uifacade。从而为gui对象增加了一层间接性的普通对象,用于在gui变化时提供防止变异,并且当需要从下面向上推的通信模型时也使用uifacade。1将不相关的类型分离出去将不相关的类型分离出去例如,假定在包com.foo.service.persistence中定义了持久服务子系统,在

22、此包中有两个非常通用的工具jdbcutilties和sqlcommand。如果它们是与jdbc一起工作的通用工具,则可以在任何使用jdbc的场景且独立于持久性服务子系统使用这些类。因此最好的设计是将这些类型放入单独的包中,如图5-23所示。 2使用工厂模式减少对具体包的依赖使用工厂模式减少对具体包的依赖减少对其他包中具体类的依赖是提高包的稳定性的一个途径。例如,在pos机系统中sales、payment和persistence包之间的依赖,如图5-24所示。为提高sales和persistence包的长期稳定性,不能显式地创建定义于其他包中的具体类,如图5-25中payments包中的cred

23、itpayment类。例如,可以使用工厂对象创建实例用于减少对具体包的依赖程度。以pos机系统中的处理销售用例为例设计makenewsale操作,如图5-26所示。本例包括货号id和数量qty,所以这次操作为enteritem(id,qty),如图5-27所示。商品输入完成后就可以进行结束商品输入操作,本例用到系统操作endsale(),如图5-28所示。结束销售后就要执行获取总额的操作,由控制器发出gettotal()操作并要求返回总额tot。方法的具体实现如图5-29中的注释所示。总额计算得出后就可以进行makepayment()操作,如图5-30所示。最后是计算找零的系统操作,将sale

24、对象与payment对象相结合,如图5-31所示。1可见性设计可见性设计例如,在pos机系统中控制器类register中有productcalatog类的对象,如下所示:class register private productcalatog catalog;public void enteritem(itemid,qty)desc=catalog.getproductdesc(itemid);参数可见性是指一个对象是另一个对象中方法的参数。例如,在sale类中makelineitem方法的参数中有productdescription对象作为参数,如下所示:class salepublic

25、void makelineitem(productdescription desc,int qty)sl=new saleslineitem(desc,qty);局部可见性是指在一个类对象的方法中有另一个类的对象作为其方法的局部变量。例如,在控制器类register中的enteritem方法中有productdescription的对象作为其局部变量,如下所示:class register public void enteritem(itemid,qty)productdescription desc;desc=catalog.getproductdesc(itemid);2类图的细化类图的细

26、化类图的设计是以交互图的设计为基础的,其中的元素也是从交互图中抽象提取出来的。通过交互图中对象之间的交互,找出对象所属的类及类之间的关系。例如,交互图的分析得到如图5-32所示的类图。通过对交互图中对象之间消息的交互进行分析和细化,可以得到类图中的属性和方法。例如,图5-33中随着通过各个对象之间具体消息的交互实现enteritem的系统操作,可以细化register类和sale类中的方法。当然,对类图进行分析的时候,也必须理解类图和类之间的关系是如何通过映射得到具体的实现类的,这样更加有利于类图的正确细化。register映射的代码为:public class registerprivate

27、 productcatalog catalog;private sale currentsale;public register(productcatalog pc)public void endsale()public void enteritem(itemid id,int qty)public void makenewsale()public void makepayment(money cashtendered)【案例【案例5.5】 atm系统精化设计系统精化设计下面对atm系统的类进一步精化,将atm系统分为3个逻辑部分,即atmclient、atmserver和accountservice。定义了两个接口itransactionmanager和iaccount,用于支持这3个部分相互分离和依赖关系,如图5-34所示。进一步细化3个逻辑部分的类图,构建它们的方法,当然也可以通过顺序图分析得到。atmclient部分精化的类图如图5-35所示。atmserver部分精化的类图如图5-36所示。accountservice部分精化的类图如图5-37所示。进一步利用精化的类建立取款顺序图,分析实现中还需要补充哪些类,以及每个类需要提供什么样的职责,即方法。atmclient部分精化后的取款顺序图如图5-38所示。atmserver部分精

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论