敏捷软件开发第五讲-开闭原则与里氏替换原则.ppt
《敏捷软件开发第五讲-开闭原则与里氏替换原则.ppt》由会员分享,可在线阅读,更多相关《敏捷软件开发第五讲-开闭原则与里氏替换原则.ppt(34页珍藏版)》请在三一办公上搜索。
1、第五讲:开闭原则与里氏替换原则,目录,开放封闭原则(OCP)OCP编程实例OCP原则实施要点Liskov替换原则Liskov原则实施要点总结,开放封闭原则(OCP),什么是软件开发过程中最不稳定的因素?答案是需求!需求在软件开发过程中时时刻刻都可能发生变化。那么,如何灵活应对变化是软件结构设计中最重要也是最困难的一个问题。好的设计带来了极大了灵活性,不好的设计则充斥着僵化的臭味。所以我们要遵循开放封闭原则OCP。,开放封闭原则(OCP),Bertrand Meyer,面向对象技术大师,发明了Eiffel 语言和按契约设计(Design by Contract)的思想,名著面向对象软件构造的作者
2、,法国工程院院士。目前,他除了担任Eiffel环境和工具开发公司ISE的CTO之外,还是爱因斯坦的母校苏黎世联邦工学院计算机科学系教授,担任软件工程项目主席,同时还在澳大利亚Monash大学任教。他于1988年提出了著名的开放封闭原则(OCP)。,开放封闭原则的现实意义,开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合。而开放封闭原则正是对这一目标的最直接体现。其他的设计原则,很多时候是为实现这一目标服务的,例如后面将介绍的Liskov替换原则实现最佳的、正确的继承层次,就能保证不会违反开放封闭原则。OC
3、P核心的思想是:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。,OCP特征,软件实体(类、模块、函数等)应该是可扩展的,但是不可修改的。OCP有两大特征:对于扩展是开放的(Open for extension)模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求。对于更改是封闭的(Closed for modification)对模块行为扩展时,不必改动模块的源代码或二进制代码。,OCP的关键在于抽象,OCP的关键在于抽象抽象技术:abstract class,Interface抽象预见了可能的所有扩展(闭)由抽象可以随时导出新的类(开)
4、,范例:手与门,如何在程序中模拟用手去开门和关门?行为:开门(open)关门(close)判断门的状态(isOpened),设计实现,public class Door private boolean _isOpen=false;public boolean isOpen()return _isOpen;public void open()_isOpen=true;public void close()_isOpen=false;,public class Hand public Door door;void do()if(door.isOpen()door.close();else door
5、.open();,public class SmartTest public static void main(String args)Hand myHand=new Hand();myHand.door=new Door();myHand.do();,新的需求,需要手去开关抽屉,冰箱?,我们只好去修改程序!,解决新的需求:修改设计,public class Hand public Door door;public Drawer drawer;void do(int item)switch(item)case 1:if(door.isOpen()door.close();else door.o
6、pen();break;case 2:if(drawer.isOpen()drawer.close();else drawer.open();break;,public class SmartTest public static void main(String args)Hand myHand=new Hand();myHand.door=new Door();myHand.do(1);,手被改了!主(使用手)程序也被改了!,符合OCP的设计方案,public interface Excutable public boolean isOpen();public void open();pub
7、lic void close();,新的实现,public class Door implements Excutable private boolean _isOpen=false;public boolean isOpen()return _isOpen;public void open()_isOpen=true;public void close()_isOpen=false;,public class Hand public Excutable item;void do()if(item.isOpen()item.close();else item.open();,public cl
8、ass Drawer implements Excutable private boolean _isOpen=false;public boolean isOpen()return _isOpen;public void open()_isOpen=true;public void close()_isOpen=false;,public class SmartTest public static void main(String args)Hand myHand=new Hand();myHand.item=new Door();myHand.do();,新的需求,需要手去开关冰箱?,为冰
9、箱实现Excutable接口不需要修改任何原有的设计和代码,public class Refrigerator implements Excutable private boolean _isOpen=false;public boolean isOpen()return _isOpen;public void open()_isOpen=true;public void close()_isOpen=false;,OCP原则实施要点,预测变化和“贴切的”结构 上述的例子其实并不是完全封闭的,如果手增加了新的动作,例如搬运,很多地方还是会有改动变化。那么原来所选定的抽象对于这种变化来说反到成为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 敏捷 软件 开发 第五 开闭 原则 里氏 替换

链接地址:https://www.31ppt.com/p-6226689.html