面向对象的设计-课件.ppt

上传人(卖家):晟晟文业 文档编号:4941485 上传时间:2023-01-27 格式:PPT 页数:86 大小:927KB
下载 相关 举报
面向对象的设计-课件.ppt_第1页
第1页 / 共86页
面向对象的设计-课件.ppt_第2页
第2页 / 共86页
面向对象的设计-课件.ppt_第3页
第3页 / 共86页
面向对象的设计-课件.ppt_第4页
第4页 / 共86页
面向对象的设计-课件.ppt_第5页
第5页 / 共86页
点击查看更多>>
资源描述

1、 对象设计的主要任务对象设计的主要任务:精化类的属性和操作精化类的属性和操作明确类之间的关系明确类之间的关系整理和优化设计模型整理和优化设计模型4.4 4.4 对象设计对象设计第第4 4章章 面向对象的设计面向对象的设计1 4.4.1 4.4.1 对类的属性的处理对类的属性的处理4.4.4 4.4.4 应用设计模式应用设计模式定义操作定义操作4.4.2 4.4.2 关联的设计关联的设计4.4.3 4.4.3 对结构的优化对结构的优化4.4.5 4.4.5 检查系统设计检查系统设计2内容内容4.4.1 4.4.1 对类的属性的处理对类的属性的处理(1)(1)回顾属性的来源回顾属性的来源(2)(2

2、)成员细节的表示成员细节的表示3(3)3)在哪里展示非简单数据类型和纯数据值在哪里展示非简单数据类型和纯数据值?(4)4)对属性的数量和单位建模对属性的数量和单位建模(5)5)对属性的处理对属性的处理(6)6)外部键的属性外部键的属性(1)(1)回顾属性的来源回顾属性的来源类所代表的现实实体的基本信息;类所代表的现实实体的基本信息;描述状态的信息;描述状态的信息;派生属性派生属性(derived attribute(derived attribute)如:)如:类类CourseOfferingCourseOffering中的中的“学生数目学生数目”/numStudents:int/numStu

3、dents:int描述该类与其他类之间关联的信息;描述该类与其他类之间关联的信息;l其他常见的类型其他常见的类型:地址地址AddressAddress、颜色、颜色ColorColor、几何元素、几何元素GeometricsGeometrics、电话号码、电话号码PhoneNumberPhoneNumber、通用商品代码、通用商品代码UPCUPC、社会安全代码、社会安全代码Social Social Security NumberSecurity Number、邮政编码、邮政编码Postal Code Postal Code、枚举类型等。、枚举类型等。4具体说明属性的名称、类型、具体说明属性的名

4、称、类型、缺省值、可见性等;缺省值、可见性等;Public:+Public:+;Private:-Private:-;Protected:#Protected:#。(2)(2)成员细节的表示成员细节的表示l基本原则基本原则尽可能将所有属性的可见性尽可能将所有属性的可见性设置为设置为privateprivate;仅通过仅通过setset方法更新属性;方法更新属性;仅通过仅通过getget方法访问属性。方法访问属性。图图4-56 4-56 有细节的类图有细节的类图5(3)3)在哪里展示非简单数据类型和纯数据值在哪里展示非简单数据类型和纯数据值?ProductSpecificationupc:UPC

5、StoreAddress:AddressProductSpecificationUPC*1 1StoreAddress*1 1UPCUPC是非简单数据类型是非简单数据类型(要对它进行验证要对它进行验证,也也可包括制造者属性可包括制造者属性),),即有属性和关联即有属性和关联,也可也可用概念来表示。用概念来表示。UPCUPC是纯数据值是纯数据值,在概念模型中当在概念模型中当作属性看待。作属性看待。图图4-57 4-57 用概念表示属性用概念表示属性UPCUPC是一个纯数据值是一个纯数据值,但也可以是一个非简单数据类型。但也可以是一个非简单数据类型。6(4)4)对属性的数量和单位建模对属性的数量和

6、单位建模Paymentamount:NumberPaymentQuantityamount:Number*1 1Paymentamount:Quantity数量是纯数据值数量是纯数据值,可作为属性可作为属性这个表示可用这个表示可用,但不灵活或不可靠但不灵活或不可靠,要知道支付货款时所用的货币单位。要知道支付货款时所用的货币单位。UnitHas-amountIs-in*1 1将数量作为一个单独概念将数量作为一个单独概念图图4-58 4-58 对属性的数量和单位建模对属性的数量和单位建模7(5)5)对属性的处理对属性的处理n 保留派生属性,避免重复计算保留派生属性,避免重复计算n 描述其他事物的规

7、格说明描述其他事物的规格说明FlightFlight航班航班datadata number numbertimetimeAirportAirport机场机场namenameFlies-toFlies-to*1 1FlightFlight航班航班data data timetimeDescribed-byDescribed-by*1 1AirportAirport机场机场namenameFlightDescriptionFlightDescriptionnumbernumber*1 1Describes-Describes-flights-toflights-to较好较好图图4-59 4-59

8、描述其他事物的规格说明描述其他事物的规格说明较差较差 8l分析阶段的数据类型分析阶段的数据类型只能是简单的、原始的数据类型只能是简单的、原始的数据类型,并不表示如并不表示如C+C+、Java Java、SmalltalkSmalltalk中的属性中的属性(数据成数据成员、实例变量员、实例变量)(分析中的类图是对问题的存在建立的分析模型分析中的类图是对问题的存在建立的分析模型,而而不是软件实体的分析模型不是软件实体的分析模型)。l在软件构造和设计阶段,对象之间的关联通常是用指在软件构造和设计阶段,对象之间的关联通常是用指向其他复杂类型的属性来表示向其他复杂类型的属性来表示(但不是唯一的解决方但不

9、是唯一的解决方案案)。(6)6)外部键的属性外部键的属性9l在在分析阶段的对象模型中分析阶段的对象模型中,不是使用属性不是使用属性,而是使用而是使用关联关联来联系两个概念的。来联系两个概念的。l 设计中的类图设计中的类图,使用外键实现对象间的联系。使用外键实现对象间的联系。CashierCashiernamenamePOSTPOSTnumbernumberUsesUses1 11 1图图4-60 4-60 不使用外部键的属性不使用外部键的属性CashierCashierNameNamecureentPOSTNumbercureentPOSTNumber使用外部键的属性与使用外部键的属性与另一个

10、对象发生联系另一个对象发生联系 图图4-61 4-61 有外部键的属性有外部键的属性10(6)6)外部键的属性外部键的属性4.4.2 4.4.2 关联关联 (Association)(Association)的设计的设计(1)1)四种连接四种连接(2)2)增加冗余关联,提供访问效率增加冗余关联,提供访问效率(3)3)对限定关联对限定关联(qualified association)(qualified association)的考虑的考虑(4)4)增加关联的导航增加关联的导航(navigability)(navigability)(5)5)对关联类的设计对关联类的设计11(1)(1)四种连接四

11、种连接全局全局(global):(global):某个对象可以在全局范围内直接被某个对象可以在全局范围内直接被 其他对象其他对象“引用引用”。参数参数(Parameter):(Parameter):某个对象作为另一个对象的某某个对象作为另一个对象的某 个操作参数或者返回值。个操作参数或者返回值。局部局部(Local):(Local):某个对象在另一个对象的某个操作某个对象在另一个对象的某个操作 中充当临时变量。中充当临时变量。域域(Field):(Field):某个对象作为另一个对象的数据成员某个对象作为另一个对象的数据成员 (聚合聚合/组合关系组合关系)。两个两个类间类间依赖依赖关系关系12

12、对象的对象的连连接方式接方式attach(Timer observer obs)detach(Timer observer obs)notify()Timertick()Timer observerinplay Position():Cpointtick()SpriteFlay fieldCpoint0.1Velocity tick()move()Movable spriteStationary sprite观察者观察者图图4-62 4-62 对象的连接方式对象的连接方式13关联源对象关联源对象关联指针关联指针属性属性关联对象指针关联对象指针 nextnext属性属性关联对象指针关联对象指针

13、nextnext被关联对象被关联对象被关联对象被关联对象节点节点用指针或引用方式实现关联用指针或引用方式实现关联:0.*图图4-63 4-63 单向关联的实现单向关联的实现公司公司雇员雇员雇员雇员雇主雇主公司公司雇员雇员14用用java实现关联实现关联:保险公保险公司司保险合同保险合同10.*有有涉及涉及Public class Insurance-CompanyPublic class Insurance-Company /*方法方法*/Private Insurance-Contract Vector Contracts Private Insurance-Contract Vector

14、Contracts Public class Insurance-ContractPublic class Insurance-Contract /*方法方法*/Private Insurance-Company refer-to Private Insurance-Company refer-to;n链属性的实现链属性的实现 依赖于关联的阶数依赖于关联的阶数15(2)2)增加冗余关联,提供访问效率增加冗余关联,提供访问效率*公司公司Find-skill雇员雇员技能技能 图图4-64 4-64 增加类增加类16公司公司雇员雇员(3)3)对限定关联对限定关联(qualified associat

15、ion)(qualified association)的考虑的考虑 主要是减少限定符远端处的多重性主要是减少限定符远端处的多重性,从多个减少到从多个减少到1 1 个。分析类图中的限定符只是区分两种不同类型的个。分析类图中的限定符只是区分两种不同类型的 事物。事物。回回忆忆17在设计类图中在设计类图中,关联的限定符关联的限定符是用某种键值或者记号实是用某种键值或者记号实现的现的,而不是用而不是用JavaJava的引用实现的。的引用实现的。图图4-65 4-65 关联的限定符关联的限定符 Employee LoginServeletempidpublic class LoginServeletpu

16、blic class LoginServelet private String private String empid;empid;public String getName()public String getName()Employee e=DB.getEmp(Employee e=DB.getEmp(empidempid););return e.getName();return e.getName();18(3)3)对限定关联对限定关联(qualified association)(qualified association)的考虑的考虑l在设计类图中,导航是角色的一个特性,它说明从在

17、设计类图中,导航是角色的一个特性,它说明从源对象到目标对象沿着关联有一个单向的链接。源对象到目标对象沿着关联有一个单向的链接。(4)4)增加关联的导航增加关联的导航(navigability)(navigability)l导航箭头的关联表示从源类到目标类的属性可见性。导航箭头的关联表示从源类到目标类的属性可见性。l在实现时,导航箭头用源类中所定义的一个属性来在实现时,导航箭头用源类中所定义的一个属性来实现,这个属性引用了目标类的一个实例。实现,这个属性引用了目标类的一个实例。19POSTSaledateisComplete:BooleantimeCaptures捕获捕获11 becomeCom

18、plete()makeLineItem()makePayment()total()endSale()enterItem()makePayment()图图4-66 4-66 对象模型和设计类图对象模型和设计类图 导航箭头说明对象导航箭头说明对象 被单向链接到被单向链接到Sale对象对象 POST类可能有一个类可能有一个指向指向Sale对象的属性对象的属性 没有导航箭头说明从没有导航箭头说明从Sale到到POST方向没有链接方向没有链接201图图4-67 4-67 添加引用属性添加引用属性根据类图中的关联和导航关系可推导出一个类的引用属性根据类图中的关联和导航关系可推导出一个类的引用属性Produ

19、ctSpecificationdescription:Textprice:Quantityupc:UPCSalesLineitemquantity:Integersubtotal():Quantity*Described-bypublic class SalesLineitem public SalesLineitem(ProductSpecification spec,int qty);public float subtotal();private int quantity;简单属性简单属性 private ProductSpecification prodSpec;引用属性引用属性prod

20、Spec用属性名用属性名作为角色名作为角色名21l分析中的关联分析中的关联,是增进对问题的理解为目的,是增进对问题的理解为目的(不是对数据流、实不是对数据流、实例变量连接等所做的一条声明例变量连接等所做的一条声明)。说明说明:l设计类图中的关联设计类图中的关联,是对软件构件的描述。,是对软件构件的描述。l设计类图中关联的选择要依据交互图中的可见性设计类图中关联的选择要依据交互图中的可见性,和存储特性。,和存储特性。l从从A A到到B B导航关联的确定导航关联的确定:#A#A向向B B发送一个消息发送一个消息#A#A创建了创建了B B的一个实例的一个实例#A#A需要维持到需要维持到B B之间的一

21、个链接之间的一个链接l根据协作图来确定导航。根据协作图来确定导航。l在程序语言中,实现关联最普通的方法是使用一个指向关联类的在程序语言中,实现关联最普通的方法是使用一个指向关联类的属性。属性。22n在类图中在类图中,依赖依赖关系描绘类之间的非属性的可见性时关系描绘类之间的非属性的可见性时很有用很有用,即描述参数、全局、局部可见性时很有用。即描述参数、全局、局部可见性时很有用。n普通的属性可见性是用关联线和导航箭头来表示的。普通的属性可见性是用关联线和导航箭头来表示的。非属性可见性的依赖关系非属性可见性的依赖关系23 图图4-68 4-68 非属性可见性的依赖关系非属性可见性的依赖关系 POST

22、endSale()enterItem()makePayment()Sales Lineitemquantity:Integersubtotal()Saledate:DateisComplete:Booleantime:TimebecomeComplete()makeLineItem()makePayment()Total()address:Addressname:TextaddSale()StorePaymentamount:Quantity ProductCatalog specification()ProductSpecificationdescription:Textprice:Quan

23、tityupc:UPCHouses11Uses11Looks-in111.*1ContainsCaptures1111.*Contains1Describes*11Paid-by*1Loge-completedLoge-completed1 124(5)(5)对关联类的设计对关联类的设计Supplier供应者供应者Buyer买家买家Trade交易交易CompanyPersonjob*1.1.*关联类的例子:关联类的例子:25源类包含了一个对关联类的引用,而关联类又包含了对源类包含了一个对关联类的引用,而关联类又包含了对目标类的引用。目标类的引用。上述设计有两点不足上述设计有两点不足:#找出对应

24、一宗交易的都要花费一定的力气。找出对应一宗交易的都要花费一定的力气。#违反了对象封装的原则违反了对象封装的原则,与交易相关的数据与交易相关的数据(供应和买供应和买 家家)没放在交易对象中。没放在交易对象中。Suppliercompany-name:Stringaddress:Stringbuyers:Buyer*trades:Trades*Buyername:Stringaddress:Stringsupplier:Supplier*trades:Trades*图图4-69 4-69 供应者与买家关联类的设计供应者与买家关联类的设计l关联类在实际设计中十分有用,但现在的关联类在实际设计中十分有

25、用,但现在的OOOO语言不语言不直接支持关联类,可以这样设计直接支持关联类,可以这样设计:26Suppliercompany-name:Stringaddress:Stringtrades:Trades*Tradeproduct:Stringquantity:IntegerTotal-price:Doublesupplier:Supplierbuyer:Buyer Buyername:Stringaddress:Stringtrades:Trades*1 1*1 1*图图4-70 4-70 交易的一个通用方法交易的一个通用方法把供应者和买家对象直接放到交易中作为它的属性。把供应者和买家对象直接

26、放到交易中作为它的属性。l 用二元关联类的方法来解决用二元关联类的方法来解决27例如:飞机在每次飞行中例如:飞机在每次飞行中,有两个驾驶员有两个驾驶员(pilot-”(pilot-”人人”类类),),航班航班(Flight),(Flight),飞机飞机(Airplane)(Airplane)和人和人(Person),(Person),有如有如下两个设计下两个设计,评价设计。评价设计。AirplaneAirplanePersonPersonFlightFlight1 12 2pilotpilot(a)(a)PersonPersonDutyDuty2 2*(b)(b)FlightFlightAir

27、planeAirplane*1 1pilotpilot任任务务l二元关联类的每个实例二元关联类的每个实例,描述两个类对象之间的描述两个类对象之间的linklink的性质。本的性质。本例中航班对象包含航班号、时间等数据例中航班对象包含航班号、时间等数据,对两个驾驶员是一样的对两个驾驶员是一样的,航班不应是飞机和人员的关联类。航班不应是飞机和人员的关联类。l每个航班对象与一架飞机和两个驾驶员有关系。在某一航班中每个航班对象与一架飞机和两个驾驶员有关系。在某一航班中,每每个驾驶员有自己的任务个驾驶员有自己的任务,作为关联类来模拟。第作为关联类来模拟。第2 2个设计允许一个个设计允许一个驾驶员工作在不

28、同航班驾驶员工作在不同航班,执行不同任务执行不同任务(时间不冲突便可时间不冲突便可)。图图4-71 4-71 比较两个设计比较两个设计28(1)1)调整继承结构调整继承结构4.4.3 4.4.3 对结构的优化对结构的优化(2)(2)解决死板的继承解决死板的继承(3)3)关于关系环的问题关于关系环的问题29(1)1)调整继承结构调整继承结构图图4-72 4-72 继承与委派机制继承与委派机制ListNamelengthAddRemoveFirstlastStackPUSHPOPstack:List1PUSHPOP改为委派改为委派AddRemoveFirstlastList30delegate委派

29、机制委派机制l我们经常有这样的一些需求,我们只想继承一个类的部分功能,我们经常有这样的一些需求,我们只想继承一个类的部分功能,而另外一部分功能是我们不想要、甚至是对我们有害的功能,这而另外一部分功能是我们不想要、甚至是对我们有害的功能,这时候,我们只能使用委派技术,而不能使用继承了。时候,我们只能使用委派技术,而不能使用继承了。l基于上面的一些分析,我们知道,继承和委派技术都能扩展一个基于上面的一些分析,我们知道,继承和委派技术都能扩展一个类,使它拥有另外一个类的部分或者全部功能。但委派技术更为类,使它拥有另外一个类的部分或者全部功能。但委派技术更为灵活,它可以使得一个类可以全部或部分的扩展得

30、到另一个类的灵活,它可以使得一个类可以全部或部分的扩展得到另一个类的功能,而继承只能是全盘接收。功能,而继承只能是全盘接收。class Foo class Foo deftest()deftest()println“have a println“have a test”test”def foo()def foo()println“foo.”println“foo.”class Foo2 class Foo2 private delegate=new private delegate=new Foo()Foo()def foo()def foo()this.delegate.foo()this.

31、delegate.foo()def testAgain()def testAgain()println“test it println“test it again”again”31(2)(2)解决死板的继承解决死板的继承PersonUserBuyersupplier*交易交易图图4-73 4-73 产生互不相容的子类产生互不相容的子类图图4-74 4-74 增加的角色类增加的角色类(手柄样式手柄样式)RoleUserBuyersupplier*交易交易Person1 1*用户与供应者的交易用户与供应者的交易受到了限制受到了限制一个人的对象可以有一个人的对象可以有用户和买家的角色用户和买家的角色

32、32(3)3)关于关系环的问题关于关系环的问题ABFolderItemFolder正向容纳正向容纳反向容纳反向容纳图图4-75 4-75 文件夹单项与文件夹关系环文件夹单项与文件夹关系环VersionRevision图图4-76 4-76 原版与修订版原版与修订版10.1previousnextFolderItemFolderFolderItemFolder图图4-77 4-77 文件夹单项与文件夹关系环分解文件夹单项与文件夹关系环分解 分解使关系明确分解使关系明确,证实设计证实设计的正确的正确,行为特性更为明显行为特性更为明显但未分解的类图更为简洁但未分解的类图更为简洁,可直接与实施程序对应

33、可直接与实施程序对应33关系环能真实地反映实际应用情况关系环能真实地反映实际应用情况:如电脑系统的局部类如电脑系统的局部类Permission许可许可 UserFileComputerSystem*1 1FolderItem文件夹项文件夹项FileSystemFolder1.1.*1 11.1.*1 1*OwnerOwner0.0.*1 10.10.1*0.10.1*图图4-78 4-78 电脑系统的局部类电脑系统的局部类34图图4-79 4-79 属性、零件、部件组成的双重关系环属性、零件、部件组成的双重关系环PartComponent1 1Attribute*1 1*containscon

34、tains属性、零件、部件组成的双重关系环属性、零件、部件组成的双重关系环35GroupItemSquare1.1.*containsCircle1 1图图4-80 4-80 有叶结点类的关系环有叶结点类的关系环有叶结点类的关系环有叶结点类的关系环36反向关系环反向关系环;二元关联类二元关联类;网络与结点是网络与结点是Link的对象管理器的对象管理器;谁负责管理连接对象谁负责管理连接对象?例例:如下是模块如下是模块(Module)(Module)、网络、网络(Nework)(Nework)、结点、结点(Node)(Node)、连接连接(Link)(Link)的两个设计的两个设计,试进行评价。试

35、进行评价。Module1*NeworkNodeLink1.*111Module*NeworkNodeLink1.*1*反向关系环反向关系环;递归关联递归关联;连接类与基类相连连接类与基类相连,复用源码复用源码;结构简化结构简化,避免重复和模糊的连接。避免重复和模糊的连接。图图4-81 4-81 评价两个反向关系环设计评价两个反向关系环设计374.4.4 4.4.4 应用设计模式应用设计模式(Design Pattern)(Design Pattern)定义操作定义操作(1)(1)设计模式的概念设计模式的概念(3)(3)设计模式的分类设计模式的分类38(4)(4)设计模式的关系设计模式的关系(5

36、)5)介绍职责分配中通用原则的模式介绍职责分配中通用原则的模式(2)(2)模式的组成元素模式的组成元素(1)(1)设计模式的概念设计模式的概念(design pattern)(design pattern)lAlexanderAlexander给出了经典定义:给出了经典定义:“每个模式都描述了一个在我们的环境中不断出现每个模式都描述了一个在我们的环境中不断出现的问题的问题,然后描述了该问题的解决核心。通过这种方然后描述了该问题的解决核心。通过这种方式,你可以无数次的使用那些已有的解决方案,无式,你可以无数次的使用那些已有的解决方案,无需在重复相同的工作。需在重复相同的工作。”l模式描述为:在一

37、定环境中解决某一问题的方案,模式描述为:在一定环境中解决某一问题的方案,包括三个基本元素包括三个基本元素问题,解决方案和环境。问题,解决方案和环境。39(1)(1)设计模式的概念设计模式的概念(design pattern)(design pattern)l设计模式(设计模式(design patterndesign pattern)是一套被反复使用、多数人)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

38、证代码可靠性。毫无疑问,设计模式于己于他人于系统都毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。软件工程的基石,如同大厦的一块块砖石一样。lErich Gamma,Richard Helm,Ralph Johnson&John Erich Gamma,Richard Helm,Ralph Johnson&John VlissidesVlissides四人的四人的设计模式设计模式(19951995年出版)是第一次将年出版)是第一次将设计模式提升到理论高度,并将之规范

39、化。提出了设计模式提升到理论高度,并将之规范化。提出了2323种基种基本设计模式,自此,在可复用面向对象软件的发展过程中,本设计模式,自此,在可复用面向对象软件的发展过程中,新的大量的设计模式不断出现。新的大量的设计模式不断出现。40v模式名模式名v问题问题v情景情景v约束约束(2)(2)模式的组成元素模式的组成元素v解决方案解决方案v例子例子v结果情景结果情景41(3)(3)设计模式的分类设计模式的分类42l创建模式:对类的实例化过程的抽象。一些系统在创建对象时,需创建模式:对类的实例化过程的抽象。一些系统在创建对象时,需要动态地决定怎样创建对象,创建哪些对象,以及如何组合和表示要动态地决定

40、怎样创建对象,创建哪些对象,以及如何组合和表示这些对象。创建模式描述了怎样构造和封装这些动态的决定。包含这些对象。创建模式描述了怎样构造和封装这些动态的决定。包含类的创建模式和对象的创建模式。类的创建模式和对象的创建模式。l结构模式:描述如何将类或对象结合在一起形成更大的结构。分为结构模式:描述如何将类或对象结合在一起形成更大的结构。分为类的结构模式和对象的结构模式。类的结构模式使用继承把类,接类的结构模式和对象的结构模式。类的结构模式使用继承把类,接口等组合在一起,以形成更大的结构。类的结构模式是静态的。对口等组合在一起,以形成更大的结构。类的结构模式是静态的。对象的结构模式描述怎样把各种不

41、同类型的对象组合在一起,以实现象的结构模式描述怎样把各种不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。新的功能的方法。对象的结构模式是动态的。l行为模式:对在不同的对象之间划分责任和算法的抽象化。不仅仅行为模式:对在不同的对象之间划分责任和算法的抽象化。不仅仅是关于类和对象的,并是关于他们之间的相互作用。类的行为模式是关于类和对象的,并是关于他们之间的相互作用。类的行为模式使用继承关系在几个类之间分配行为。对象的行为模式则使用对象使用继承关系在几个类之间分配行为。对象的行为模式则使用对象的聚合来分配行为。的聚合来分配行为。lAbstract FactoryAbstra

42、ct Factory:提供一个创建一系列相关或相互:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。依赖对象的接口,而无须指定它们具体的类。lBuilderBuilder:将一个复杂对象的构建与它的表示分离,:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。使得同样的构建过程可以创建不同的表示。lFactory MethodFactory Method:定义一个用于创建对象的接口,让:定义一个用于创建对象的接口,让子类决定实例化哪一个类。使一个类的实例化延迟到子类决定实例化哪一个类。使一个类的实例化延迟到其子类。其子类。lPrototypeProt

43、otype:用原型实例指定创建对象的种类,并通:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。过拷贝这些原型创建新的对象。lSingletonSingleton:保证一个类仅有一个实例,并提供一个保证一个类仅有一个实例,并提供一个访问它的全局访问点。访问它的全局访问点。创建型模式创建型模式43结构型模式结构型模式lAdapterAdapter:将一个类的接口转换成客户希望的另外一个接口。:将一个类的接口转换成客户希望的另外一个接口。lBridgeBridge:将抽象部分与它的实现部分分离,使它们都可以独:将抽象部分与它的实现部分分离,使它们都可以独立的变化。立的变化。lComp

44、ositeComposite:将对象组合成树形结构以表示:将对象组合成树形结构以表示“部分部分-整体整体”的的层次结构。层次结构。lDecoratorDecorator:动态地给一个对象添加一些额外的职责。:动态地给一个对象添加一些额外的职责。lFaadeFaade:为子系统中的一组接口提供一个一致的界面,:为子系统中的一组接口提供一个一致的界面,FacadeFacade模式定义了一个高层接口,这个接口使得这一子系统模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。更加容易使用。lFlyweightFlyweight:运用共享技术有效地支持大量细粒度的对象。:运用共享技术有效地支持大

45、量细粒度的对象。lProxyProxy:为其它对象提供一种代理以控制对这个对象的访问。:为其它对象提供一种代理以控制对这个对象的访问。44lChain of ResponsibilityChain of Responsibility:使多个对象都有机会处理请:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。求,从而避免请求的发送者和接收者之间的耦合关系。lCommandCommand:将一个请求封装为一个对象,从而使你可用不:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日同的请求对客户进行参数化;对请求排队或记录请求日志,以及支

46、持可撤消的操作。志,以及支持可撤消的操作。lInterpreterInterpreter:给定一个语言,定义它的文法的一种表示,:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语句并定义一个解释器,这个解释器使用该表示来解释语句中的句子。中的句子。lIteratorIterator:提供一种方法顺序访问一个聚合对象中的各:提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。个元素,而不需要暴露该对象的内部表示。lMediatorMediator:用一个中介对象来封装一系列的对象交互。:用一个中介对象来封装一系列的对象交互。行为型模式行

47、为型模式45行为型模式行为型模式lMementoMemento:在不破坏封装性的前提下,捕获一个对象的内部:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。状态,并在该对象之外保存这个状态。lObserverObserver:定义对象间的一种一对多的依赖关系,当一个:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。并自动更新。lStateState:允许一个对象在其内部状态改变时改变它的行为。:允许一个对象在其内部状态改变时改变它的行为。lStrategyStra

48、tegy:定义一系列的算法,把它们一个个封装起来,:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。并且使它们可以相互替换。lTemplate MethodTemplate Method:定义一个操作中的算法的骨架,而将一:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。些步骤延迟到子类中。lVisitorVisitor:表示一个作用于某对象结构中的各元素的操作。:表示一个作用于某对象结构中的各元素的操作。46(4)4)设计模式的关系设计模式的关系47(5)5)介绍职责分配中通用原则的模式介绍职责分配中通用原则的模式l 描述将职责分配给对象的基本原则。描述将职责分配给对象

49、的基本原则。v 专家专家(Expert)(Expert)v 创建者创建者(Builder)(Builder)v 高聚合度或高内聚高聚合度或高内聚(High cohesion)(High cohesion)v 低耦合度或低耦合低耦合度或低耦合(Low coupling)(Low coupling)v 控制者控制者(Controller)(Controller)五个模式五个模式l 将分析阶段漏掉的类型加入到对象模型中。将分析阶段漏掉的类型加入到对象模型中。48v 解决方案解决方案:将一个职责分配给信息专家。将一个职责分配给信息专家。v 问题问题:面向对象的设计中什么是最基本的职责面向对象的设计中什

50、么是最基本的职责 分配原则。分配原则。专家专家 49SaleDatetimequantitySalesLineItemdescription priceUpc Product specification1.*Contains(包含包含)*DescribedbySale(销售销售)类类职责职责知道销售总额知道销售总额 SalesLineItem(销售细项销售细项)知道销售项记录了金额知道销售项记录了金额ProductSpecification(产品说明产品说明)知道商品价格知道商品价格 确定销售总额确定销售总额 (grand total)(grand total)需要知道什么信息?需要知道什么信

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(面向对象的设计-课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|