面向对象的设计-课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《面向对象的设计-课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 设计 课件
- 资源描述:
-
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 交易的一个通用方法交易的一个通用方法把供应者和买家对象直接放到交易中作为它的属性。把供应者和买家对象直接
展开阅读全文