敏捷软件开发第五讲开闭原则与里氏替换原则

敏捷软件开发第五讲开闭原则与里氏替换原则

ID:37398484

大小:1.28 MB

页数:34页

时间:2019-05-12

敏捷软件开发第五讲开闭原则与里氏替换原则_第1页
敏捷软件开发第五讲开闭原则与里氏替换原则_第2页
敏捷软件开发第五讲开闭原则与里氏替换原则_第3页
敏捷软件开发第五讲开闭原则与里氏替换原则_第4页
敏捷软件开发第五讲开闭原则与里氏替换原则_第5页
资源描述:

《敏捷软件开发第五讲开闭原则与里氏替换原则》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第五讲:开闭原则与里氏替换原则目录开放——封闭原则(OCP)OCP编程实例OCP原则实施要点Liskov替换原则Liskov原则实施要点总结开放——封闭原则(OCP)什么是软件开发过程中最不稳定的因素?——答案是需求!需求在软件开发过程中时时刻刻都可能发生变化。那么,如何灵活应对变化是软件结构设计中最重要也是最困难的一个问题。好的设计带来了极大了灵活性,不好的设计则充斥着僵化的臭味。所以我们要遵循——开放封闭原则OCP。开放——封闭原则(OCP)BertrandMeyer,面向对象技术大师,发明了

2、Eiffel语言和按契约设计(DesignbyContract)的思想,名著《面向对象软件构造》的作者,法国工程院院士。目前,他除了担任Eiffel环境和工具开发公司ISE的CTO之外,还是爱因斯坦的母校苏黎世联邦工学院计算机科学系教授,担任软件工程项目主席,同时还在澳大利亚Monash大学任教。他于1988年提出了著名的开放——封闭原则(OCP)。开放封闭原则的现实意义开放封闭原则(OCP,OpenClosedPrinciple)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降

3、低耦合。而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如后面将介绍的Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。OCP核心的思想是:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。OCP特征软件实体(类、模块、函数等)应该是可扩展的,但是不可修改的。OCP有两大特征:对于扩展是开放的(Openforextension)模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的

4、需求。对于更改是封闭的(Closedformodification)对模块行为扩展时,不必改动模块的源代码或二进制代码。OCP的关键在于抽象OCP的关键在于抽象抽象技术:abstractclass,Interface抽象预见了可能的所有扩展(闭)由抽象可以随时导出新的类(开)范例:手与门如何在程序中模拟用手去开门和关门?行为:开门(open)关门(close)判断门的状态(isOpened)设计实现publicclassDoor{privateboolean_isOpen=false;public

5、booleanisOpen(){return_isOpen;}publicvoidopen(){_isOpen=true;}publicvoidclose(){_isOpen=false;}}publicclassHand{publicDoordoor;voiddo(){if(door.isOpen())door.close();elsedoor.open();}}publicclassSmartTest{publicstaticvoidmain(String[]args){HandmyHand=

6、newHand();myHand.door=newDoor();myHand.do();}}新的需求……需要手去开关抽屉,冰箱……?我们只好去修改程序!解决新的需求:修改设计publicclassHand{publicDoordoor;publicDrawerdrawer;voiddo(intitem){switch(item){case1:if(door.isOpen())door.close();elsedoor.open();break;case2:if(drawer.isOpen())dr

7、awer.close();elsedrawer.open();break;}}}publicclassSmartTest{publicstaticvoidmain(String[]args){HandmyHand=newHand();myHand.door=newDoor();myHand.do(1);}}手被改了!主(使用手)程序也被改了!符合OCP的设计方案publicinterfaceExcutable{publicbooleanisOpen();publicvoidopen();publi

8、cvoidclose();}新的实现publicclassDoorimplementsExcutable{privateboolean_isOpen=false;publicbooleanisOpen(){return_isOpen;}publicvoidopen(){_isOpen=true;}publicvoidclose(){_isOpen=false;}}publicclassHand{publicExcutableitem;voiddo(){if(item.isOpen(

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

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

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