面向对象编程原则.ppt
上传人:qw****27 上传时间:2024-09-12 格式:PPT 页数:44 大小:4.6MB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

面向对象编程原则.ppt

面向对象编程原则.ppt

预览

免费试读已结束,剩余 34 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

设计模式(1)目录面向对象的设计原则Booch和Rumbaugh的新的“统一”标识符单一职责SRP有两个不同的Application使用Rectangle类,如上图。一个是计算几何面积的,Rectangle类会在几何形状计算方面给予它帮助。另一个Application实质上是绘制一个在舞台上显示的矩形。Rectangle类具有了两个职责,第一个职责是提供一个矩形形状几何数据模型;第二个职责是把矩形显示在屏幕上。对于SRP的违反导致了一些严重的问题。首先,我们必须在计算几何应用程序中包含核心显示对象的模块。其次,如果绘制矩形Application发生改变,也可能导致计算矩形面积Application发生改变,导致不必要的重新编译,和不可预测的失败。一个较好的设计是把这两个职责分离到下图所示的两个完全不同的类中。这个设计把Rectangle类中进行计算的部分一道GeometryRectangle类中。现在矩形绘制方式的改变不会对计算矩形面积的应用产生影响了。1.1什么是职责1.2持久化2.OCP开闭原则为什么要OCP?玉帝的智慧如何在OO中引入OCP原则?为了能够重用这辆昂贵的赛车,工程师们提出了解决方案:首先,在车身的设计上预留出安装引擎的位置和管线。然后,根据这些设计好的规范设计引擎(或是引擎的适配器)。于是,新的赛车设计方案就这样诞生了。做到开闭原则,就注意以下两点。2)多使用接口Liskov(女程序员)替换原则正方形不是长方形正方形不是长方形正方形不是长方形鸵鸟不是鸟鸵鸟不是鸟鸵鸟不是鸟4.4鸵鸟到底是不是鸟?鸵鸟到底是不是鸟?A需求期望鸟类提供与飞翔有关的行为,即使鸵鸟跟普通的鸟在外观上就是100%的相像,但在A需求范围内,鸵鸟在飞翔这一点上跟其它普通的鸟是不一致的,它没有这个能力,所以,鸵鸟类无法从鸟类派生,鸵鸟不是鸟。B需求期望鸟类提供与羽毛有关的行为,那么鸵鸟在这一点上跟其它普通的鸟一致的。虽然它不会飞,但是这一点不在B需求范围内,所以,它具备了鸟类全部的行为特征,鸵鸟类就能够从鸟类派生,鸵鸟就是鸟。所有派生类的行为功能必须和使用者对其基类的期望保持一致,如果派生类达不到这一点,那么必然违反里氏替换原则。在实际的开发过程中,不正确的派生关系是非常有害的。伴随着软件开发规模的扩大,参与的开发人员也越来越多,每个人都在使用别人提供的组件,也会为别人提供组件。最终,所有人的开发的组件经过层层包装和不断组合,被集成为一个完整的系统。每个开发人员在使用别人的组件时,只需知道组件的对外裸露的接口,那就是它全部行为的集合,至于内部到底是怎么实现的,无法知道,也无须知道。所以,对于使用者而言,它只能通过接口实现自己的预期,如果组件接口提供的行为与使用者的预期不符,错误便产生了。里氏代换原则就是在设计时避免出现派生类与基类不一致的行为。如何正确地运用里氏代换原则动物类Animal:classAnimal{stringname;public:voidAnimal(Stringname){this.name=name;}voidprintName(){try{cout<<"Iama"+name+"!“<<endl;}catch(…){cout<<"Anerroroccured!“<<endl;}}}测试类:TestAnimalclassTestAnimal{public:voidTestLSP(Animal&animal){if(animalinstanceofCat){Catcat=(Cat)animal;cat.printName();cat.Mew();}if(animalinstanceofDog){Dogdog=(Dog)animal;dog.printName();dog.Bark();}}}依赖倒置DIP依赖倒置DIP解决办法一解决办法一接口隔离ISP二、举例说明:此时,我的电脑和你的电脑要实现该接口,就必须实现所有的接口函数,显然接口混乱,并不能够满足实际的需求:我的电脑可能是用来工作和学习的,你的电脑可能是用来看电影、上网和打游戏等娱乐活动的,那我们就可以将电脑的角色划分为两类,如图10-4所示。2.角色对应的接口指某种语言具体的接口定义,有严格的定义和结构。比如Java语言里面的Interface结构。对不同的客户端,同一个角色提供宽窄不同的接口,也就是定制服务,仅仅提供客户端需要的行为,客户端不需要的行为则隐藏起来。对于图10-4中的接口定义,如果我的电脑除了工作和学习之外,还想上网,那就没办法了,必须实现娱乐电脑的接口,这样就必须实现它的所有接口函数了。此时我们需要将对应角色中的接口再进行划分,如图10-5所示。这样,经过以上的划分,如果我的电脑想增加某一项