网站大量收购独家精品文档,联系QQ:2885784924

第8章面向对象设计原则报告.ppt

  1. 1、本文档共67页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章面向对象设计原则报告

迪米特法则的缺点 会在系统里造出大量的小方法,散落在系统的各个角落 这些小方法仅仅是传递间接的调用,与系统的业务逻辑无关 遵循类之间的迪米特法则时,每一个局部都不会和远距离的对象有直接联系。但这也会造成系统的不同模块之间通讯效率降低 与依赖倒置原则互补使用 引入抽象陌生人来解决狭义迪米特法则缺点 广义迪米特法则 对对象之间的信息流量、流向以及信息的影响的控制 即“信息隐藏”或“封装” 广义迪米特法则在类设计上的体现 优先考虑将类设置成final类 吝啬的为字段设置setter方法 尽量降低类的访问权限 类应该尽量是包权限的 谨慎使用Serializable 尽量降低成员的访问权限 数据成员一定是private的 方法应尽量是private和包权限的 慎用protected和public 取代C语言的Struct 广义迪米特法则在代码层上的体现 降低局部变量的作用域 需要一个变量的时候才声明,不要总在开头将所有的局部变量都声明 块内用的变量在块内声明,不要在块外声明,循环块的情况例外 接口和抽象类的区别 里氏代换原则(LSP) 什么是里氏代换原则 定义 如果对每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型 作用 里氏代换原则是指导继承复用的标准 只有当子类可以替换掉基类并且软件的功能不受影响时,才可以使用继承复用 长方形和正方形 正方形是长方形的子类吗? 圆是椭圆的子类吗? 代码:com\javapatterns\liskov\version2 代码:com\javapatterns\liskov\version3 依赖倒置原则(DIP) 怎样理解 Inversion 传统的面向过程系统 依赖方向 业务调用者 中层模块 中层模块 中层模块 底层模块 底层模块 底层模块 底层模块 怎样理解 Inversion 面向对象系统 依赖方向 业务调用者 抽象层 抽象层 抽象层 实现层 实现层 实现层 依赖倒置原则的表述 抽象不应该依赖于细节;细节应该依赖于抽象 要针对抽象编程,不要针对实现编程 应使用Java接口和抽象类进行变量的类型声明、方法参数的类型声明、方法返回类型声明以及数据类型的转换等 要保证做到这一点,一个具体Java类应只实现接口和抽象类中声明的方法,而不应给出多余的方法 依赖倒置原则的优缺点 使用依赖倒置原则,对象的创建很可能要使用对象工厂,以避免直接对具体类进行引用,此原则会导致大量的类 依赖倒置原则假定所有的具体类都是会变化的,有些时候一些具体类是相当稳定、不会变化的,消费这样的类时完全可以不必为其发明一个抽象类型 依赖倒置之经典:回调 C语言的函数指针 C#的Delegate 事件处理中的监听器接口 例如Java中的ActionListener 以上这些统统都是回调,典型的依赖倒置 案例: 回调在“分割文件时显示进度条”案例中的应用 代码:callback\Hello.java和FileUtils.java 接口隔离原则(ISP) 什么是接口隔离原则 一个类对另外一个类的依赖应该是建立在最小的“接口”上的 接口有两层含义 一个类所提供的所有方法的集合,是这个类对外提供服务的“接口” 另一个接口就是特制Java中的interface 接口即角色 一个接口相当于剧本中的一种角色,而此角色由哪一个演员来演相当于接口的实现 一个接口应当简单地代表一个角色,而不是多个角色 如果系统涉及多个角色,那么每一个角色都应该由一个特定的接口代表 分割角色、定制服务 组合/聚合复用原则(CARP) 什么是组合/聚合复用原则 要尽量使用组合/聚合,而不是继承关系达到复用的目的 组合与聚合的区别 组合和聚合均是关联的特殊种类 聚合表示“拥有”关系或者整体与部分的关系 组合表示一种更强的“拥有”关系。在一个组合关系里,部分和整体的生命周期是一样的。一个组合的新的对象完全拥有对其组成部分的支配权,包括它们的创建和销毁等 使用程序语言的术语讲,组合而成的新对象对组成部分的内存分配、内存释放有绝对的责任 组合与聚合的区别 Java中的聚合和组合在代码上没有分别 组合与聚合的区别 C++中的聚合和组合在代码上的差别 组合/聚合复用的好处 组合对象存取成分对象的唯一方法是通过成分对象的接口(方法) 这种复用是黑箱复用,因为成分对象的内部细节是组合对象所看不见的 这种复用比继承复用的依赖更小 继承复用 新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类 修改或扩展继承而来的实现较为容易 继承是为多态服务的,而不是为了复用 如果超类的实现发生变化,那么子类的实现也不得不发生变化。因此当一个基类发生改变时,这种改变会先

文档评论(0)

ee88870 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档