电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

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

敏捷软件开发第五讲-开闭原则与里氏替换原则_第1页
1/34
敏捷软件开发第五讲-开闭原则与里氏替换原则_第2页
2/34
敏捷软件开发第五讲-开闭原则与里氏替换原则_第3页
3/34
www.huawei.com广州大学华软软件学院软件工程系主讲教师:谭翔纬答疑时间:周三10:30-12:00周四9:00-12:00Tel:660028Email:txw@sise.com第五讲:开闭原则与里氏替换原则目录开放——封闭原则(OCP)OCP编程实例OCP原则实施要点Liskov替换原则Liskov原则实施要点总结开放——封闭原则(OCP)什么是软件开发过程中最不稳定的因素?——答案是需求!需求在软件开发过程中时时刻刻都可能发生变化。那么,如何灵活应对变化是软件结构设计中最重要也是最困难的一个问题。好的设计带来了极大了灵活性,不好的设计则充斥着僵化的臭味。所以我们要遵循——开放封闭原则OCP。开放——封闭原则(OCP)BertrandMeyer,面向对象技术大师,发明了Eiffel语言和按契约设计(DesignbyContract)的思想,名著《面向对象软件构造》的作者,法国工程院院士。目前,他除了担任Eiffel环境和工具开发公司ISE的CTO之外,还是爱因斯坦的母校苏黎世联邦工学院计算机科学系教授,担任软件工程项目主席,同时还在澳大利亚Monash大学任教。他于1988年提出了著名的开放——封闭原则(OCP)。开放封闭原则的现实意义开放封闭原则(OCP,OpenClosedPrinciple)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合。而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如后面将介绍的Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。OCP核心的思想是:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。OCP特征软件实体(类、模块、函数等)应该是可扩展的,但是不可修改的。OCP有两大特征:对于扩展是开放的(Openforextension)模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求。对于更改是封闭的(Closedformodification)对模块行为扩展时,不必改动模块的源代码或二进制代码。OCP的关键在于抽象OCP的关键在于抽象抽象技术:abstractclass,Interface抽象预见了可能的所有扩展(闭)由抽象可以随时导出新的类(开)ClientServerServerClientInterface<>Client范例:手与门如何在程序中模拟用手去开门和关门?行为:开门(open)关门(close)判断门的状态(isOpened)设计实现Handdo()Door_isOpened:booleanopen()close()isOpened():booleanpublicclassDoor{publicclassDoor{privatebooleanprivateboolean_isOpen=false;_isOpen=false;publicbooleanisOpen(){publicbooleanisOpen(){return_isOpen;return_isOpen;}}publicvoidopen(){publicvoidopen(){_isOpen=true;_isOpen=true;}}publicvoidclose(){publicvoidclose(){_isOpen=false;_isOpen=false;}}}}publicclassHand{publicclassHand{publicDoordoor;publicDoordoor;voiddo(){voiddo(){ifif(door.isOpen())(door.isOpen())door.close();door.close();elseelsedoor.open();door.open();}}}}publicclassSmartTest{publicclassSmartTest{publicstaticvoidmain(String[]publicstaticvoidmain(String[]args){args){HandmyHand=newHand();HandmyHand=newHand();myHand.door=newDoor();myHand.door=newDoor();myHand.do();myHand.do();}}}}新的需求……需要手去开关抽屉,冰箱需要手去开关抽屉,冰箱…………??我们只好去修改程序我们只好去修改程序!!解决新的需求:修改设计publicclassHand{publicclassHand{publicDoordoor;publicDoordoor;publicDrawerdrawer;publicDrawerdrawer;voiddo(intitem)voiddo(intitem){{switch(item){switch(item){case1:case1:if(door.isOpen())if(door.isOpen())door.close();door.close();elsedoor.open();elsedoor.open();break;break;case2:case2:if(drawer.isOpen())if(drawer.isOpen())drawer.close();drawer.close();elsedrawer.open();elsedrawer.open();break;break;}}}}}}publicclassSmartTest{publicclassSmartTest{publicstaticvoidmain(String[]publicstaticvoidmain(String[]args){args){HandmyHand=newHan...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

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

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部