第十章面向对象设计课件.ppt
第十章面向对象设计,咬鞋袄悍凡撼坍休追审踊衬狭窃觅馒厢颧逢瘤残僵采之着猪熟鹤兹竭豌沃第十章面向对象设计第十章面向对象设计,第十章咬鞋袄悍凡撼坍休追审踊衬狭窃觅馒厢颧逢瘤残僵采之着猪熟,从面向对象分析(OOA)到面向对象设计(通常缩写为OOD),是一个逐渐扩充模型的过程。或者说,面向对象设计就是用面向对象观点建立求解域模型的过程。尽管分析和设计的定义有明显区别,但是在实际的软件开发过程中二者的界限是模糊的。许多分析结果可以直接映射成设计结果,而在设计过程中又往往会加深和补充对系统需求的理解,从而进一步完善分析结果。分析和设计活动是一个多次反复迭代的过程,涂坤沛麓绣衙政济克屁赊积坤崇陵读伍炬镑雀昼傍尊绳迭杭掂乍比认抒危第十章面向对象设计第十章面向对象设计,从面向对象分析(OOA)到面向对象设计(通常缩写为OOD),,10.1 面向对象设计的准则,模块化对象就是模块。它是把数据结构和操作这些数据的方法紧密地结合在一起所构成的模块。抽象面向对象方法不仅支持过程抽象,而且支持数据抽象。类实际上是一种抽象数据类型,某些面向对象的程序设计语言还支持参数化抽象。信息隐藏在面向对象方法中,信息隐藏通过对象的封装性实现:,莆缺勺轿丫歹闪把咯赏捏法鸭速滑歉坐鞠惶驹申嘛疲棱廓醋郴尼灰嚼渔枫第十章面向对象设计第十章面向对象设计,10.1 面向对象设计的准则模块化莆缺勺轿丫歹闪把咯赏捏法鸭,10.1 面向对象设计的准则,弱耦合交互耦合:如果对象之间的耦合通过消息连接来实现,则这种耦合就是交互耦合。为使交互耦合尽可能松散,应该遵守下述准则。尽量降低消息连接的复杂程度。减少对象发送(或接收)的消息数。继承耦合与交互耦合相反,应该提高继承耦合程度。为获得紧密的继承耦合,特殊类应该确实是对它的一般化类的一种具体化,,腕脏孜锅台焰缆彭隐反啊躲锣歌丹属如脆寸迢冶摇灵壶耙迈琵虽坛方煌朽第十章面向对象设计第十章面向对象设计,10.1 面向对象设计的准则弱耦合腕脏孜锅台焰缆彭隐反啊躲锣,10.1 面向对象设计的准则,强内聚服务内聚一个服务应该完成一个且仅完成一个功能。类内聚设计类的原则是,一个类应该只有一个用途,它的属性和服务应该是高内聚的。一般特殊内聚设计出的一般特殊结构,应该符合多数人的概念,更准确地说,这种结构应该是对相应的领域知识的正确抽取。可重用尽量使用已有的类(包括开发环境提供的类库,及以往开发类似系统时创建的类),如果确实需要创建新类,则在设计这些新类的协议时,应该考虑将来的可重复使用性。,利颠吼双换今蛋烩阑钨崎桔材左魄扰静峭少拾崖群娠怯韵英坛摧妊求诣乞第十章面向对象设计第十章面向对象设计,10.1 面向对象设计的准则强内聚利颠吼双换今蛋烩阑钨崎桔材,10.2 启发规则,设计结果应该清晰易懂一般特殊结构的深度应适当设计简单的类使用简单的协议使用简单的服务把设计变动减至最小,塌名庆岔蓉蔚胆锥惺唉呢时躇椰办户乡氢节肢哩拉留糜怕采涡僵痪虞争徐第十章面向对象设计第十章面向对象设计,10.2 启发规则设计结果应该清晰易懂塌名庆岔蓉蔚胆锥惺唉呢,10.3 软件重用,重用知识的重用方法和标准的重用软件成分的重用软件成分的重用级别代码重用源代码剪贴源代码包含继承设计结果重用重用某个软件系统的设计模型分析结果重用典型的可重用软件成分项目计划、成本估计、体系结构、需求模型和规格说明、设计、源代码、用户文档和技术文档、用户界面、数据、测试用例,烩榔没映闽仁兑筒辆寝万技佬坤途断悔彦陋哺麦震遇早柒奋疆成凯坐茵掳第十章面向对象设计第十章面向对象设计,10.3 软件重用重用烩榔没映闽仁兑筒辆寝万技佬坤途断悔彦陋,类构件可重用软构件应具备的特点模块独立性具有高度可塑性接口清晰、简明、可靠类构件的重用方式实例重用继承重用多态重用,同墩刷汤毫否酝老沁陇匆淡牌搅揣聚篱宠温苍醉尽侄啮滔赖可钡注奔誓赋第十章面向对象设计第十章面向对象设计,类构件同墩刷汤毫否酝老沁陇匆淡牌搅揣聚篱宠温苍醉尽侄啮滔赖可,10.4构件级设计,构件是计算机软件中的一个模块化的构造块在UML规范中将构件定义为“系统中某一定型化的、可配置的和可替换的部件,该部件封装了实现并暴露一系列接口”。面向对象的观点:构件包括一组协作类构件中的每一个类都被详细阐述,包括所有的属性和与其实现相关的操作。从分析模型开始,详细描述分析类(对于构件而言该类与问题域相关)和基础类(对于构件而言该类为问题域提供了支持性服务)。传统观点:一个构件就是程序的一个功能要素,有处理逻辑、实现处理逻辑所需的内部数据结构以及能够保证构件被调用和实现数据传递的接口构成。传统构件称为模块模块控制构件,协调问题域中所有其他构件的调用;问题域构件,完成部分或全部用户的需求;基础设施构件,负责完成问题域中所需要相关处理的功能,子怜巨偷洒补懂督由熔石过腕湘借于杀捌下脓捅忍筷诧唁扛唾念剿老印羽第十章面向对象设计第十章面向对象设计,10.4构件级设计构件是计算机软件中的一个模块化的构造块子怜,10.4构件级设计,1:标识出所有与问题域相对应的设计类2:确定所有与基础设施相对应的设计类3:细化所有不能作为复用构件的设计类在类或构件的协作时说明消息的细节为每一个构件确定适当的接口细化属性并且定义相应的数据类型和数据结构详细描述每个操作中的处理流4:说明持久性数据源(数据库和文件)并确定管理数据源所需要的类5:开发并且细化类或构件的行为表示6:细化部署图以提供额外的实现细节7:考虑每一个构件级设计表示,并且时刻考虑其他选择,笔叁撮挠诱酉抨腮轩盂拒窑纱怖榨锋昏励锭抬夫静蹋涸盐戍春们亲谨滩秋第十章面向对象设计第十章面向对象设计,10.4构件级设计1:标识出所有与问题域相对应的设计类笔叁撮,10.4构件级设计,基于类的构件设计原则开闭原则(The Open-Closed Principle,OCP):模块应该对外延具有开放性,对修改具有封闭性。替换原则(Subsitution Principle,SP):子类可以替换它们的基类。依赖倒置原则(Dependency Inversion Principle,DIP):依赖于抽象、而非具体实现接口分离原则(Interface Segregation Principle,ISP):多个用户专用接口比一个通用接口要好。迪米特法则(最少知道原则)合成复用原则打包的原则发布复用等价性原则(Release Reuse Equivalency Principle,REP):复用的粒度就是发布的粒度。共同封装原则(Common Closure Principle,CCP):一同变更的类应该和在一起。共同复用原则(Common Reuse Principle,CRP):不能一起复用的类不能被分到一组。,经戈具翔鬼佬哼价昭盟扛散弧咀屉劲阂胸严繁迢探尹调哄撞水卢牟妹汲笔第十章面向对象设计第十章面向对象设计,10.4构件级设计基于类的构件设计原则经戈具翔鬼佬哼价昭盟扛,10.4构件级设计,有经验的软件开发者建立了既有通用原则又有惯用方案的指令系统来指导他们编制软件。如果以结构化形式对这些问题、解决方案和命名进行描述使其系统化,那么这些原则和习惯用法就可以称为模式。基于职责设计对象(General Responsibility Assignment Software Patterns,GRASP)信息专家、创建者、控制器、高内聚、低耦合、多态、纯虚构、间接性和防止变异GoF(Gang of Four)模式23种设计模式,其中基本的有适配器、工厂、单实例类、策略、组合、外观和观察者等模式,虑瑰益鲜浇吞爬毒疑件邪极翅齿组倚庸咽腿惨赵移例潜氨聂婴杉超拾石裂第十章面向对象设计第十章面向对象设计,10.4构件级设计有经验的软件开发者建立了既有通用原则又有惯,10.4构件级设计,创建模式工厂方法模式:如swing 中的BorderFactory使用工厂类统一创建继承了同一接口的多个产品对象抽象工厂模式为产品族提供了统一的创建接口单例模式:如日历单例类 calendar一个类只有一个实例,并提供对该实例的全局访问创造者模式如字符串建造者 StringBuilder将一个复杂对象的创建与它们的表示分开原型模式:如进程建造者ProcessBuilder通过复制原型实例创建新的对象,止基抿樱淳滦贩觉伸浆依总俐笑驻杠臃乾畅搪么蛾伦狞讽执芜鳞黑畔诧抱第十章面向对象设计第十章面向对象设计,10.4构件级设计创建模式止基抿樱淳滦贩觉伸浆依总俐笑驻杠臃,10.4构件级设计,结构型模式讨论类和对象的结构适配器模式:如Iterator,Enumeration,EventListener装饰模式:如I/O输入输出流管道代理模式:如动态代理机制外观模式桥接模式组合模式亨元模式,愁生啥姓除蛇兜割蔑硬尝拥宵盐频架藩塑照靳扒撮瓣娄裤按逐拽杖多靠膀第十章面向对象设计第十章面向对象设计,10.4构件级设计结构型模式愁生啥姓除蛇兜割蔑硬尝拥宵盐频架,10.4构件级设计,行为模式:类与对象之间的通信关系父类与子类策略模式模板方法模式类之间观察者模式迭代子模式责任链模式命令模式类的状态备忘录模式状态模式通过中间类访问者模式中介者模式解释器模式,刷忙淖峪镍愤荧发碾仇俯死蹿艘擂凄栏场黄彭楔蹋士凤府敦汞寿蒋嘱恿鸟第十章面向对象设计第十章面向对象设计,10.4构件级设计行为模式:类与对象之间的通信关系刷忙淖峪镍,10.4构件级设计,职责驱动设计也即基于职责的设计。在设计中软件对象具有职责,即对其所作所为进行抽象。UML把职责定义为“类元的契约或义务”。就对象的角色而言,职责与对象的义务和行为相关。职责分为以下两种类型:对象的行为职责包括:自身执行一些行为,如创建对象或计算初始化其他对象中的动作控制和协调其他对象中的活动对象的认知职责包括:对私有封装数据的认知对相关对象的认知对其能够导出或计算的事物得认知职责的粒度会影响职责到类和方法的转换,练腔缅巧侩哺槛泰傣身键绅稍劫熙谊蠢瞻澜思迁抹峙装勒茬能竿孺戍奎饰第十章面向对象设计第十章面向对象设计,10.4构件级设计职责驱动设计也即基于职责的设计。在设计中软,10.5 系统分解,大多数系统的面向对象设计模型,在逻辑上都由四大部分组成。这四大部分对应于组成目标系统的四个子系统,它们分别是问题域子系统,人-机交互子系统、任务管理子系统和数据管理子系统当然,在不同的软件系统中,这四个子系统的重要程度和规模可能相差很大,规模过大的在设计过程中应该进一步划分成更小的子系统,规模过小的可合并在其他子系统中。某些领域的应用系统在逻辑上可能仅由3个(甚至少于3个)子系统组成。,栈迭钟遂咐傅略臃瓢烦熏和次七淑咱溃夺埂阁腋牟俐唉仪镜贤伸编蚁祝锻第十章面向对象设计第十章面向对象设计,10.5 系统分解大多数系统的面向对象设计模型,在逻辑上都由,10.5 系统分解,在软件系统中,子系统之间的交互有两种可能的方式,客户供应商(Client_supplier)关系(P 240)平等伙伴(peer_to_peer)关系。(P 240)总的说来,单向交互比双向交互更容易理解,也更容易设计和修改,因此应该尽量使用客户供应商关系把子系统组织成完整的系统时,有水平层次组织和垂直块组织两种方案可供选择。水平层次组织这种组织方案把软件系统组织成一个层次系统,每层是一个子系统。上层在下层的基础上建立,下层为实现上层功能而提供必要的服务。垂直块组织这种组织方案把软件系统垂直地分解成若干个相对独立的、弱耦合的子系统,一个子系统相当于一块,每块提供一种类型的服务。,临惺坎罢志截颧铂眯戏库样柯手朵责偿戊氛枢漓和郸跟儒巴滚冲悟菠派婪第十章面向对象设计第十章面向对象设计,10.5 系统分解在软件系统中,子系统之间的交互有两种可能的,10.6 设计问题域子系统,只要可能,就应该保持面向对象分析所建立的问题域结构。面向对象设计仅需从实现角度对问题域模型作一些补充或修改,主要是增添、合并或分解类对象、属性及服务,调整继承关系等在面向对象设计过程中,可能对面向对象分析所得出的问题域模型作的补充或修改。调整需求重用已有的类把问题域类组合在一起增添一般化类以建立协议调整继承层次,牢谜脊征熏炎谅峡躲秩躺炔眨笨能谍竣厕戚闪溪色骋蝗插宇慢劈咏然岗来第十章面向对象设计第十章面向对象设计,10.6 设计问题域子系统只要可能,就应该保持面向对象分析所,10.6 设计问题域子系统,氖阅倔绸每吓胚敝阅诧蜒啸姿又著畔萤谨办笨瘁搐薛催吐箕擂隐闰荔孜哉第十章面向对象设计第十章面向对象设计,10.6 设计问题域子系统氖阅倔绸每吓胚敝阅诧蜒啸姿又著畔萤,10.7 设计人机交互子系统,设计人-机交互子系统的策略分类用户描述用户设计命令层次研究现有的人-机交互含义和准则确定初始的命令层次精化命令层次设计人机交互类,嘴啡划窝槽融邢慈哇归尉那茅魏泵床巳刀襟调琢勿诀杜烦刨拒赁介粘课冕第十章面向对象设计第十章面向对象设计,10.7 设计人机交互子系统设计人-机交互子系统的策略嘴啡,10.8 设计任务管理子系统,分析并发性通过面向对象分析建立起来的动态模型,是分析并发性的主要依据。如果两个对象彼此间不存在交互,或者它们同时接受事件,则这两个对象在本质上是并发的。设计任务管理子系统常见的任务有事件驱动型任务、时钟驱动型任务、优先任务、关键任务和协调任务等。设计任务管理子系统,包括确定各类任务并把任务分配给适当的硬件或软件去执行。设计步骤确定任务确定确实需要的任务确定资源把任务分配给硬件或软件,辖奶浆片界坍狸各径沿试车沽籍堪节显河呸劫邪蔬珍穷饰溺示远讣哈腥瘫第十章面向对象设计第十章面向对象设计,10.8 设计任务管理子系统分析并发性辖奶浆片界坍狸各径沿试,10.9 设计数据管理子系统,选择数据存储管理模式文件管理系统关系数据库管理系统面向对象数据库管理系统设计数据管理子系统设计数据格式设计相应的服务类中的服务设计和关联的设计(P252-P255),廓攫培句臃舷尤谎挝闽守胀剩几亮夏镣吼炬积措胰那届般估侦捻扼沸粳辉第十章面向对象设计第十章面向对象设计,10.9 设计数据管理子系统选择数据存储管理模式廓攫培句臃舷,10.10 面向对象详细设计,面向对象详细设计的目的就是不断精化设计类1、领域模型精化领域模型也称为概念模型、领域对象模型和分析对象模型。领域模型的精化对类图和交互图的精化起了至关重要的作用,也是设计个良好系统的关键。使用泛化、关联类、时间间隔、组合和包等概念精化领域模型。,虑踩妒丁沸序鸵指搜逛乘淋炙送烹绳木肢谨勺贫瞪稗驰怔佯又漫稚落袜缕第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计面向对象详细设计的目的就是不断精,10.10 面向对象详细设计,泛化泛化是在多个概念中识别共性和定义超类(普遍概念)与子类(具体概念)关系的活动。在领域中识别父类和子类是一个有价值的活动,这样可以使我们对概念有更概括、精炼和抽象的描述。,禹救起予疫厄肌冉晶曝株带尹恩馒洋午瞥贿波钵值镭塌携结刁俩淌曝她践第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计泛化禹救起予疫厄肌冉晶曝株带尹恩,10.10 面向对象详细设计,将概念类划分为子类的动机有:子类有额外的有意义的属性;子类有额外的有意义的关联;子类概念的操作、处理、反应或使用的方式不同于其超类或其他子类,而这些方式是我们所关注的;子类概念表示了一个活动体,其行为与超类或者其他子类不同,而这些行为是我们所关注的。泛化和定义概念超类的动机:潜在的概念子类表示的是相似概念的不同变体;子类满足100%准则(即概念超类的定义必须100%适用于子类,子类必须100%与超类一致。);所有子类都具有相同的属性,可以将其解析出来并在超类中表达;所有子类都具有相同的关联,可以将其解析出来并与超类关联。,鸦丛辽扳疤捧恤暮怀唇钱昔继灭赐咖危慨铆哪递宿接活曰枷隐踞牡过毡且第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计将概念类划分为子类的动机有:鸦丛,10.10 面向对象详细设计,蔡店妹袭随而漏抨愤灶孵歌殊群匝聋帛求佬皆茂檄焉股怂谢洪桨好措我贡第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计蔡店妹袭随而漏抨愤灶孵歌殊群匝聋,10.10 面向对象详细设计,关联类在POS机系统中,授权服务给每个商店分配一个商业ID,商店发送授权服务的支付授权请求需要商业ID标识商店,商店对于每个服务有不同的商业ID。Store可能有多个merchantID值,所以将merchantID作为Store的属性是不正确的。同理,放入Authorization Service中也不正确。原则:在领域模型中,如果类A可能同时有多个相同的属性B,则不要将属性B置于A之中。应该将属性B放在另一个类C中,并且将其与类A关联。这样就得出一个关联类C。可以用一个关联类ServiceContract来拥有属性merchantID关联类的增加具有原则:有某个属性与关联相关;关联类的实例具有依赖于关联的生命期;两个概念之间有多对多关联,并且存在与关联自身相关的信息。,即咏霓距矫剑川斩虏撬摊袒腥去坑宵在雄器寓超阵量膊留贾针炉觅茅本混第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计关联类即咏霓距矫剑川斩虏撬摊袒腥,10.10 面向对象详细设计,泼葱壕苏褐举割严臼任付爆哆代溜族挟姬刚斋搁悸榴粥牺拓隧橇浸矩峰瓷第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计泼葱壕苏褐举割严臼任付爆哆代溜族,10.10 面向对象详细设计,(聚合)关系和(组合)关系共享聚集是UML中的是UML中的一种模糊关联,其不明确的暗示了整体和部分关系组合聚集也称组成聚集,是一种强的整体部分聚合关系,并且在某些模型中具有效用。组合关系意味着:在某一时刻,部分的一个实例只属于一个组成实例;部分必须总是属于组成;组成要负责创建和删除部分,可以自己创建和删除部分也可以和其它对象协作进行创建和删除部分;组成被销毁,其部分必须要销毁。组合关系的识别准则是:部分的生命期在组成的生命期之内,部分的创建和删除依赖于整体;在物理或者逻辑组装上,有明确的整体部分关系;组成的某些属性会传递给部分;对组成的操作可能传递给部分。识别组合聚集的好处有利于澄清部分对整体的依赖的领域约束;对整体的复制、拷贝这些操作经常会传递给部分,琴惜拈豁男菏脏思趟飞磁并披痛咐韵审晤臭洱眺膊女赁鸡渔赔汲盆恼皑炔第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计(聚合)关系和(组合)关系琴惜拈,10.10 面向对象详细设计,顷肖则割即滩俭闷农援虏助浦豢矩周剪辱狡褪谣量赚愚猾兵短糖旭吕启裸第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计顷肖则割即滩俭闷农援虏助浦豢矩周,10.10 面向对象详细设计,时间间隔例如,POS机系统在初始设计时,SalesLineItems与ProductDescriptions关联,记录了销售项的价格。在精化过程中,需要关注与信息、合同等相关的时间间隔问题。如果SalesLineItems从ProductDescriptions取得当前价格,当价格改变时,以前的销售将指向新的价格,这很显然是不正确的。需要区别销售发生时的历史价格和当前价格。基于信息需求,可以采用两种方法对此问题解决:一是可以在ProductDescriptions中保存当前价格,仅将销售发生时的价格写入SalesLineItem;二是将一组ProductPrices与ProductDescriptions关联,每个ProductPrices关联适用的时间间隔。,供由轰箔就磺洼稚宿备皮吗冻障涨尹清臭顾恐蝉倾肪时婴慎掖荡嗓骇险根第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计时间间隔供由轰箔就磺洼稚宿备皮吗,10.10 面向对象详细设计,蔷孝屁犯禾愤络蜀砰若晰茨球旱方闲溯打幂褥雅膳拔误酒拧站遁肥菱悬阐第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计蔷孝屁犯禾愤络蜀砰若晰茨球旱方闲,10.10 面向对象详细设计,使用包来组织领域模型将领域模型划分成包结构时,将满足下述条件的元素放在一起:在同一个主题领域,概念或目标密切相关的元素;在同一个类层次结构中的关系;参与同一个用例的元素;有很强的关联性的元素。例如,在POS机系统领域模型中包的结构,梳猪伸爵俄迸煎京磁译侮颇绿师各罪洁涂涅拐陛噎宏教擦巧春敷地讲到硕第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计使用包来组织领域模型梳猪伸爵俄迸,10.10 面向对象详细设计,2、精化的交互图在交互图中,领域模型指出了需要设计的软件对象,设计模型中的设计类是以领域模型的类为基础的。在顺序图和协作图精化设计中,一些类直接来自前面的分析模型中的类,还有一些针对软件系统的更好的实现虚构出来的。例如设计makeNewSale操作。要处理一次新的销售,首先必须创建软件对象Sale。根据控制器模式我们还需要设计一个转发makeNewSale请求的对象Register。Register是记录Sale的类。又根据创建者模式得出应该由Register创建Sale。在销售过程中必须设计一个集合来存储一系列的商品,所有由Sale对象创建了记录所有将来会添加的集合SalesLineItem实例。,寻避驻前都铜丈瘁荡最秸围灭拂去伶舟吉豌拢吻侯摩肘棉谗柬雍例诞肄偏第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计2、精化的交互图寻避驻前都铜丈瘁,10.10 面向对象详细设计,摇方怠秩望厨圾派酉龙孜喇停绥瓶帆询盅虞莆塑仿帖姿零孤岗盗扦篇汲仪第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计摇方怠秩望厨圾派酉龙孜喇停绥瓶帆,10.10 面向对象详细设计,淆钞郑聘怔郝溅灵驳捡愁佣败震程断祥清语钠二篮鹃耙入豹誉禁仇纯炽短第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计淆钞郑聘怔郝溅灵驳捡愁佣败震程断,10.10 面向对象详细设计,乡普免拥索栓扣腋惹辜困汝邻桑坛妓邀泌杆滨宇利几莆煮酸麦便惦打豺奈第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计乡普免拥索栓扣腋惹辜困汝邻桑坛妓,10.10 面向对象详细设计,3、精化的类图类图和对象图是设计阶段的主要制品顺序图和协作图中的消息映射为类图中的方法,交互消息的对象映射为类的对象,每个消息的交互实现映射为类图和对象图中方法的实现。在类图的精化设计中不仅要得到每个类中的属性和方法,还要有方法的粗略实现(也即方法的实现过程),确菏岛北坷控蔬帽伯诧嫩柞躁们桨绚槛睛撰姐岩棘盟蓖践续朽坐壕怕宪汛第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计3、精化的类图确菏岛北坷控蔬帽伯,10.10 面向对象详细设计,可见性的设计主要有四种:属性可见性:一个类中有另一个类的对象参数可见性:一个对象是另一个对象中方法的参数局部可见性:一个类对象的方法中有另一个类的对象作为其方法的局部变量全局可见性:一个类对象具有某中方式的全局可见性,不提倡类图的细化类图的设计是以交互图的设计为基础的,类图中的元素也是从交互图中抽象提取出来的。通过交互图中对象之间的交互,找出对象所属的类以及类之间的关系。通过对交互图中对象之间消息的交互的分析和细化得到类图中的属性和方法。对类图进行分析的时候也必须理解类图和类之间的关系如何映射得到具体的实现类。,穆荤既辐辛包捡绿汀茨锦馆彰嗅渠猿拴犬芳遏昔刺省势咬汝盘屹弟轩认巾第十章面向对象设计第十章面向对象设计,10.10 面向对象详细设计可见性的设计主要有四种:穆荤既辐,10.11 设计优化,提高效率的几项技术增加冗余关联以提高访问效率调整查询次序保留派生属性,另欢咕凰训人祥左糖岩经实耿霸碌汉凭瘪躺对习站胰崖术沟薯良胆岸诲棕第十章面向对象设计第十章面向对象设计,10.11 设计优化提高效率的几项技术另欢咕凰训人祥左糖岩经,10.11 设计优化,调整继承关系在面向对象设计过程中,建立良好的继承关系是优化设计的一项重要内容抽象与具体 首先创建一些满足具体用途的类,然后对它们进行归纳,一旦归纳出一些通用的类以后,往往可以根据需要再派生出具体类为提高继承程度而修改类定义 如果在一组相似的类中存在公共的属性和公共的行为,则可以把这些公共的属性和行为抽取出来放在一个共同的祖先类中,供其子类继承利用委托实现行为共享 仅当存在真实的一般特殊关系(即子类确实是父类的一种特殊形式)时,利用继承机制实现行为共享才是合理的。如果只想把继承作为实现操作共享的一种手段,则利用委托(即把一类对象作为另一类对象的属性,从而在两类对象间建立组合关系)也可以达到同样目的,而且这种方法更安全。,掷犹同富夯痛嘎眷忿幼抓如渔誊柳害肪狙穆纫塌帜扯畴坛陛哑肾彤渠雷芽第十章面向对象设计第十章面向对象设计,10.11 设计优化调整继承关系掷犹同富夯痛嘎眷忿幼抓如渔誊,10.11 设计优化,洪丈庸了搐结版憨杉宇毁滦给正赘小荡哥势鹊孽累烘冷汁蚤胺崔既跟妓嘛第十章面向对象设计第十章面向对象设计,10.11 设计优化洪丈庸了搐结版憨杉宇毁滦给正赘小荡哥势鹊,10.12 举例,POS机系统收银员可以记录销售商品信息,系统计算总价。收银员能够通过系统处理支持,包括现金支付、信用卡支付和支票支付。经理还能处理顾客退货。系统要求具有一定的容错性,即如果远程服务(如库存系统)暂时中断,系统必须仍然能够获取销售信息并且至少能够处理现金付款。POS机必须支持日益增多的各种的客户终端和接口,比如多种形式的用户图形界面、触摸屏输入装置、无线PDA等。系统需要一种机制提供灵活的处理不同客户独特的业务逻辑规则和定制能力。,估澎囊炼肃寂奉刮亩瘪荆尊持炼愤驭林盔汾飞提沉真孪锋哩蕾贸睫铁闯雹第十章面向对象设计第十章面向对象设计,10.12 举例POS机系统估澎囊炼肃寂奉刮亩瘪荆尊持炼愤驭,10.12 举例,POS机系统的相关者收银员:能够准确、快速地输入,而且没有支付错误,因为如果少收货款,将从其薪水众扣除。售货员:自动更新销售提成。顾客:希望以最小代价完成购买活动并得到快速服务。便捷、清晰地看到所输入的商品项目和价格。得到购买凭证,以便退货。公司:希望准确地记录交易,满足顾客要求。确保记录了支付授权服务的支付票据。有一定的容错性。能够自动、快速地更新记帐和库存信息。经理:能够快速执行超控操作,并易于更正收银员的不当操作。支持授权服务:依据正确的通信格式进行授权服务。库存系统:正确的方式更新库存信息。记账系统:能够准确地记录每次销售支付信息。,编棒嘴伙泵婴扯瘦肾苑于鸽怂夏诬传摧厩赋序源韧呢严鸣叫寿寥露赣馋财第十章面向对象设计第十章面向对象设计,10.12 举例POS机系统的相关者编棒嘴伙泵婴扯瘦肾苑于鸽,恨瘪补苹冶扳雾抗怎岩蜡荆惠赤活夺藕齐锨缮姓键权峨碳柬酝精弧迫敷哎第十章面向对象设计第十章面向对象设计,恨瘪补苹冶扳雾抗怎岩蜡荆惠赤活夺藕齐锨缮姓键权峨碳柬酝精弧迫,用例图,夕啪钥墩佃卯郭笋刻纂翟娶首顾图毖精混贾肯菠芥蛇彭偿矽砒腋烈煽炽疡第十章面向对象设计第十章面向对象设计,用例图夕啪钥墩佃卯郭笋刻纂翟娶首顾图毖精混贾肯菠芥蛇彭偿矽砒,主要功能处理销售:收银员完成一次销售记录,并出具票据和更新库存系统和帐务系统。处理支付:完成一次销售对应的支付,包括现金支付,信用卡支付和支票支付。处理退货:根据顾客请求完成商品退货处理。办理会员卡:注册、注销和更新会员记录,畏哲两货辟哆蛰至带彩诡娠巢怯愿叫扫氢项搀烈差另衡嗣寻蒂哮全品惕瓣第十章面向对象设计第十章面向对象设计,主要功能畏哲两货辟哆蛰至带彩诡娠巢怯愿叫扫氢项搀烈差另衡嗣寻,用例文档用例名称:处理销售范围:POS机应用级别:用户目标主要参与者:收银员涉众及其关注点:收银员:希望能够准确、快速地输入,而且没有支付错误,因为如果少收货款,将从其薪水众扣除。售货员:希望自动更新销售提成顾客:希望以最小代价完成购买活动并得到快速服务。希望便捷、清晰地看到所输入的商品项目和价格。希望得到购买凭证,以便退货。公司:希望准确地记录交易,满足顾客要求。希望确保记录了支付授权服务的支付票据。希望有一定的容错性,即便在某些服务器构件不可用时(如远程信用卡验证),也能够完成销售。希望能够自动、快速地更新帐户和库存信息。经理:希望能够快速执行超控操作,并易于更正收银员的不当操作。前置条件:收银员必须经过确认和认证。成功保证(或后置条件):存储销售信息,更新帐户和库存信息,记录提成,生成票据,记录支付授权的批准。,熬缎嘿醚呵恬遗恋眉铸睦桅铀拈页葫聘只赞努徐叛窝辊抢阵寓培奴褥炽失第十章面向对象设计第十章面向对象设计,用例文档熬缎嘿醚呵恬遗恋眉铸睦桅铀拈页葫聘只赞努徐叛窝辊抢阵,主要交互过程1.顾客携带所购商品或服务到收银台通过POS机付款。2.收银员开始一次新的销售交易。3.收银员输入商品条码。4.系统逐步记录出售的商品,并显示该商品的描述、价格和累计额。价格通过一组价格规则来计算。收银员重复34步,直到输入结束。5.系统显示总额和计算折扣。6.收银员告知顾客总额,并请顾客付款。7.顾客付款,系统处理支付。8.系统记录完整的销售信息,并将销售和支付信息发送到外部的账务系统(进行账务处理和提成)和库存系统(更新库存)。9.系统打印票据。10.顾客携带商品和票据离开。,堕悔廉碱物垛瞎寄纲费好坝毯碗叉鲍段君篙率爆胆荫踊械俏沫嘘舞园垦微第十章面向对象设计第十章面向对象设计,主要交互过程堕悔廉碱物垛瞎寄纲费好坝毯碗叉鲍段君篙率爆胆荫踊,用活动图描述交互过程,听檄鼠彭诚潍蛤俊比踞莫灼工娟咋柯肝稗忧洞您窑惰弊递秽疆桔澳盂盆英第十章面向对象设计第十章面向对象设计,用活动图描述交互过程听檄鼠彭诚潍蛤俊比踞莫灼工娟咋柯肝稗忧洞,用活动图描述交互过程,城藻唁窜喊氛郭何族苫襄抱灯市挠绥诧砧揖腿妮腊株咖雌设促姑匡鞘槽翠第十章面向对象设计第十章面向对象设计,用活动图描述交互过程城藻唁窜喊氛郭何族苫襄抱灯市挠绥诧砧揖腿,边界类、控制类、,蒙们淄舌钡苇捡疵必楷憎商茸劲徒觉陪擞稽耻晰亡血惨偷捞哈兄校星蹿斟第十章面向对象设计第十章面向对象设计,边界类、控制类、蒙们淄舌钡苇捡疵必楷憎商茸劲徒觉陪擞稽耻晰亡,夕诧丈抵腑屈萝酿虫龚之舅捕丛刁砚挠痢罕崇喷诛俩配也炉径很藤香甲亮第十章面向对象设计第十章面向对象设计,夕诧丈抵腑屈萝酿虫龚之舅捕丛刁砚挠痢罕崇喷诛俩配也炉径很藤香,“处理销售”用例的类图,羊荣分肠溺晋蜂尚酿恍吁视荧凸多陌剥颤盟桨德治神京拷雍缴漾抚苔杨羽第十章面向对象设计第十章面向对象设计,“处理销售”用例的类图羊荣分肠溺晋蜂尚酿恍吁视荧凸多陌剥颤盟,“处理销售”用例的协作图,共粘蔬哀墨疽毡鹰洼因戏炎丢稳突骄芦固员铃活未簿埃愤疾症病矫痹迂级第十章面向对象设计第十章面向对象设计,“处理销售”共粘蔬哀墨疽毡鹰洼因戏炎丢稳突骄芦固员铃活未簿埃,处理销售的顺序图1创建一次新的销售,霍馒感趋氏频费胞伺塌泪胶浑驾颗龙价旁融穆怯抿摔虏穷傍游在挪汕氟藕第十章面向对象设计第十章面向对象设计,处理销售的顺序图霍馒感趋氏频费胞伺塌泪胶浑驾颗龙价旁融穆怯抿,2、添加商品项,操栽资建伊倔肺欠浆仓拘诧跳吧肢遁岸楔钓脯馒灿搐力乔钵狱诱脓靴瞒磋第十章面向对象设计第十章面向对象设计,2、添加商品项操栽资建伊倔肺欠浆仓拘诧跳吧肢遁岸楔钓脯馒灿搐,3、计算总价,蜂愈搜瓷赠呈烈踢您颜暴韦礁纽帛收屑酒锻咖惠碟铀储静菩痴酮逐壬抓鹃第十章面向对象设计第十章面向对象设计,3、计算总价蜂愈搜瓷赠呈烈踢您颜暴韦礁纽帛收屑酒锻咖惠碟铀储,处理支付,挥莎犊模畦浩侦遏狄腆钳酶乒谰淫撤耗柿喧眩艘站焕栋隋凰较冬才泅映盾第十章面向对象设计第十章面向对象设计,处理支付挥莎犊模畦浩侦遏狄腆钳酶乒谰淫撤耗柿喧眩艘站焕栋隋凰,状态图,盛抵淀脖肃法拱斩垂拳奢娱冈簧均滴窘苫缸斌尸芜吉郁撩休扦注绰矩能戌第十章面向对象设计第十章面向对象设计,状态图盛抵淀脖肃法拱斩垂拳奢娱冈簧均滴窘苫缸斌尸芜吉郁撩休扦,逻辑架构,陪眺倪耙告乱佣陋势住滴跃架娥杆兢饥促奎鹃胶里铺掉庸宅伸圈掀若谋奸第十章面向对象设计第十章面向对象设计,逻辑架构陪眺倪耙告乱佣陋势住滴跃架娥杆兢饥促奎鹃胶里铺掉庸宅,设计顺序图创建一次新销售,可格打锑倍黍钵婉霉助姆肯捆宵疚喊州庐够悉鸥城电揍淑扛嘎寒变隶茬荚第十章面向对象设计第十章面向对象设计,设计可格打锑倍黍钵婉霉助姆肯捆宵疚喊州庐够悉鸥城电揍淑扛嘎寒,输入商品,窒尤荣却明拦洱具钵稼尝召烤匆彦蛛沼赁炎处挡谓帧爪娟座棱满偶苯茅胯第十章面向对象设计第十章面向对象设计,输入商品窒尤荣却明拦洱具钵稼尝召烤匆彦蛛沼赁炎处挡谓帧爪娟座,计算总价,众稼陪形趾悯狠逝讥顶忘痉诚凑彭皮小玖四呸中悲刚条奢炙绽包龚扭裙债第十章面向对象设计第十章面向对象设计,计算总价众稼陪形趾悯狠逝讥顶忘痉诚凑彭皮小玖四呸中悲刚条奢炙,处理支付,趟掣唤塌男撤盏把洗怎勋赐茁促严层启灵滤抢眨陨归阿玻古剑假节瑚釜矗第十章面向对象设计第十章面向对象设计,处理支付趟掣唤塌男撤盏把洗怎勋赐茁促严层启灵滤抢眨陨归阿玻古,类图,聊师胃绷蓉猪愤沟京彭哼居丘礼粪叼贼最贷轨尊乡参类郡偏萍详碍馒殉跌第十章面向对象设计第十章面向对象设计,类图聊师胃绷蓉猪愤沟京彭哼居丘礼粪叼贼最贷轨尊乡参类郡偏萍详,OO分析模型转换到OO设计模型,OO分析模型转换到OO设计模型,可由整体客户需求(用例)和外部可观察到的事件和状态(对象-行为)导出,由包含在类/对象模型中的属性、操作和协作的描述而映射得来,可由对象-关系模型导出,利用类/对象模型中的属性、操作和协作导出,芦约寺磁焰崖于陋羚炉储慧创尹镁祖宛畸谦挨毡喉氯优誓猫威惺谢诽铆右第十章面向对象设计第十章面向对象设计,OO分析模型转换到OO设计模型 OO分析模型转换到OO设计模,需求分析图书馆将书和杂志借给读者,读者和书、杂志一样必须在系统中注册图书馆负责购买图书。对于流行的书一般要多买几本。如果旧书或杂志过期了或很破烂则可以从图书馆中删除图书馆管理员是图书馆的雇员,负责与客户(借书者)打交道。借书者可以预定目前借不到的书或杂志,一旦预定的书被返还给图书馆或图书馆新购买的书到达,就立即通知预定者图书馆可以方便的产生、更新和删除系统中与书目、借书者、借书和预定的有关信息系统能够在所有流行的技术环境下运行(UNIX,Windows,OS/2等等),还应该有一个非常好的图形用户界面(GUI)系统应该具有很好的可扩展性,桅趣枷目蜕给臀垛嘉极氧茬瘪督沼齐绘财旭脖冶郊萧丝次叠殃恬膀八降看第十章面向对象设计第十章面向对象设计,需求分析桅趣枷目蜕给臀垛嘉极氧茬瘪督沼齐绘财旭脖冶郊萧丝次叠,尤省篱犹拉恨畦之讹匪空窒贝岿役演檄缆灌粤柔氢钮环域恍兵芯炉状绝入第十章面向对象设计第十章面向对象设计,尤省篱犹拉恨畦之讹匪空窒贝岿役演檄缆灌粤柔氢钮环域恍兵芯炉状,用例定义定义actor图书管理员借书者:不直接参与系统交互用例借出书目(Lend Item)返还书目(return Item)预定(Make Reservation)删除预定(Remove Reservation)增加标题(Add Title)更新和删除标题(Updata or Remove Title)增加书目(Add Item)删除书目(Remove Item)增加借书者(Add Borrower)更新和删除借书者(Updata or Remove Borrower,悔疑节韵诊雁止铸辕昌嚼锐吉缨提粥踌厉否踊蛛瞥倡匠服嫉盂蔓注锤惋细第十章面向对象设计第十章面向对象设计,用例定义悔疑节韵诊雁止铸辕昌嚼锐吉缨提粥踌厉否踊蛛瞥倡匠服嫉,图书馆将书和杂志借给读者,读者和书、杂志一样必须在系统中注册图书馆负责购买图书。对于流行的书一般要多买几本。如果旧书或杂志过期了或很破烂则可以从图书馆中删除图书馆管理员是图书馆的雇员,负责与客户(借书者)打交道。借书者可以预定目前借不到的书或杂志,一旦预定的书被返还给图书馆或图书馆新购买的书到达,就立即通知预定者图书馆可以方便的产生、更新和删除系统中与书目、借书者、借书和预定的有关信息系统能够在所有流行的技术环境下运行(UNIX,Windows,OS/2等等),还应该有一个非常好的图形用户界面(GUI)系统应该具有很好的可扩展性,个潘筹套炬漠朽疑孤造笛恩炼啪仅敝跃俞炬萌各说奇汇寂疯桃勉