面向对象的设计原则四

面向对象的设计原则四

ID:42060119

大小:59.00 KB

页数:8页

时间:2019-09-07

面向对象的设计原则四_第1页
面向对象的设计原则四_第2页
面向对象的设计原则四_第3页
面向对象的设计原则四_第4页
面向对象的设计原则四_第5页
资源描述:

《面向对象的设计原则四》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、动机当我们设计程序模块吋,我们会创建一些类层次结构,然后我们通过扩展-•些类來创建它们的子类。我们必须确保了类只是扩展而没有替换父类的功能,否则当我们在已有程序模块屮使用它们时将会产生不可预料的结果。里氏代换原则表明当一个程序模块使用基类吋,基类的引用可以被子类替换而不影响模块的功能。里氏代换原则基类完全能够被子类替代而不影响模块的功能。实例对于多态来说里氏代换原则好像是很显然的事情,例如:Java代码1.publicvoiddrawShape(Shapes){2.//Codehere.3.}对于Shape的任何了类來说,drawShape方法都应该能很好的工作

2、。我们必须小心的实现子类以免无意中违反了里氏代换原则,如果一个函数不满足里氏代换原则,那么它可能必须显式地引用子类对象,这样的函数同样违反了开闭原则,因为当添加新的子类时,必须修改它。考虑下而的矩形类:Java代码1.//AveryniceRectangleclass.2.publicclassRectangle{3.privatedoublewidth;4.privatedoubleheight;5.publicRectangle(doublew,doubleh){6.width二w;7.&9.10.11.12.13.M.)height=h;}publicdo

3、ublegetWidth(){returnwidth;}publicdoublegetHeight(){returnheight;}publicvoidsetWidth(doublew){width二w;}publicvoidsetHeight(doubleh){height=h;}publicdoublearea(){return(width*height);现在,如果有个止方形呢?显然止方形是一个矩形,所以我们应该让正方形继承矩形类,是这样吗?我们看一下!注意:•正方形不需要同时具冇宽和高属性,但是它还是从矩形继承了这些属性。所以,每个止方形都浪费了一点空间

4、,但这不是我们关注的主要问题。•继承而来的setWidth()和setHeight()方法实际上对于正方形是不合适的,因为正方形的宽和高是相等的。所以我们需要重写setWidth()和setHeight()方法,这可能暗示着在这儿并不适合使用继承。下面是Square类:Java代码1.//ASquareclass.2.publicclassSquareextendsRectangle{3.publicSquare(doubles){super(s,s);}4.publicvoidsetWidth(doublew){5.super.setWidth(w);6.su

5、per.setHeight(w);7.}8.publicvoidsetHeight(doubleh){9.super.setHeight(h);10.super.setWidth(h);12.}•切看上去都很好,但是注意下面的代码:Java代码1.publicclassTestRectangle{2.//DefineamethodthattakesaRectanglereference.3.publicstaticvoidtestLSP(Rectangler){4.r.setWidth(4.0);5.r.setlleight(5.0);6.System,out.

6、printin(z,Widthis4.0andHeightis5・0〃+7."、soAreais〃+r.areaO);&if(r.area()二二20.0)9.System,out.printin(/zLookinggood!zz);10.else11.System.out.println("Huh??Whatkindofrectangleis12.this??〃);13.}14.14.publicstaticvoidmain(Stringargs[]){15.//CrcateaRectangleandaSquare16.Rectangler=newRe

7、ctangle(1.0,1.0);17.Squares二newSquare(1.0);18.//Nowcallthemethodabove.Accordingtothe19.//LSP,itshouldworkforeitherRectanglesor20.//Squares・Doesit??21.testLSP(r);22.testLSP(s);23.}24.}测试程序输出:Java代码1.Widthis4.0andHeightis5.0,soAreais20.01.Lookinggood!2.Widthis4.0andHeightis5.0,soAreais

8、25.03.Huh??W

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

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

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