第10章面向对象的系统设计-2.课件电子教案_第1页
第10章面向对象的系统设计-2.课件电子教案_第2页
第10章面向对象的系统设计-2.课件电子教案_第3页
第10章面向对象的系统设计-2.课件电子教案_第4页
第10章面向对象的系统设计-2.课件电子教案_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

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

文档简介

1、第10章 面向对象的系统设计徐徐 天天 宇宇10.1.2详细设计详细设计 l系统详细设计阶段的主要任务是确保设计系统详细设计阶段的主要任务是确保设计方案能够为后续实施活动提供详细明确的方案能够为后续实施活动提供详细明确的依据。依据。l对类和类的相互关系进行详细的定义、以对类和类的相互关系进行详细的定义、以及如何用具体的算法和数据结构来表示和及如何用具体的算法和数据结构来表示和实现是此阶段的具体内容。实现是此阶段的具体内容。1.设计模式的使用设计模式的使用l设计模式是进行应用系统设计时可复用的设计模式是进行应用系统设计时可复用的惯用模式,设计模式总结了常用问题的解惯用模式,设计模式总结了常用问题

2、的解决方法,它使设计人员可以共享已有的设决方法,它使设计人员可以共享已有的设计经验,提高设计效率和质量。计经验,提高设计效率和质量。 l对于面向对象的对于面向对象的Web应用系统设计,目前应用系统设计,目前主要使用的设计模式是主要使用的设计模式是MVC MVC设计模式设计模式 l模型模型-视图视图-控制控制(model-view-control,简,简称称MVC)结构是目前最常见的结构是目前最常见的J2EE应用所应用所基于的体系结构,基于的体系结构,MVC主要适用于交互主要适用于交互式的式的Web应用,应用, MVC结构结构l视图视图(View)显示显示Model的数据,提交的数据,提交由由C

3、ontroller提供的数据。提供的数据。l模型模型(Model)维护应用程序的状态和数维护应用程序的状态和数据,可以接受来自据,可以接受来自View的查询并做出的查询并做出响应。同时当响应。同时当Model的数据发生变化的数据发生变化时,它把变化通知给时,它把变化通知给View , View根根据据Model的数据发生来更新自己。的数据发生来更新自己。l控制器控制器(Controller)定义了抽象的业务定义了抽象的业务逻辑,用于控制业务流程。逻辑,用于控制业务流程。 用于描述用于描述Model如何对用户的动作做出反应,如何对用户的动作做出反应,即处理事件。即处理事件。MVC关系图MVC在在

4、 Web系统中的应用系统中的应用 l电子商务系统,适合采用电子商务系统,适合采用MVC体系结构。体系结构。l可以将一个应用的对象分为三类。可以将一个应用的对象分为三类。l一类就是负责显示的对象,一类就是负责显示的对象,l一类对象包含商业规则和数据,一类对象包含商业规则和数据,l一类就是接收请求,控制商业对象去完成一类就是接收请求,控制商业对象去完成请求。请求。MVC的优点的优点 l1)松散的耦合;松散的耦合;l2)并行的开发;并行的开发;l3)可扩展性;可扩展性;l4)可重用性可重用性;l5)模块的有效性;模块的有效性;l6)模型的可移植性模型的可移植性: MVC 体系结构的不足体系结构的不足

5、 l1)理解困难,耗费时间;理解困难,耗费时间;l2)增加了系统结构和实现的复杂性;增加了系统结构和实现的复杂性;l3)视图与控制器间过于紧密的连接。视图与控制器间过于紧密的连接。 设计模式的选择与应用l分析类分析类+设计模式设计模式设计类设计类l定义设计类的第一步就是根据项目特点选定义设计类的第一步就是根据项目特点选择将要采用的设计模式。设计模式的选择择将要采用的设计模式。设计模式的选择要考虑到该模式对应的语言和环境,以及要考虑到该模式对应的语言和环境,以及模式的适用范围。模式的适用范围。l基于基于JSP 开发网站时,通常有两种设计开发网站时,通常有两种设计模式,称为模式,称为Model1

6、和和Model2 。 Model1和Model2lModel1:通过一组:通过一组JSP的结合制作出来的结合制作出来的,是以的,是以JSP为中心的设计模式。为中心的设计模式。lModel2:是采用:是采用MVC架构的设计模式。架构的设计模式。Model1lModel1模式模式其实还可以再分为两种,其实还可以再分为两种,l一种是完全使用一种是完全使用JSP来开发,来开发,l另外一种则是使用另外一种则是使用JSPJavaBean的设的设计,计,Model1-完全使用JSP开发系统l(1)完全使用)完全使用JSP开发系统。开发系统。l 优点是:优点是:l l)开发时程缩短)开发时程缩短;。l 2)小

7、幅度修改非常容易)小幅度修改非常容易;Model1-完全使用JSP开发系统l缺点:缺点:l l)程序可读性降低)程序可读性降低;l 2)程序重复利用性降低)程序重复利用性降低;2)JSPJavaBean架构的Model1 l进行快速及小型的项目开发具有非常大的优势,进行快速及小型的项目开发具有非常大的优势,l将部分可以重复利用的程序代码抽出来写成将部分可以重复利用的程序代码抽出来写成JavaBean,当用户送来一个需求时,通过,当用户送来一个需求时,通过JSP调用调用JavaBean负责相关数据存取、逻辑运算等负责相关数据存取、逻辑运算等的处理,最后将结果回传到的处理,最后将结果回传到JSP显

8、示结果。显示结果。l这样,不同的这样,不同的JSP可以调用许多共享性的程序代可以调用许多共享性的程序代码,减少编写重复程序代码的工作,增加开发效码,减少编写重复程序代码的工作,增加开发效率。率。JSPJavaBean架构JSPJavaBean架构的Model1l但是这种方式缺乏流程控制,缺少了但是这种方式缺乏流程控制,缺少了MVC中的中的Controller去控制相关的流程,去控制相关的流程,Model2lModel2就是采用就是采用MVC架构的开发模式。架构的开发模式。lModel代表的是应用程序的应用逻辑;代表的是应用程序的应用逻辑;lView是系统的显示接口;是系统的显示接口;lCont

9、roller是提供应用程序的处理过程控制是提供应用程序的处理过程控制MVC设计模式l基于基于Bean的的MVC模型模型l可以利用可以利用JavaBean实现,也可以利用实现,也可以利用EJB实现实现,分别构成的系统是分别构成的系统是lJavaBean(M)+ JSP(V)+Servlet(C)lEJB(M)+ JSP(V)+Servlet(C)MVC设计模式JavaBean(M)+ JSP(V)+Servlet(C)Struts框架框架 l Struts是较好的是较好的JSP Framework Struts框架框架 2.设计设计类设计设计类 l在设计阶段定义的类,称它们为设计类。在设计阶段定

10、义的类,称它们为设计类。l识别设计类可以从分析阶段定义的分析类入识别设计类可以从分析阶段定义的分析类入手手l要具体设计每个类的内容,包括为每个类设要具体设计每个类的内容,包括为每个类设计操作、属性、关系、状态和设计类的特殊计操作、属性、关系、状态和设计类的特殊需求。需求。 定义类的属性定义类的属性 l设计类的属性时有些内容是必须要定义的,设计类的属性时有些内容是必须要定义的,有些内容是可选的。有些内容是可选的。l必须定义的内容有:必须定义的内容有:l(1) (1) 属性的数据类型。属性的数据类型。l(2(2)属性的可见性)属性的可见性属性命名 l属性名的一般形式属性名的一般形式: :l att

11、ributeName attributeNamel首先应命名属性。首先应命名属性。l属性应该以一致的风格命名属性应该以一致的风格命名l属性命名与类命名的原则相似,使用属性命名与类命名的原则相似,使用2-32-3个英文单词,首单词的首字母小写个英文单词,首单词的首字母小写, ,其他其他大写,意义要明确。大写,意义要明确。属性名称“不好的不好的”名字名字“好的好的”名名字字问问 题题FrNamefirstName属性名称中不要使用缩写属性名称中不要使用缩写firstnamefirstName大写第个词的首字母会大写第个词的首字母会使属性名称更易阅读使属性名称更易阅读personFirstNamef

12、irstName这依赖于属性的上下文,这依赖于属性的上下文,但如果这是但如果这是“Person”类的属性类的属性, 包含包含“person”只会增加名只会增加名称的长度而并不提供任称的长度而并不提供任何价值何价值属性名称 hTTPconnectionhttpConnection缩略词应该小写缩略词应该小写firstNamestringfirstName 指明属性的类型指明属性的类型本例本例中是中是“string”,会把名,会把名称和类型耦合起来。如称和类型耦合起来。如果类型发生了变化(也果类型发生了变化(也许你决定把这个属性作许你决定把这个属性作为类为类“Namestring”的一的一个实例重

13、新实现),那个实例重新实现),那么你么你 需要重新为属性命名需要重新为属性命名otherltemCollectionorderItems第二个版本更短一些,也第二个版本更短一些,也更容易理解更容易理解设计属性的数据类型 l设计属性时必须要根据使用的开发语言确设计属性时必须要根据使用的开发语言确定每个属性的数据类型,定每个属性的数据类型,l如果数据类型不够,设计人员可以利用已如果数据类型不够,设计人员可以利用已有的数据类型定义新的数据类型。有的数据类型定义新的数据类型。设计属性的可见性 l一般的经验是:一般的经验是:l把把private可见性赋予所有属性。可见性赋予所有属性。l始终调用属性的始终

14、调用属性的set操作对其进行更新,操作对其进行更新,即使在该属性定义的类中也应该如此;即使在该属性定义的类中也应该如此;l仅通过仅通过get操作直接访问属性;操作直接访问属性;l在属性的在属性的set操作中,实现简单的验证有操作中,实现简单的验证有效性的逻辑。效性的逻辑。 可选的属性设计 l属性的初始值。属性的初始值。在设计属性时要注意下面几点:l如果一个设计类因为其属性的原因变得复如果一个设计类因为其属性的原因变得复杂而难于理解,那么就将一些属性分离出杂而难于理解,那么就将一些属性分离出来形成一个新的类。来形成一个新的类。l类的属性数据结构要坚持简单的原则,尽类的属性数据结构要坚持简单的原则

15、,尽可能不使用复杂的数据结构。可能不使用复杂的数据结构。定义类的操作定义类的操作 l通常,定义一个设计类的操作的方法之一是通常,定义一个设计类的操作的方法之一是跟踪对应的跟踪对应的”分析类分析类”职责,详细分析每个职责,详细分析每个职责的具体含义,从中找出设计类应该具备职责的具体含义,从中找出设计类应该具备的操作。的操作。l一个分析类的职责有可能需要设计类的一个一个分析类的职责有可能需要设计类的一个或多个操作才能完成。或多个操作才能完成。职责分配原则在类间分配职责时,应考虑下面的原则。在类间分配职责时,应考虑下面的原则。l单一职责原则单一职责原则l一个类主要围绕一个职责设计。如果承担的职一个类

16、主要围绕一个职责设计。如果承担的职责过多,可考虑将它分成多个类。如果没有明责过多,可考虑将它分成多个类。如果没有明确的职责,则可考虑取消该类。确的职责,则可考虑取消该类。l依赖抽象而非具体原则依赖抽象而非具体原则l尽量在接口间建立联系,而不是在具体类间尽量在接口间建立联系,而不是在具体类间职责分配原则l惰性原则惰性原则l不要主动为类添加功能,除非为了满足测试的不要主动为类添加功能,除非为了满足测试的需要或实现必须承担的职责需要或实现必须承担的职责 l内聚外松原则内聚外松原则l保证类内的操作、特性具有最大的聚合度,而保证类内的操作、特性具有最大的聚合度,而同时将类间的耦合度降到最低。同时将类间的

17、耦合度降到最低。 定义类的操作定义类的操作l通常,一个设计类不只参与一个用例。所以通常,一个设计类不只参与一个用例。所以应检查,这样的设计类是否满足了所有有关应检查,这样的设计类是否满足了所有有关用例的要求。用例的要求。l另外,系统的效率、可用性、安全性等非功另外,系统的效率、可用性、安全性等非功能性需求,常常要落实到一些操作上来,因能性需求,常常要落实到一些操作上来,因此还需要增加某些操作来实现这些需求。此还需要增加某些操作来实现这些需求。 对设计类操作的常见设计:l操作的名称;操作的名称;l操作的参数;操作的参数;l操作返回类型;操作返回类型;l操作的可见性;操作的可见性;l操作的并发性;

18、操作的并发性;l操作的前提条件和事后条件。操作的前提条件和事后条件。操作命名l操作名的一般形式操作名的一般形式: methodName()l操作名由操作名由23个单词构成,第一个单词的首字个单词构成,第一个单词的首字母小写母小写,其他单词首字母大写其他单词首字母大写: 例例: studentName() getAverageMark()l命名原则命名原则:l用完整的单词用完整的单词,不用缩写;动词开头不用缩写;动词开头,以主动态表以主动态表示;语义尽可能明确。示;语义尽可能明确。 操作名称应统一l如如l“getFirstName()”和和“ fetchFirstName()”l的操作名称就不统

19、一,如果两个名字都以的操作名称就不统一,如果两个名字都以“get”开头,就可以让它们统一起来。开头,就可以让它们统一起来。参数名称应统一l参数名称也应当彼此统一。例如,参数名称也应当彼此统一。例如,“ theFirstName”、l“ firstName”l“ firstNm”l这样的参数名称就彼此不统一。这样的参数名称就彼此不统一。参数的顺序应统一l参数的顺序也应当统一。例如,操作参数的顺序也应当统一。例如,操作l“dOSomething(securityToken,StartDate)”l“doSomethingElse(studentNumber,securityToken”,l可以通过

20、都把可以通过都把“securityToken”作为第一个作为第一个(或最后一个)参数传递,使其更加统一。(或最后一个)参数传递,使其更加统一。 操作的可见性 l让操作按需提供可见性,不要超过限度。让操作按需提供可见性,不要超过限度。l为了减少系统的耦合,通用的操作是:在为了减少系统的耦合,通用的操作是:在设置某个操作的可见性时,尽量地限制其设置某个操作的可见性时,尽量地限制其可见性。可见性。方法设计 l方法设计描述的是操作的具体实现,所以方法设计描述的是操作的具体实现,所以与选用的编程语言密切相关。与选用的编程语言密切相关。l方法设计包括数据结构设计、算法设计和方法设计包括数据结构设计、算法设

21、计和流程设计。流程设计。活动图描述算法 x=(idelta-delta)/(slope-islope); slopeislope 返回点(0,0) slope=islope y=(slope*x)+delta; 返回点(x,y) 细化设计类的操作与属性 l细化设计类的操作与属性,依靠顺序图是细化设计类的操作与属性,依靠顺序图是一个有效的方法。一个有效的方法。 用例图、顺序图、类图之间关系顺序图、类图之间关系 分析顺序图资金转账在Servlet和控制之间划分职责 设计阶段的顺序图(细化操作与属性)控制类与边界类的属性l控制类与边界类的属性通常无属性控制类与边界类的属性通常无属性l控制类有时需要属

22、性描述对象的状态控制类有时需要属性描述对象的状态l控制类有时需要属性描述类本身的一些性控制类有时需要属性描述类本身的一些性质质描述设计类的状态l并不需要对每个设计类都描述其状态。并不需要对每个设计类都描述其状态。l如果某个类比较复杂,有多种状态,当接如果某个类比较复杂,有多种状态,当接收到一个消息时,要根据所处的状态来选收到一个消息时,要根据所处的状态来选择相应的操作行为,对于这样的类需要描择相应的操作行为,对于这样的类需要描述其状态。述其状态。由状态图获取更多操作分析类Claim_report由状态图获取更多操作初步精华后的设计类Claim_report由状态图获取更多操作类Claim_re

23、port的状态图由状态图获取更多属性由状态图获取更多操作由状态图获取更多属性和操作精化后的类Claim_report定义设计类的关系 l为了确定设计类之间的关系,首先应该跟为了确定设计类之间的关系,首先应该跟踪对应的分析类之间的关系。踪对应的分析类之间的关系。设计类之间的关系l在设计类之间的关系时还有一些细节需要在设计类之间的关系时还有一些细节需要考虑,下面列出这些细节:考虑,下面列出这些细节:l确定关联的方向和多重性。确定关联的方向和多重性。l关系构造型。关系构造型。l使用关联类。使用关联类。l设置限定。设置限定。1)识别类之间的关联 l如果两个对象之间需要进行协作如果两个对象之间需要进行协作,则要建则要建立关联关系。如果协作只在一个方向进行,立关联关系。如果协作只在一个方向进行,则建立单向关联。则建立单向关联。l顺序图也描述了设计对象间的相互作用。顺序图也描述了设计对象间的相互作用。研究顺序图的消息有助于发现类之间的关研究顺序图的消息有助于发现类之间的关联联 顺序图与关联关系根据顺序图或协作图确定关联关系根据顺序图或协作图确定关联关系2)识别类的泛化关系l在几个类中,如果有分解出的公共部分在几个类中,如果有分解出的公共部分l可以把分解出的公共部分放在父层。可以把分解出的公共部分放在父层。识别类的泛化关系 持久存储书刊书刊标题借阅预定借阅者3)

温馨提示

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

评论

0/150

提交评论