面向对象设计的强化.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面向对象设计的强化

面向对象设计强化 讲师:XXX 重点内容 面向对象的设计原则 单一职责原则、开闭原则、里氏代换原则 、依赖倒置原则、接口隔离原则、合成/聚合复用原则、迪米特法则 面向对象的高效编程原则 类和对象、方法、优化、异常、线程 常用设计模式简介 工厂模式、单例模式 面向对象的设计原则 单一职责原则 开闭原则 里氏代换原则 依赖倒置原则 接口隔离原则 合成/聚合复用原则 迪米特法则 单一职责原则(SRP) 一个类,只有一个引起它变化的原因 如果一个类有一个以上的职责,这些职责就耦合在了一起 当一个职责发生变化时,可能会影响其它的职责 多个职责耦合在一起,会影响复用性 SRP中,把职责定义为“变化的原因” 将业务规则和持久化的控制分离 Fa?ade和Proxy模式进行重构 开闭原则(OCP) 软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改 遵循开发-封闭原则设计的两个主要特征 对于扩展是开放的 对于更改是封闭的 好处 可复用性好 软件完成以后,仍然可以对软件进行扩展,加入新的功能,非常灵活 。因此,这个软件系统就可以通过不断地增加新的组件,来满足不断变化的需求。 可维护性好 由于对于已有的软件系统的组件,特别是它的抽象底层不去修改,因此,我们不用担心软件系统中原有组件的稳定性,这就使变化中的软件系统有一定的稳定性和延续性 不遵循OCP的例子 里氏代换原则(LSP) 子类必须能够替换掉它们的基类型 里氏代换原则是对“开-闭”原则的补充 如果两个具体的类A,B之间的关系违反了LSP的设计 创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题 从B到A的继承关系改为委派关系 在进行设计的时候,我们尽量从抽象类继承,而不是从具体类继承 长方形和正方形的例子不满足LSP OOD的IS-A关系是就行为方式而言的,行为方式是可以进行合理假设的,是客户程序设计所依赖的 依赖倒置原则(DIP) 高层模块不应该依赖于底层模块,二者都应该依赖于抽象 抽象不应该依赖于细节。细节应该依赖于抽象? Hollywood原则:?“Don‘t?call?us,?we’ll?call?you”.程序中所有的依赖关系都应该终止于抽象类和接口针对接口而非实现编程? 依赖于抽象的启发式规则: 任何变量都不应该持有一个指向具体类的指针或引用 任何类都不应该从具体类派生 任何方法都不应该覆写他任何基类中的已经实现了的方法 接口隔离原则(ISP) 使用多个专门的接口比使用单一的总接口要好 一个类对另外一个类的依赖性应当是建立在最小的接口上的 一个接口代表一个角色,不应当将不同的角色都交给一个接口 不应该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构? 满足接口隔离原则,调用者只能访问它自己的方法,不能访问到不应该访问的方法 合成/聚合复用原则(CARP) 合成(Composition)和聚合(Aggregation)都是关联(Association)的特殊种类。聚合表示整体和部分的关系,表示“拥有 ”;合成则是一种更强的“拥有”,部分和整体的生命周期一样 在OOD中,有两种基本的办法可以实现复用 合成/聚合 继承 HAS-A而非IS-A 迪米特法则(LoD) 迪米特法则可以简单说成:talk only to your immediate friends 一个软件实体应当尽可能少的与其他实体发生相互作用。每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位 迪米特法则的初衷在于降低类之间的耦合 设计模式的门面模式(Facade)和中介模式(Mediator),都是迪米特法则应用的例子 类和对象设计高效原则 避免创建重复对象 消除过期的对象引用 避免使用终结函数 为所有导出API的元素编写文档注释 使类和成员的可访问能力最小化 复合优先于继承 接口优先于抽象类 定义内部类:优先考虑静态成员类 复合优先于继承 继承是复用的用力手段但不是最佳工具 对普通类跨包继承,是非常危险的 与方法调用不同,继承打破了封装性 例子InstrumentedHashSet 使用复合的方式可以完全取代继承的复用 复合类不依赖于原有类的实现细节 原有类修改不会影响到复合类 Decorator模式、STRATEGY模式 接口优先于抽象类 接口和抽象类的本质区别 抽象类允许包含某些方法的实现,接口不允许 只允许单继承,抽象类作为类型定义受到了极大限制 已有的类可以很容易被更新实现新的接口 接口是定义混合类型的理想选择 例如:Comparable、Cloneable 接口使得我们可以构造出非层次结构的类型框架 接口使得安全的增强一个类的功能成为可能 抽象的类的演化比

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档