- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
运用OO设计原则:DIP和OCP.ppt
运用OO设计原则:DIP和OCP 移动互联终端产品开发部 施博 2011-09-29 目 录 软件是如何腐化的 软件腐化的原因 什么是DIP 什么是OCP DIP和OCP的使用方法和原则 模式如何遵循原则 小结 软件是如何腐化的 一个任务 BOSS要求你写一个程序,提供给部门使用。它的功能是: 把一批个人信息从文件读取出来; 对这批个人信息,按照个人的ID卡号排序,最后输出到屏幕。 如何实现呢? Person - id: int - name: string + Id() : int + Name() : string 软件是如何腐化的 很快,你得到了下面的结构图: 这是个遵循了结构化的设计,把相关操作封装到独立的类里面。你的程序很成功,很快就被部署到了公司各处! 软件是如何腐化的 需求发生变化 几个月后,BOSS告诉你,对于某些部门,由于数据量比较大,他们把新的数据改用数据库来存储了,而你需要修改程序同时支持两种读取方式。 考虑到很多其他公司的程序都在使用你的程序,你不能修改Run()的接口,否则会导致很多的程序需要重新编译和重新测试。 你决定增加一个全局变量,由调用方来告诉PersonInfoHandler来从哪里读取信息。 软件是如何腐化的 经过第一次修改后,类图变成下面这样: 软件是如何腐化的 又有新的需求了 几周后,BOSS又来了,告诉你,他希望不但可以在屏幕上看到程序执行结果,还可以打印出来留个备份。 这次的改动和上次相似。增加了一个新的全局变量和一个新的逻辑判断。 软件是如何腐化的 经过第二次修改后,类图变成下面这样: 软件是如何腐化的 为什么会这样? 如果又有新的需求呢? 增加一种新的数据源 新的输出位置 新的排序算法 不根据Id而是Name排序 程序将越来越难以修改和维护,这样的趋势会继续下去。程序就这样一步一步地腐化了。 经过两次修改,我们发现程序越来越脆弱,只要有一个新的需求,就会导致相当大的工作量,程序有着不必要的重复,越来越晦涩难懂。 分析原因 回顾前面的例子,我们可以发现,随着需求的变化,我们的软件: 一个简单的改动会导致有依赖关系的模块的连锁改动 进行一个改动时会导致程序的其他没有概念上关联的地方需要改动 低层实现的变化导致高层的策略需要变化 程序的功能依赖越来越多的低层模块,导致程序无法使用在其他场合,如果需要使用,必须经过大量修改 归根结底,是因为高层策略依赖于低层实现 需求总是在变化 “变化”,是软件开发过程中的一个不变真理。 不管软件当初设计的多么好,一段时间之后,总是需要成长和变化,否则软件就会“死亡”。 大多数软件项目中最不稳定的就是需求,需求处在一个持续变动的状态中。既然我们生活在这样一个世界中,就要保证我们的软件能够经受得住变化。 如何应对变化 面向对象分析设计能够使用如此广泛,正是因为使用面向对象分析设计,我们: 遵循面向对象的设计原则 使用面向对象的设计模式 持续不断地重构代码 这样可以让我们的软件承受住变化,在持续不断的演进过程中,一直保持好的灵活性、可扩展性和可维护性。 什么是DIP 依赖倒置原则( Dependency-Inversion Principle) 高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 抽象不应该依赖于细节,细节应该依赖于抽象。 层次化 面向对象架构要求我们定义清晰地层次结构,每个层次结构通过一个良好定义的、受控的接口向外提供一组内聚的服务。 因此,我们的程序设计往往成这样: 策略层直接使用机制层,机制层直接使用工具层,因此策略层对其下层的改动都是敏感的。 更合适的层次结构 高层对于自己需要的服务声明抽象接口,低层实现抽象接口供高层使用。 高层不依赖于低层 低层反而依赖于高层中声明的抽象服务接口 解除了策略层对于工具层、甚至机制层的依赖 DIP倒置了什么 DIP倒置了接口的所有权 原来低层模块拥有自己的接口,提供给高层调用。 DIP使得高层模块(客户)拥有了接口,而低层模块(服务者)从高层的接口派生。 DIP倒置了高层和低层的依赖关系 高层模块不再依赖于低层模块,而是依赖于一个抽象接口。 低层模块也依赖于抽象接口。 什么是OCP 开放-封闭原则(Open-Closed Principle) 软件实体(类、模块、函数等)应该是可以扩展的,但是不可以修改。 OCP的主要特征 对于扩展是开放的(open for extension) 对于修改是封闭的(closed for modification) 当应用的需求改变时,我们可以对模块进行扩展,以满足那些改变的新行为。也就是说,我们可以改变模块的功能。 对模块进行扩展时,不需要改动模块的源代码。模块的二进制可执行(lib、dll或exe文件)都不需要改动。 应用
您可能关注的文档
- 第二章 发光二极管显示(LED).ppt
- 第二章+细胞生理学【cell+physiology】.ppt
- 第二章-电火花加工-特种加工课件-gbi.ppt
- 第五章 CMOS组合逻辑电路设计II.ppt
- 第五章 PowerPoint (幼师培训).ppt
- 第八章_新诗(上)·概述.ppt
- 第六章 Linux图形编程.ppt
- 第十七章 三维实体造型基础SolidWorks.ppt
- 第十六章 起源于围生期的情况icd_10第16-18章.ppt
- 第十章 SQL Server的程序设计.ppt
- 5.1 根本政治制度 课件(共 31张ppt ) -2025年统编版道德与法治八年级下册 (2)(含音频+视频).pptx
- 5.2 做自强不息的中国人 课件(共22张PPT) 2025年统编版(2025)初中道德与法治七年级下册(含音频+视频).pptx
- 6.1《老子》四章 课件(共43张PPT)(含音频+视频).pptx
- 数量关系 课件(共20张PPT)2025年人教版(2025)小学数学一年级下册(含音频+视频).pptx
- 8.1.2.2 三角形的外角和 课件(共31张PPT) 2025年华东师大版数学七年级下册(含音频+视频).pptx
- 5.1 根本政治制度 课件(共 18 张ppt ) -2025年统编版道德与法治八年级下册(含音频+视频).pptx
- 统编版语文二年级下册语文园地四 课件(共41张PPT)(含音频+视频).pptx
- 5.1 根本政治制度 课件(共23张PPT)-2025年统编版道德与法治八年级下册 (1)(含音频+视频).pptx
- 5.2人民代表大会制度:我国的根本政治制度(共29张PPT) 2025年统编版高中政治必修3(含音频+视频).pptx
- 5.2薪火相传有继承课件(共33张PPT) 2025年统编版高中政治选择性必修2(含音频+视频).pptx
文档评论(0)