面向对象分析与设计(7)-高级设计原则与设计模式

面向对象分析与设计(7)-高级设计原则与设计模式

ID:44999970

大小:561.00 KB

页数:54页

时间:2019-11-07

面向对象分析与设计(7)-高级设计原则与设计模式_第1页
面向对象分析与设计(7)-高级设计原则与设计模式_第2页
面向对象分析与设计(7)-高级设计原则与设计模式_第3页
面向对象分析与设计(7)-高级设计原则与设计模式_第4页
面向对象分析与设计(7)-高级设计原则与设计模式_第5页
资源描述:

《面向对象分析与设计(7)-高级设计原则与设计模式》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、面向对象分析与设计高级设计原则与设计模式内容提要高级设计原则设计模式AOP编程面向对象设计原则-OCP开放封闭原则(OCP)类模块应该是可扩展的,但是不可修改ClosedforModification;OpenforExtension(对扩展开放,对更改封闭)OCP说明了软件设计应该尽可能地使架构稳定而又容易满足不同的需求。如何在OO中引入OCP?把对实体的依赖改为对抽象的依赖.OCP举例1-收音机收听节目时需要打开收音机电源,对准电台频率和进行音量调节。但是对于不同的收音机,实现这三个步骤的细节往往有所不同。不太可能针对每种不同类型的收音机通过一个收音机类来实现(通过重载)这些不同的操作方式

2、。OCP举例1-收音机(续)定义一个收音机接口,提供开机、关机、增加频率、降低频率、增加音量、降低音量六个抽象方法。不同的收音机继承并实现这六个抽象方法。新增收音机类型不会影响其它原有的收音机类型,收音机类型扩展极为方便。已存在的收音机类型在修改其操作方法时也不会影响到其它类型的收音机。OCP举例1-收音机(续)OCP举例2-赛车OCP举例2-赛车(续)OCP总结OCP是OO设计原则中高层次的原则,其余的原则对OCP提供了不同程度的支持。为了实现OCP,我们会自觉或者不自觉地用到其它原则或是诸如Bridge、Decorator等设计模式。对于一个应用系统而言,实现OCP并不是设计目的,我们所希

3、望的只是一个稳定的架构。所以对OCP的追求也应该适可而止,不要陷入过渡设计。面向对象设计原则-SRPSingleResponsibilityPrinciple单一职责原则所谓单一职责,就是一个设计元素只做一件事“单一职责”就是要在设计中为每种职责设计一个类,彼此保持正交,互不干涉。(二重奏)SRP举例-调制解调器SRP总结违反SRP通常是由于过于“真实”地设计了一个类所造成的。因此,解决办法是往更高一层进行抽象化提取,将对某个具体类的依赖改变为对一组接口或抽象类的依赖。面向对象设计原则-LSPLiskov于1987年提出了一个关于继承的原则“Inheritanceshouldensuretha

4、tanypropertyprovedaboutsupertypeobjectsalsoholdsforsubtypeobjects.”“继承必须确保超类所拥有的性质在子类中仍然成立。”也就是说,当一个子类的实例应该能够替换任何其超类的实例时,它们之间才具有is-A关系。LSP原则实质一个对象是一组状态和一系列行为的组合体。状态是对象的内在特性,行为是对象的外在特性。LSP所表述的就是在同一个继承体系中的对象应该有共同的行为特征。这一点上,表明了OO的继承与日常生活中的继承的本质区别。LSP举例如何确保对象的行为?每个方法调用之前,该方法应该校验传入参数的正确性,只有正确才能执行该方法,否则认为

5、调用方违反契约,不予执行。这称为前置条件(Pre-condition)。一旦通过前置条件的校验,方法必须执行,并且必须确保执行结果符合契约,这称之为后置条件(Post-condition)。对象本身有一套对自身状态进行校验的检查条件,以确保该对象的本质不发生改变,这称之为不变式(Invariant)。如何满足LSP?当存在继承关系时,子类中方法的前置条件必须与超类中被覆盖的方法的前置条件相同或者更宽松;子类中方法的后置条件必须与超类中被覆盖的方法的后置条件相同或者更为严格。OO语言特性继承并且覆盖超类方法的时候,子类中的方法的可见性必须等于或者大于超类中的方法的可见性,子类中的方法所抛出的受检

6、异常只能是超类中对应方法所抛出的受检异常的子类。public classSuperClass{     public voidmethodA() throwsIOException{} } public classSubClassAextendsSuperClass{     //this overriding is illegal.     private voidmethodA() throws Exception{} } public classSubClassBextendsSuperClass{     //this overriding is OK.     public vo

7、idmethodA() throwsFileNotFoundException{} }JAVA语言从Java5开始,子类中的方法的返回值也可以是对应的超类方法的返回值的子类。这叫做“协变”(Covariant)public classSuperClass{     public Numbercaculate(){         return null;     } } public class

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。