版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、设计原则曹操吟诗曹操吟诗话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。曹操吟诗曹操吟诗样张出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为对酒当歌较好!”,于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不喋。只得照办。曹操吟诗曹操吟诗样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为对酒当歌,人生几
2、何?!”当臣转告工匠之时,工匠晕倒!曹操吟诗曹操吟诗可惜三国时期活字印刷还未发明,所以类似事情应该时有发生,如果是有了活字印刷。则只需更改四个字就可,其余工作都未白做。实在妙哉。结论结论第一,要改,只需更改要改的字,此为可维护可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展可扩展;第四,字的排列其实有可能是竖有可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵灵活性好活性好。软件开发经历了过程式开发,转变为面向对象开发,就如出现了活字印刷软件开发经历了过程式开发,转变为面向对象开发,就如出现了活
3、字印刷术一样的道理。通过封装、继承、多态把程序的耦合度降低(传统印刷术一样的道理。通过封装、继承、多态把程序的耦合度降低(传统印刷术的问题就在于所有的字都刻在同一版面上造成耦合度太高所制),用设计术的问题就在于所有的字都刻在同一版面上造成耦合度太高所制),用设计原则与模式使得程序更加的灵活,容易修改,并且易于复用。原则与模式使得程序更加的灵活,容易修改,并且易于复用。OCPnOCP(The Open-Close Principle, 开放开放-封封闭原则)闭原则)n软件实体(类、模块、函数等)应该是软件实体(类、模块、函数等)应该是可扩展可扩展的,的,但是但是不可修改不可修改的的n特征:特征:
4、n对于扩展是开放的对于扩展是开放的(Open for extension)n模块的行为可以扩展,当应用的需求改变时,可以对模块进模块的行为可以扩展,当应用的需求改变时,可以对模块进行扩展,以满足新的需求行扩展,以满足新的需求n对于更改是封闭的对于更改是封闭的(Closed for modification)n对模块行为扩展时,不必改动模块的源代码或二进制代码对模块行为扩展时,不必改动模块的源代码或二进制代码OCP的关键在于抽象nOCP的关键在于抽象的关键在于抽象n抽象技术:抽象技术:abstract class, Interfacen抽象预见了可能的所有扩展(闭)抽象预见了可能的所有扩展(闭)
5、n由抽象可以随时导出新的类(开)由抽象可以随时导出新的类(开)范例:手与门n如何在程序中模拟用手去开门和关门?n行为:n开门(open)n关门(close)n判断门的状态(isOpened)设计实现新的需求解决新的需求:修改设计符合OCP的设计方案新的实现新的需求里氏代换原则(里氏代换原则(LSP) 如果一个软件实体使用的是基类的话那么也一定适用于子类,如果一个软件实体使用的是基类的话那么也一定适用于子类,即子类型即子类型(subtype)必须能够替换它们的基类型。但反过来的必须能够替换它们的基类型。但反过来的代换不成立。代换不成立。里氏代换原则(里氏代换原则(LSP) 如果一个软件实体使用的
6、是基类的话那么也一定适用于子类,如果一个软件实体使用的是基类的话那么也一定适用于子类,即子类型即子类型(subtype)必须能够替换它们的基类型。但反过来的必须能够替换它们的基类型。但反过来的代换不成立。代换不成立。DIPnDIP(依赖倒置原则,(依赖倒置原则,The Dependency Inversion Principle)n高层模块不应该依赖于低层模块。二者都应高层模块不应该依赖于低层模块。二者都应该依赖于抽象该依赖于抽象n抽象不应该依赖于具体。具体应该依赖于抽抽象不应该依赖于具体。具体应该依赖于抽象象n针对接口编程,不要针对实现编程针对接口编程,不要针对实现编程接口隔离原则(接口隔离
7、原则(ISP)接口隔离原则讲的是:接口隔离原则讲的是:使用多个专门的接口比使用单一的接口要好。使用多个专门的接口比使用单一的接口要好。从客户的角度来说:一个类对另外一个类的依从客户的角度来说:一个类对另外一个类的依赖性应当是建立在最小的接口上的。如果客户赖性应当是建立在最小的接口上的。如果客户端只需要某一些方法的话,那么就应当向客户端只需要某一些方法的话,那么就应当向客户端提供这些需要的方法,而不要提供不需要的端提供这些需要的方法,而不要提供不需要的方法。提供接口意味着向客户端作出承诺,过方法。提供接口意味着向客户端作出承诺,过多的承诺会给系统的维护造成不必要的负担。多的承诺会给系统的维护造成
8、不必要的负担。 合成、聚合复用原则(合成、聚合复用原则(CARP)合成、聚合复用原则就是在一个新的对象合成、聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对里面使用一些已有的对象,使之成为新对象的一部份,新的对象通过向这些对象的象的一部份,新的对象通过向这些对象的委派达到复用已有功能的目的。委派达到复用已有功能的目的。这个原则有一个简短的描述:要尽量使用这个原则有一个简短的描述:要尽量使用合成、聚合,尽量不要使用继承。合成、聚合,尽量不要使用继承。 不满足迪米特法则的系统不满足迪米特法则的系统不满足迪米特法则的系统不满足迪米特法则的系统public class Someone
9、 public void operation1(Friend friend) Stranger stranger=vide(); stranger.operation3(); public class Friend private Stranger stranger=new Stranger(); public void operation2() public Stranger provide() return stranger; 满足迪米特法则的系统满足迪米特法则的系统满足迪米特法则的系统public class Someone public void operation1(Friend friend) friend.forward(); public class Friend private Stranger stranger=new Stranger(); public void operat
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数字化赋能:济宁市投资重大项目电子监察系统的构建与实践
- 数字化细胞微注射机器人的图像采集与处理:技术、算法与应用的深度剖析
- 数字化浪潮下集装箱船舶信息管理系统的设计与实现探索
- 数字化浪潮下GS银行HN分行远程运维服务的转型与突破
- 2025 奇妙的声音探索作文课件
- 2025 高中阅读理解之情感态度推断课件
- 谵妄综合征护理课件
- 照明设备选型与安装方案
- 屋面施工环境监测方案
- 养猪场生物安全设施建设方案
- 码头现场调度培训课件
- 2026年政府采购培训试题200道及参考答案【新】
- 铁路职工法治知识竞赛参考题库及答案
- 技术部门月报
- 加油站与货运企业供油协议样本
- DB13-T 5884-2024 1:5000 1:10000数字线划图外业调绘技术规程
- 大学生该不该创业
- DB61T 1986-2025《林木采伐技术规范》
- 洗手液的泡泡课件
- 小儿颈外静脉采血课件
- 2025 年高职电气自动化技术(西门子技术)技能测试卷
评论
0/150
提交评论