面向对象分析及设计开发文档.doc_第1页
面向对象分析及设计开发文档.doc_第2页
面向对象分析及设计开发文档.doc_第3页
面向对象分析及设计开发文档.doc_第4页
面向对象分析及设计开发文档.doc_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

目录第一部分面向对象基础31.面向对象编程的三大原则32.对象世界协作模式-客户-提供者消息协作模式33.类与类之间的关系及代码实现64.面向对象程序设计的任务135.面向对象系统分析与设计的过程与产出26第二部分需求分析26第三部分系统分析261.系统需求说明272.用例图:283.业务处理过程:294.活动图:29(1)按客户陈述绘制活动图29(2)对活动图进行分块305.基本用例叙述:356.系统时序图:367.系统操作约定:378.创建域模型:389.一个颠覆常规的域模型案例4010.对象消息序列图:40第四部分系统设计方案1:控制台应用程序+无数据库401.系统总体结构设计40(1)业务层设计-设计系统总体类图:402.详细设计:44(1)业务层定义44类声明:44确定类图:49Jackson图49算法流程图493.编码504.测试50第五部分系统设计方案2:控制台应用程序+数据库系统501.业务层设计50(1)每个数据访问对象直接与数据库打交道50(2)增加一个单例对象DBOperation52(3)使用Hibernate框架522.数据层设计54(1)E-R图:54(2)关系模式设计56(3)物理模型设计56第六部分系统总体设计方案3:人机交互界面+业务处理+DBMS571.人机交互界面-表示层设计58(1)状态图:58状态图的概念58订餐系统的状态图:60菜谱状态图:60顾客订单的状态图:61订单的状态图62(2)表示层设计:62(3)表示层的实现:64基于窗体的表示层64基于web页面的表示层642.数据层设计643.业务层设计64(1)单机模型:64(2)分布式模型65C/S模型65B/S模型65基于Web的三层系统体系结构654.系统整体架构66(1)0人机交互界面+业务处理+DBMS具体实施方案:66第七部分系统架构与框架技术66(1)系统体系结构66(2)技术框架Framework66(3)系统体系结构的发展进程67单机版67基于C/S架构的系统体系结构67基于Web的系统体系结构67基于Web的三层系统体系结构67基于Web的四层系统体系结构70第八部分详细设计711.表示层详细设计:712.业务层详细设计:713.数据层详细设计:71第九部分设计原则711.拙劣设计的症状71(1)症状71(2)案例72(3)原因分析72(4)问题解决722.设计原则72(1)单一职责原则72(2)开放-封闭原则72(3)Liskov替换原则72(4)依赖倒置原则72(5)接口分离原则72第十部分设计模式741.设计模式分类74(1)创建型74简单工厂设计模式74工厂方法模式79(3)MFC之工厂模式(C+ & java)85抽象工厂模式86第十一部分系统测试881.测试阶段划分882.测试技术883.测试优先的益处88这是面向对象的世界,客户向服务器提出请求是为服务器分配职责的唯一标准。第一部分 面向对象基础1. 面向对象编程的三大原则封装、继承、多态2. 对象世界协作模式-客户-提供者消息协作模式一、现实中的消息协作模式:面向对象程序的运行,是对现实世界中对象与对象的协作方式的模拟。在现实世界中,消息的发送方与消息的接收方,针对消息而言是地位平等的双方。如下场景1:A希望获知B的姓名在这个场景中,针对于A希望获知B的姓名而互发的消息,可能会出现上述三种现象。1. A问,B答2. A问,B不答(问而不答型)3. A不问,B主动告知。(不问自答型)再如下述场景2:A希望B去做饭。同样存在场景1中存在的现象。1. A请求B做事情,B做事情2. A请求B做事情,B不做(叫做不做型)3. A不请求B做事情,B主动做事情。(不请自做型)在两个场景中的现象2和现象3都体现了A、B双方作为现实世界中的人的行为的自主性。这些现象是现实中协作的普遍现象,A、B对象的协作,其中B的自主动作掺杂了B对A的心理琢磨。B认为A可能会问其什么,或认为A可能会让其做某事,但B这种基于猜测的行为可能使结果适得其反,使本不应该发生的麻烦事情发生,从而使事情处理流程变得更糟。开发计算机软件系统的目的,是为了使事情的处理流程自动化,如果处理流程本身是个紊乱的话,那么计算机软件系统只能加速这种紊乱,因此,在面向对象程序模拟现实世界的消息协作时,采用消息发送方与消息接收方地位不平等的客户-提供者模式来完成协作。二、客户-提供者消息协作模式前提:B拥有A所问问题的知识;B具有A所请求事情的处理能力。但是A不问时,B不主动回答;A不请求B做事情,B不主动做事情。也即,只有当A作为客户,请求B回答问题时,B作为提供者,提供回答问题的服务;只有当A作为客户,请求B做事情时,B作为提供者,提供解决这件事情的服务。B不允许主观去回答问题或主观地做事情。这种屏蔽了B的主观能动性的协作方式称为客户-提供者模式。这样的处理方式,解决了A,B消息协作时自主处理事务的方式,从而使消息协作变得可控。三、客户-提供者消息协作中的约束(1)协作的前提服务提供者B拥有客户A所问问题的知识;B具有A所请求事情的处理能力。(2)对客户的约束客户端对象,作为消息的发送者,作为服务的请求者,不应该发送无理的请求,无理的请求指:服务提供者不具备的行为能力。客户端对象A只能向服务端对象B发出两种类型的消息:消息应该是一个问题,或者一个命令,不能两者都是。(3)对服务提供者的约束消息对应行为的执行者,即,服务提供者。在面向对象程序中,服务提供者应该是谦恭的,当接收消息时,必须提供相应的服务,四、实例:1.顾客到面包店买面包的场景方式1:现实中的场景反映:可见,由于面包师的自动行为使得事情变得很糟。现在,通过客户-提供者模式来实现这个场景:方式2:可见,客户-提供者模式有效地解决了因对象自主行为而导致的业务流程的紊乱过程,使得业务处理过程可控,因此,在面向对象程序模拟现实对象消息协作机制中,客户-提供者模式给我们提供了很好的消息协作模式,这种方式屏蔽了现实世界对象的自主行为,使得面向对象系统秩序稳定,和谐可控,构建了一个完美的软件系统。3. 类与类之间的关系及代码实现 类与类之间的关系及代码表现 /view/53fdfa75a417866fb84a8ed4.html解析UML中类与类之间的五种关系类与类之间的关系,其实质就是类的对象与类的对象之间的关系。对象与对象之间的关系就是提供服务与接受服务的关系。根据对象与对象之间的服务关系存在时间的长短,可以确定类与类之间的关系。通常把类与类之间的关系分为如下五种关系,分别是:泛化关系、依赖关系、关联关系、聚合关系和组合关系。本讲将通过男人、女人、丈夫、妻子、一夜情人、情人、房子、家和孩子这样一个完整的例子来说明这五种关系。一、 泛化关系1.泛化关系的理解泛化关系常与继承关系相提并论,继承关系指子类继承父类的属性和行为;泛化关系则是指将子类的共同属性和行为提取出来,形成更一般的概念,子类相对于一般化概念来讲就是特殊概念。特殊与一般之间的关系就是泛化关系。反过来,由一般到特殊的关系就是继承关系。所以,也讲泛化关系表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系,即,泛化关系是从子类指向父类,与继承或实现的方法相反。泛化关系是一种存在于一般概念与特殊概念之间的分类关系,它只使用在类型上,而不是实例上。2.泛化关系的UML表示方法泛化关系中对应于一般概念的类被称为超类或父类,而特殊概念的类被称为子类。在UML中,泛化关系用一条从子类指向父类的空心三角形箭头来表示。下图表示了丈夫与男人之间的泛化关系,以及一夜情人、情人和妻人与女人之间的泛化关系。3.泛化关系的代码实现泛化关系可以通过类的继承的方法来实现,如上图例子对应的代码:Class NanRen doThing( );Class ZhangFu extends NanRenClass NvRen doThingAtTheSameTime();Class YiYeQingRen extends NvRenClass QingRen extends NvRenClass QiZi extends NvRen二、 依赖关系1.依赖关系的理解对于两个相互独立的对象,当客户端对象负责构建了服务器端对象的实例时,或者客户端为了完成某些职责而需要向服务器端对象发送消息请求服务端对象提供服务时,这时,客户端对象的职责的完成依赖于服务器端对象的服务时,两个对象之间表现为依赖关系。在依赖关系中,客户端对象与服务器端对象关系非常弱,仅在提供服务时发生关系。在依赖关系中,客户端对象称为依赖方,服务器端对象称为被依赖方。2.依赖关系的UML表示方法在UML中,依赖关系用带箭头的虚线来表示,从依赖方指向被依赖方,也即,从客户端对象指向服务器端对象,如下图表示丈夫与一夜情人之间的依赖关系。3.依赖关系的代码实现依赖关系在代码实现上,把服务器端对象作为客户端对象的方法的参数,客户端职责的完成通过对服务器端静态方法的调用来实现。上图示例的代码如下代码实现如下所示:Class zhangfu doThing(YiYeQingRen aYiYeQingRen )/该对象作为方法的输入参数,该对象的作用域为整个程序 aYiYeQingRen.doThingAtTheSameTime();主程序:Public Class Test Main()ZhangFu aZhangFu= new ZhangFu(“LMB”,”30”); ZhangFu bZhangFu=new ZhangFu(“DF”,”30”); YiYeQingRen aYiYeQingRen = new YiYeQingRen(“DZX”,”28”); /该对象的作用域为整个程序 YiYeQingRen bYiYeQingRen = new YiYeQingRen(“DZXM”,”28”); aZhangFu.doThing(aYiYeQingRen); aZhangFu.doThing(bYiYeQingRen); bZhangFu.doThing(aYiYeQingRen);三、 关联关系1.关联关系的理解对于两个相对独立的对象,当一个对象的实例与另一个对象的特定实例存在固定的对应关系时,这两个对象之间为关联关系。与依赖关系相比,关联双方由于存在比较固定的服务与被服务关系,因此,关联关系是一种较依赖关系更强的关系。2.关联关系的UML表示方法在UML中,关联关系用直线来表示,直线连接关联的双方。从关联双方的提供服务与被提供服务的关系来讲,关联双方也存在客户端对象与服务器端对象,提出服务请求的一方为客户端,提供服务的一方为服务器端。下图表示男人与其情人之间存在的关联关系。其UML如下图所示:3.关联关系的代码实现关联关系在代码实现上,关联双方中的服务器端对象表现为客户端对象的方法的局部参数,客户端职责的完成通过对服务器端静态方法的调用来实现。Class zhangfu doThing() QingRen aQingRen=new QingRen();/该对象的作用域只在这个方法中 aQingRen.doThingAtTheSameTime();主程序:Public Class TestZhangFu aZhangFu= new ZhangFu(“LMB”,”30”); /由构造函数决定 aZhangFu.doThing(“DZX” ,”28”); 四、 聚合关系1.聚合关系的理解当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系,聚合是关联关系的一种,是一种较强的关联关系,强调的是整体与部分的关系。2.聚合关系的UML表示方法在UML中,聚合关系用带空心菱形的直线来表示,空心菱形端指向表示整体概念的类,另一端连接的是部分概念的类。西方社会讲究,妻子是丈夫的组成部分,可以用下图来表示。再如,房子与家的关系,房子是家的一个部分,因此,房子与家之间也存在部分与整体关系,可以用下图来表示。3.聚合关系的代码实现聚合关系是通过实例变量来实现这种关系的。Class ZhangFu Private QiZi aQiZi;/该对象的作用域是整个类 doThing() aQiZi.doThingAtTheSameTime(); doOthingThing() aQiZi.doOthingThingAtTheSameTime(); 主程序:Public Class Test Main() ZhangFu aZhangFu= new ZhangFu(“LMB”,”30”,”DZX”,”28”);/由构造函数决定aZhangFu.doThing();aZhangFu.doOtherThing();五、 组合关系1.组合关系的理解当对象A被加入到对象B中,成为对象B的组成部分时,则对象B和对象A之间为整体与部分的关系,B与A之间是聚合关系。如果要求整体生成之前,部分必须已经产生,整体销亡之前,部分必须先销亡,这时对象B与对象A之间的关系就转化为了组合关系。2.组合关系的UML表示方法在UML中,组合关系用带实心菱形的直线来表示,实心菱形端指向表示整体概念的类,另一端连接的是部分概念的类。丈夫、妻子与家之间的组合关系可以用下图来表示。3.组合与聚合在语义上的区别组合是一种更强的聚合关系。不仅强调了整体与部分的关系,而且体现了部分的生存周期依赖于整体的生存期。这一点也正是聚合关系与组合关系的区分点,如果整体销亡了,部分还有存在的意义,则整体与部分之间是聚合关系,如果家与房子之间,家不存在了,房子仍然有价值,那么家与房子之间就是聚合关系。如果整体销亡了,部分存在没有意义,则整体与部分之间就是组合关系,如家与丈夫和妻子之间的关系,家不存在了,则丈夫和妻子无从谈起,因此,丈夫和妻子对于家来讲是组合关系。4.组合关系的代码实现与关联关系一样,组合关系也是通过实例变量来实现这种关系的。Class Jia Private ZhangFu aZhangFu;/作用域为整个类 Private QiZi aQiZi;/作用域为整个类主程序:Public Class Test Main() Jia aJia= new Jia(“LMB”,”30”,”DZX”,”28”);5.聚合与组合在代码实现上的不同组合关系是一种比聚合关系更强的整体-部分关系,在代码实现上都体现为服务器端的对象作为客户端对象的成员变量,但组合关系更强调部分在整体产生前产生,在整体销亡前销亡,这一点主要体现在垃圾回收机制上。在C+编程语言中没有垃圾回收机制,整体销亡后,要求编码将部分销亡,也即释放掉部分占用的存储空间,在Java语言、C#语言中增加了垃圾回收机制,整体销亡后,没有意义的部分对应的对象,由系统提供的垃圾回收机制自动回收,也即,系统释放这些没有意义的对象对应的内存空间。因此,在Java和C#中,聚合关系和组合关系,在代码体现上区分就不明显了,因此,有的文章中,对于聚合关系与组合关系就不再进行细化,而是统一称为聚集关系,也就是把类与类之间的关系分为了四类:泛化、依赖、关联和聚集。六、一个小Baby的问题当一个男人与一个女人发生关系,就有可能有一个小baby产生,这个关系反映在面向对象的类与类的关系中,就是客户端对象负责构建服务器端的对象的实例,这种关系也是一种依赖关系,在代码实现上也表现为客户端的方法的参数。与依赖的另一种情况:客户端对象职责的完成依赖于服务器端提供的服务的依赖关系,不同之处在于,这种情况下的依赖关系,服务器端对象作为客户端对象的方法的返回值的参数出现。丈夫、一夜情人与小baby之间的依赖关系如下:代码实现:Baby的类模板Class Baby Private xb ;丈夫的类模板Class ZhangfuPublic void doThing(YiYeQingRen aYiYeQingRen)/同时体现了方法的多态性 aYiYeQingRen.doThingAtTheSameTime(); Public Baby doThing(YiYeQingRen aYiYeQingRen) /产生的新对象的作用域是整个程序 aYiYeQingRen.doThingAtTheSameTime(); Baby aBaby =new Baby(xb); Return aBaby; 主程序:Public Class Test ZhangFu aZhangFu= new Zhangfu(“LMB”,”30”); YiYeQingRen aYiYeQingRen = new YiYeQingRen(“DZX”,”28”); Baby aBaby; aBaby= aZhangFu.doThing(aYiYeQingRen, n);/一个小Baby产生了,这个小东西的作用域是整个程序。由上分析,可以得到如下对象与对象之间关系的整体结构图。小结:从上分析,可以看出,类与类之间的五种关系,可以分为三类:其中泛化关系为一类,强调由特殊到一般的关系,依赖关系与关联关系为一类,强调服务器端对象为客户端对象提供服务的关系,关联关系强于依赖关系,关联关系中,服务器端对象为客户端对象提供服务的关系更加固定。聚合关系和组合关系为一类,强调的是部分与整体的关系。这些关系表现为面向对象程序实现时代码的不同,因此,发现对象,确定对象与对象之间的关系,即类与类之间的关系,是有必要而且非常重要的。4. 面向对象程序设计的任务本文在介绍面向对象程序运行基础上,介绍了面向对象程序设计的任务及过程,并通过案例进行讲解。几个概念:对象 对象的属性对象的行为 面向对象程序运行静现实抽象建模软件系统对象类类类对象对象的属性类的属性类的属性类的属性对象的属性对象的行为类的行为类的方法类的方法对象的方法UML表示动消息机制客户服务器端客户端对象请求服务器端对象提供某一服务。服务器端对象通过调用自己的方法完成相应的服务。面向对象程序设计任务1.如何找出待开发系统中应有的对象2.如何从对象所具有的众多属性和行为中,找出待开发系统中对象所应该具有的属性集合和行为集合。3.确定对象与对象之间的关系。顾客请求面包师提供面包种类信息1.从实例出发说明:面向对象程序运行的原理,由静到动,调用服务服务器端的方法。(1)给一个程序,演示,说明,有几个类,各自有什么方法。对象之间的消息传递。(2)从代码的角度解释,程序中有几个类,各自有什么方法。对象之间的消息传递就是对服务器端方法的调用。2.从现实角度出发,解释面向对象设计的任务,由动到静,完成为类分配职责的任务。(1)现实的图片,分析图片中的对象的不同类,并说明各类对象具有的相同属性。(2)抽象类模型,类名,类的属性(此时类只具有静态属性)(3)对象之间互发消息,得到客服消息表,得到对象消息交互图,从而转换为服务器端类的方法。完成设计。 知识点介绍一 面向对象程序运行原理1 相关概念2 运行原理:由静到动,协同工作。二 面向对象程序设计任务。1 面向对象程序设计任务:为类分配职责2 面向对象程序设计过程:由动到静,完成设计任务。3 案例一 面向对象程序运行原理1 对象抽象形成类模型静现实世界软件系统1.对象与类(类模型)对象的属性集对象的行为集类的属性集类的方法集类模型的UML表示方法2.类模板与类的实例、类的对象类的属性集类的方法集对象的属性集对象的行为集类模板与类的实例的代码表示方法体会现实中对象与类的概念体会:1.对象的概念2.由对象抽象类3.对象的属性与行为与类的属性与方法对象的行为:对象具有的能力,会做的事情。体会软件系统中类模板与类的对象的关系体会软件系统中类模板与类的对象的关系体会:(1).由类创建对象属性值的不同产生了不同的对象。(2).对象具有行为能力,但现在处于静止状态。(3).类的不同对象具有相同的方法,可以共享方法的实现算法。2 对象与对象之间的互发消息(动,对服务器端方法的调用)动现实世界、软件系统1.对象与对象之间的互发消息消息的发送方客户端对象消息的接收方服务器端对发向服务器端的消息对服务器端对象的方法的调用2.行为的协作3.发给自己的消息对象与对象之间的消息发送:之一:类的抽取之二:发送消息体会:(1).向服务器端发消息,就是向服务器端提出服务请求,调用服务器端对象的方法 (2).对象调用所属类的方法,即产生了对象的行为。之三:发向自已的消息体会:(1)向服务器端发消息,就是向服务器端提出服务请求,调用服务器端对象的方法 (2)对象调用所属类的方法,即产生了对象的行为。之四:行为的协作相互协作,共同推动系统的运行。因此,得到了面向对象程序运行原理:(静) 对象(类) 各司其职 (动) 互发消息 各尽其能(效果) 协同完成任务在介绍面向对象程序设计之前,先介绍几组概念,如下表1所示:1对象2对象与类类的实例或类的对象3对象的行为与类的方法4对象与对象之间的互发消息5消息的发送方客户端对象6消息的接收方服务器端对象7客户端对象向服务器端对象发送消息服务器端对象的方法调用8行为的协作与消息的传递9发向自己的消息自身即是客户端对象又是服务器端对象对象在现实中是一个非常普遍的概念,现实中的一切都是对象,现实中的对象各司其责,通过互发消息,各尽其能,协同完成工作。对象的组成对象名对象的属性对象的行为对具有相同属性集和相同行为集的对象进行抽象,就得到了这些对象所属的类。类的不同对象之间其属性值可以不同,但各个对象的行为算法一样,因此,同一个类的所有对象可以共享算法代码,这些属性和行为可以被看作是新建类的对象的模板,类与对象的关系如同模具与产品之间的关系,类可以创建属于它的新对象。 Robert V.Stumpf, Lavette C.Teague著,梁金昆译. 面向对象的系统分析与设计(UML版) 清华大学出版社,P205-206在面向对象软件开发中,类创建的对象也叫类的实例或者叫做类的对象简称对象。 对象的行为即是对象负责的职责,即抽象为类的方法,对象的行为实现即是类的方法的实现。消息是一个对象要求另一个对象执行其负责的职责的请求,消息的发送方可以被看作是客户端对象,消息的接收方可以被看作服务器端对象。消息从客户端对象发向服务器端对象,即是客户端请求服务器端执行其负责的职责,即是对服务器端对象方法的调用。因此,发送消息,应指明:对象名,消息接收方服务器端对象的标识消息名,即是服务器端对象被请求执行的行为职责名。消息的参数,即,执行相应职责行为所需的数据。在消息中,并没有过多体现客户端的信息。行为的协作就是通过消息的传递来实现的。一类比较特殊的情况:自已发向自己的消息,自身既是客户端对象又是服务器端对象。二 面向对象程序设计任务(为类分配职责,由动到静)(1).对象与对象之间消息传递(动)(2).转化为服务器端对象的方法(静)面向对象程序设计的任务-为类分配职责1 什么是职责?一个对象对另一个对象应尽的义务,或者讲,是一个对象应向其他对象提供的服务。2 如何分配职责?由面向对象程序运行原理可以知道,当客户端向服务器端发送消息时,即,客户端请求服务器端提供服务时,客户端所发送的消息,必须是服务器端能提供的服务,也即对服务器端的方法的调用。反过来,如果客户端向服务器端所发送的消息请求是合乎依据的请求,那么就应该是服务器端应提供的服务,也即,服务器端应具有的方法,由此,可以通过将客户端向服务器端发送的消息请求,转换为服务器端的方法,这就完成了为类分配职责的任务。3 如何确定客户端向服务器端提出的消息请求。为类分配职责的事情被转化为寻找向服务器端发送的合乎情理、合乎工作逻辑的消息,根据什么来确定向服务器端发送的这些消息呢?即,根据与用户交流后形成的用例叙述来确定。4 消息的类型、职责的类型通过把向服务器端发送的消息转化为服务器端的职责、方法来完成为类分配职责,那么消息的类型就决定了职责的类型。客户端向服务器端发送的消息,可以分为如下两类:获知类消息和执行类消息。举例:5. 面向对象系统分析与设计的过程与产出过程中需要一些图形进行交流,但不能滥用图形,不能夸大图形的地位面向对象系统分析与设计的产出只有源代码清单。何时使用图形,要将产生图形与产生代码的成本进行比较,如果产生代码的成本较小,则产生图形的工作可以忽略。第二部分 需求分析第三部分 系统分析系统分析图解如下:(1)系统需求说明书 用例图系统需求说明书:用于描述系统基本功能要求及性能要求 用例图 :用于描述 从用户角度来看,用户参与了系统的哪些基本功能,或者说,用户使用了系统的哪些功能。对于性能没有体现。(2)用例图中每个用例对应的 业务处理过程描述 每个用例的 活动图活动图以用例为单位,对每个用例的业务处理过程描述是绘制 活动图的依据。活动图的绘制 可以用于检验用例对应的业务处理过程的正确性、完整性。活动图一方面要求体现为了完成一项用例活动所需做的动作流的组合,另一方面也要求体现 在完成这项活动时是否有新的对象产生了。第二部分常常为人们使用活动图模型时所忽略,从而导致大家认为活动图不重要的一个重要原因。事实上,活动图的正确性将直接影响到面向对象系统分析与设计时的对象的寻找 类的抽象 方法的抽象等重要环节。这些环节是一些软件工程理论知识 如:模块独立性原则、模块内聚性、 模块间耦合性的 体现, 甚至包括面向对象程序设计的方法的设计原则 都会在活动图中找到其影子。 因此,活动图是一个非常非常重要的模型。 (3)活动图的模块划分 基本用例叙述 基本用例叙述也是面向对象系统分析与设计过程中非常重要的一个模型。基本用例叙述是将系统需求由面向过程叙述 转化为 面向对象思维的一个重要环节。基本用例叙述奠定了整个系统分析与设计的思维方式,采用 面向对象的 客户-服务器 消息请求 思维模式。基本用例叙述打开了采用面向对象思维模式对整个系统进行分析与设计的第一步。(4)基本用例叙述 系统时序图(不完整的消息序列图)如果说基本用例叙述 不能够十分清晰地让你看清你所使用的分析设计思维模式,系统时序图所表现出来了参与者与系统的消息通信,应该当你看到了面向对象的思维方式。系统时序图只反映了系统的参与者 或者说是系统的使用者 与系统之间的消息通信。客观世界是一个丰富多样的世界,面向对象的系统也不甘是一个对象贫瘠的世界。(5)基本用例叙述 系统操作约定(6)系统操作约定 域模型(7)基本用例叙述、系统操作约定 对象消息序列图 系统所对应的 现实的对象 及其通信关系 到此分析结束 (8)对象消息序列图、域模型 业务类图 1. 系统需求说明系统需求说明书:某企业为了方便员工用餐,为餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。企业的任何员工都可以查看菜单和今日特价。系统的顾客是注册到系统的员工,可以订餐(如果未登录,需先登录)、注册工资支付、预约规律的订餐,在特殊情况下可以覆盖预订。餐厅员工是特殊顾客,可以进行备餐、生成付费请求和请求送餐,其中对于注册工资支付的顾客生成付费请求并发送给工资系统。菜单管理员是餐厅特定员工,可以管理菜单。送餐员可以打印送餐说明,记录送餐信息(如送餐时间)以及记录收费(对于没有注册工资支付的顾客,由送餐员收取现金后记录)。顾客订餐过程如下:1. 顾客请求查看菜单;2. 系统显示菜单和今日特价;3. 顾客选菜;4. 系统显示订单和价格;5. 顾客确认订单;6. 系统显示可送餐时间;7. 顾客指定送餐时间、地点和支付方式;8. 系统确认接受订单,然后发送Email给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。系统采用面向对象方法开发,使用UML进行建模。2. 用例图:用例图:OrderingUseCase3. 业务处理过程:顾客订餐过程如下: 顾客订餐顾客系统1. 顾客请求查看菜单;2. 系统显示菜单和今日特价;3. 顾客选菜;4. 系统显示订单和价格;5. 顾客确认订单;6. 系统显示可送餐时间;7. 顾客指定送餐时间、地点和支付方式;8. 系统确认接受订单,然后发送Email给顾客以确认订餐,同时发送相关订餐信息通知给餐厅员工。4. 活动图:(1) 按客户陈述绘制活动图OrderingActyDiagram第一层次做图:完全按照客户描述业务流程绘制。第二层次做图:对顾客的身份进行了确认,使业务流程的完整性更强。这种活动图的做法将目光集中于完成一项活动所需的一系列动作集合上,完全忽视了在这一系列动作中,是否有数据类对象的产生这个问题。(2) 对活动图进行分块对活动图的分块,其实就是对完成这项活动所对应的任务,所需的相关动作的划分,也即,模块的划分。模块划分的原则:模块的独立性。模块分块的优劣通过两个方面来衡量:模块内聚性以及模块间的耦合性。模块内部要求内聚性强,模块间要求耦合松散。模块的内聚性由低到高:偶然内聚,逻辑内聚,时间内聚,通信内聚,顺序内聚,功能内聚。模块间的耦合性控制原则:尽量使用数据耦合,少用控制耦合,限制公共耦合的范围,坚决避免使用内容耦合。对模块划分结果优劣的判断标准:对完成活动的动作的划分效果最终将以方法的形式呈现。在面向对象编程语言中,要求方法的设计要么是回答一个问题,要么是执行一个过程,不能两者都是。这同时也可以作为动作划分的一个依据,如果划分出的一个动作集合,既包括回答问题,也包括执行过程,那么就需要对这个动作集合进一步进行划分。对于回答问题类的方法的设计,其方法的返回值应为问题答案对象的类型;对于执行过程类的方法的设计,其方法的返回值应为void。例如:问题年龄是多大?对应的方法名:getAge(), 方法的返回值为int. 又如:请显示菜单信息。对应的方法名:showMenu(),方法的返回值为void.模块的独立程度是评价设计好坏的重要度量标准。衡量软件的模块独立性使用耦合性和内聚性两个定性的度量标准。内聚性是一个模块内部各个元素间彼此结合的紧密程度的度量。内聚是从功能角度来度量模块内的联系。内聚有如下种类,他们之间的内聚性由弱到强排列为偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。耦合性是模块间互相连接的紧密程度的度量。耦合可以分为下列几种,他们之间的耦合度由高到低排列为内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合。一般较优秀的软件设计,应尽量做到高内聚,低耦合,即减弱模块之间的耦合性和提高模块内的内聚性,有利于提高模块的独立性。模块独立性指每个模块只完成系统要求的独立子功能,并且与其他模块的联系最少且接口简单,两个定性的度量标准耦合性和内聚性。 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差。模块间耦合高低取决于模块间接口的复杂性、调用的方式及传递的信息。 无直接耦合;数据耦合;标记耦合;控制耦合;公共耦合; 内容耦合(低高); 1无直接耦合;2数据耦合指两个模块之间有调用关系,传递的是简单的数据值,相当于高级语言的值传递;3标记耦合指两个模块之间传递的是数据结构,如高级语言中的数组名、记录名、文件名等这些名字即标记,其实传递的是这个数据结构的地址; 4控制耦合指一个模块调用另一个模块时,传递的是控制变量(如开关、标志等),被调模块通过该控制变量的值有选择地执行块内某一功能。; 5公共耦合指通过一个公共数据环境相互作用的那些模块间的耦合。公共耦合的复杂程序随耦合模块的个数增加而增加。6内容耦合:这是最高程度的耦合,也是最差的耦合。 当一个模块直接使用另一个模块的内部数据,或通过非正常入口而转入另一个模块内部。 内聚性又称块内联系。指模块的功能强度的度量,即一个模块内部各个元素彼此结合的紧密程度的度量。若一个模块内各元素(语名之间、程序段之间)联系的越紧密,则它的内聚性就越高。 偶然内聚;逻辑内聚;时间内聚;通信内聚;顺序内聚; 功能内聚(低高)1偶然内聚指一个模块内的各处理元素之间没有任何联系。 2逻辑内聚指模块内执行几个逻辑上相似的功能,通过参数确定该模块完成哪一个功能。3时间内聚:把需要同时执行的动作组合在一起形成的模块为时间内聚模块。4通信内聚指模块内所有处理元素都在同一个数据结构上操作(有时称之为信息内聚),或者指各处理使用相同的输入数据或者产生相同的输出数据。5顺序内聚指一个模块中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素输出就是下一功能元素的输入。6功能内聚:这是最强的内聚,指模块内所有元素共同完成一个功能,缺一不可。与其他模块的耦合是最弱的。耦合性与内聚性是模块独立性的两个定性标准,将软件系统划分模块时,尽量做到高内聚低耦合,提高模块的独立性,为设计高质量的软件结构奠定基础根据上述原则,对“订餐”用例这项活动所对应的动作 进行分块。整体分为两个部分:1.显示菜单和今日特价。2.订餐对第二部分继续进行分块,分成对用户身份验证部分和选菜部分。选菜部分包括:交互式选菜过程、系统生成订单、将订单通知给员工和顾客。这样的划分方式,形成了对选菜的一种划分方案。第一方案:将整个选菜,生成订单,通知顾客与餐厅员工作为一个整体。考虑:是否对方案1中的选菜过程和生成订单这一模块再继续划分?方案二:将选菜过程分成一部分,生成订单与通知顾客和餐厅员工分为一部分。增加新对象顾客订单,对两部分进行耦合。方案三:将选菜过程分成一部分,生成订单分为一个部分,通知顾客和餐厅员工分为一部分。新对象订单对确认订单与通知顾客和餐厅员工两部分进行耦合。方案3,通过活动的分块,使得各个模块内聚性强,模块之间耦合性松散,提高了模块的独立性。所以优先方案3。方案3的选择也符合面向对象中对方法的要求:方法要么是回答一个问题,要么是执行一个过程操作,不能两者兼是。也即,返回值要么是数据对象,要么是空。5. 基本用例叙述: “顾客订餐”用例的基本用例叙述用例名:Ordering Meals参与者:Customer, Sealer类型基本前提条件与工资系统的连接后置条件订单已生成,订单与顾客关联起来,订单与餐厅员工关联起来。特殊需求顾客在提交数据后,系统3秒内给予响应事件流描述(处理过程交互的描述) 参与者操作系统响应1当顾客准备订餐时用例开始。2顾客请求系统提供显示菜单服务3系统显示菜单。系统显示今日特价4顾客请求系统提供选菜服务5系统生成顾客订单6顾客请求系统提供订餐服务7系统生成订单8用例结束候选事件流(异常)参与者操作系统响应1顾客无法登录系统1指示错误,未注册用户,返回事件流中第4步。6. 系统时序图:系统时序图也称为系统消息序图,是一个不完整的消息序列图,它的作用是将系统边界外 事件的发起者使用系统的功能,以消息的形式请求系统处理,但系统内部如何处理,现在还没有分析。因此,系统时序图是一个不完整的消息序列图。7. 系统操作约定:系统操作约定用于描述当系统接受外部参与者的消息请求时,对每个消息如何响应,也即,当系统接收到外部参与者的消息时,系统应该做些什么响应,做些什么事情,或者应该通知其他的哪个对象去做什么事情。“顾客订餐”用例的基本用例叙述事件流描述(处理过程交互的描述) 参与者操作系统响应系统操作约定1当顾客准备订餐时用例开始。系统其他对象2顾客请求系统提供显示菜单服务3系统显示菜单。系统显示今日特价系统显示菜单和今日特价。?提供显示菜单和今日特价的服务。4顾客请求系统提供选菜服务5系统生成顾客订单系统核实顾客身份;?提供核实顾客身份信息的服务。系统生成顾客订单?提供选菜服务,生成顾客订单。6顾客请求系统提供订餐服务7系统生成订单系统生成订单?提供订餐服务,生成订单。系统分发订单通知?提供订单分发服务。8用例结束问题回答:“顾客订餐”用例的基本用例叙述事件流描述(处理过程交互的描述) 参与者操作系统响应系统操作约定1当顾客准备订餐时用例开始。系统其他对象2顾客请求系统提供显示菜单服务3系统显示菜单。系统显示今日特价系统显示菜单和今日特价。菜谱提供显示菜单和今日特价的服务。4顾客请求系统提供选菜服务5系统生成顾客订单系统核实顾客身份;顾客信息表提供核实顾客身份信息的服务。系统生成顾客订单选菜控制器提供选菜服务,生成顾客订单。6顾客请求系统提供订餐服务7系统生成订单系统生成订单订单控制器提供订餐服务,生成订单。系统分发订单通知订单控制器提供订单分发服务。8用例结束8. 创建域模型:如图是Jackson的面向对象分析方法中,创建问题域模型在整个系统分析过程中所处的位置图示。域模型用于描述问题域中的对象模型,包括,问题域中的实体对象,以及对实体对象的信息描述的业务实体对象,以及发生在问题域中的过程,过程也被视为一个对象来看待。域模型是一个真实的客观的问题域中对象,以及对象与对象之间的关系的反映。在域模型中,用不同的符号表示不同种类的对象,如:实体对象、业务实体对象、过程类对象,都需要分别用不同的符号来表示。这样才能充分展现客观现实对象的多样性,达到了对问题域所涉及的各类对象的真实反映的效果。在常用的建模工具Rational Rose中,关于域模型中对象的种类非常丰富,有Actor, Boundary, Business Actor, Business Entity, Business Event, Business Goal, Business Worker,

温馨提示

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

评论

0/150

提交评论