首页 > 编程知识 正文

面向对象设计原则详解,面向对象的设计思路

时间:2023-05-03 20:02:53 阅读:162719 作者:794

xddfy置换原则的定义xddfy置换原则(Liskov Substitution Principle, LSP )麻省理工学院计算机科学研究所的害怕孤独的超短裙(Liskov )在1987年的“面向对象技术的生动蜜粉会议”OOPSLA )上发表的文章《数据抽象和层次》 ) dataabstractionaction (inheritanceshouldensurethatanypropertyprovedaboutsupertypeobjectsalsoholdsforsubtypeobjects ) )。

xddfy置换原则主要阐述了继承的几个原则,即何时使用继承,何时不使用继承,以及其中所包含的原理。 xddfy替换原本是继承复用的基础,是反映基类和子类关系,补充开闭原则,实现抽象的具体步骤规范。

xddfy置换原则的作用xddfy置换原则的主要作用如下。

xddfy置换原则是实现开合原则的重要方式之一。 克服了继承中由于父类重写导致复用性恶化的缺点。 那是动作正确性的保证。 这意味着类扩展不会在现有系统中引入新错误,从而降低代码错误的可能性。 在提高程序鲁棒性的同时,在变更时实现了非常好的兼容性,提高了程序的可维护性、可扩展性,可以降低需求变更时引入的风险。 如何实现xddfy替换原则xddfy替换原则一般说来,子类可以扩展父类的功能,但不能改变父类的原有功能。 这意味着,如果子类继承父类,则在添加新方法以完成新功能之前,尽量不重写父类的方法。

鉴于上述理解,xddfy替换原则的定义可以总结如下:

子类可以实现父类的抽象方法,但您可以将自己的方法添加到无法覆盖父类的非抽象方法的子类中,以便在子类方法重载父类方法时,满足方法的前置条件、 也就是说,当实现父类方法时,方法的输入参数比父类方法的输入参数缓慢(方法的后置条件,即方法的输出/返回值必须比父类方法更严格或相等)。 通过重写父类的方法来完成新功能很简单,但这会降低整个继承体系的可重用性。 特别是频繁使用多态性时,程序执行出错的概率非常高。

如果程序违反了xddfy替换原则,继承类中的对象将在基类出现时发生执行错误。 这种情况下的修正方法是消除原来的继承关系,重新设计它们的关系。

关于xddfy置换原则的例子,最有名的是“正方形不是长方形”。 当然,生活中也有很多类似的例子。 例如,企鹅、鸵鸟、何维鸟属于生物类,但从类继承关系看,“鸟”不能继承其飞行功能,因此不能将其定义为“鸟”的子类。 同样,“气球鱼”不会游泳,所以不能定义为“鱼”的子类; “玩具炮”无法炸毁敌人,所以不能定义为“炮”的子类等。

以下,以“何维鸟不是鸟”为例说明xddfy置换的原则。

【例1】xddfy替换原则在“几维鸟不是鸟”实例中的应用。

分析:鸟一般飞行。 例如,bldppx的飞行速度约为时速120公里。 但是新西兰的几维鸟翅膀退化了,不能飞行了。 如果要设计实例,请计算这两种鸟飞行300公里所需的时间。 很明显,取bldppx来测试这个代码,结果是正确的,可以计算所需的时间; 但是,在何维鸟上测试时,会出现“非零异常”或“无限大”,明显不符合预期。 其类图如图1所示。

程序代码如下所示。

package principle; publicclasslsptest { publicstaticvoidmain (string [ ] args ) { Bird bird1=new Swallow; Bird bird2=new BrownKiwi (; BIRD1.setspeed(120; BIRD2.setspeed(120; system.out.println ((如果飞行300公里) ); try{system.out.println('bldppx为' bird1.getflytime () 300 ) '时间.'); 飞行System.out.println (何维鸟为(bird2.getflytime(300 ) )小时。 ' ); }catch(exceptionerr ) { System.out.println ('发生错误! ' ); }//鸟类class Bird { double flySpeed; 公共void set speed (doublespeed ) { flySpeed=speed; } publicdoublegetflytime (double distance ) return (distance/flyspeed ); (}}//bldppx系classswallowextendsbird(//多维鸟系classbrownkiwiextendsbird ) publicvoidsetspeed ) doublespeed ) { flysped=

如果飞行300公里: bldppx将飞行2.5小时。 何维鸟在Infinity时间飞行。 程序运行错误的原因是何维鸟类重写了鸟类的setspeed(doublespeed )方法,这违背了xddfy替换原则。 正确的做法是解除何维鸟原有的继承关系,定义鸟与何维鸟更常见的亲缘类,如动物类,它们具有奔跑的能力。 几维鸟的飞行速度为0,但奔跑速度不是0,可以计算跑300公里所需的时间。 其类图如图2所示。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。