第8章节—面向对象体系结构的设计准则.pptVIP

  • 4
  • 0
  • 约6.92千字
  • 约 36页
  • 2017-04-01 发布于四川
  • 举报

第8章节—面向对象体系结构的设计准则.ppt

第8章节—面向对象体系结构的设计准则

软件体系结构 补充内容:重要 第八章-面向对象体系结构设计原则 回顾 设计模式 MVC ABSD ABSD相关术语 ABSDM 本节主要内容 面向对象体系结构设计7大原则 单一职责原则 开-闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成/聚合复用原则 迪米特原则 单一职责原则 有关手机 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或抑制这个类完成其他职责的能力,这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏! 单一职责原则 软件设计真正要做的许多内容,就是发现职责并且把职责相互分离 原则:若想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责 一个类只有一种职责 SRP Single Responsibility Principle 开-闭原则 对扩展开放、对更改封闭 Open for extension Closed for modification + - 法类图 开-闭原则 开放-封闭原则是面向对象设计的核心所在 遵循这个原则可以带来面向对象技术所声称的巨大好处 开发人员将程序中呈现出频繁变化的部分抽象出来 但是每个部分都进行抽象不是一个好主意。拒绝不成熟的抽象和抽象本身一样重要! 里氏代换原则 Barbara Liskow 在1988年发表的 1972年Barbara成为麻省理工学院的教授 是美国获得计算机科学博士学位的第一人 里氏代换原则 Liskow Substitution Principle (LSP):子类必须能够替换掉它们的父类型 只要是基类出现的地方,一定能够出现子类! LSP指导继承,是继承的基石 LSP 例子: 企鹅是一种鸟,鸟都会飞,但是企鹅不会飞,那么企鹅可以继承鸟这个类吗? 不能!因为飞是鸟的public方法! 一个例子:长方形和正方形 某软件 while(长=宽),将宽+1. 父类没问题,但子类就回出现死循环 正方形不可以继承长方形 LSP 例子 孙悟空勾掉生死簿中所有猴子的名字,那么猕猴、石猴、长臂猿等的名字是否都勾掉了? 乘马,乘白马、乘骊马 注意LSP反之不成立! 《墨子 小取》娣,美人也,爱娣,非爱美人也….盗,人也;恶盗,非恶人也 依赖倒转原则 要针对接口编程,不要针对实现编程。 Program to an interface, not an implementation. 电脑 PC 高层模块不应该依赖底层模块,两者应该都依赖抽象 High-level module should not depend upon bottom module. both should depend upon abstractions 依赖倒转原则 所谓的依赖倒转就是谁也不要依赖谁,除了约定的接口,大家都要灵活自在! 收音机是否符合依赖倒转原则? 为何说倒转呢? 为何说倒转 依赖倒转 无论是高层还是底层都不互相依赖 高层模块不依赖底层模块,两者都应该依赖抽象。 依赖倒转的缺点 很强大,但却不多人会用 需要丰富的面向对象经验和丰富的类管理经验 接口隔离原则 Interface Segregation Principle ISP 客户端不应该依赖它不需要的方法 类间的依赖关系应该建立在最小的接口上 ISP 接口是我们设计时对外提供的契约,通过分散定义多个接口,可以预防未来变更的扩散,提高系统的灵活性和可维护性。 接口定义的方法,在其子类必须要实现。 一个例子 一个接口:内容是雇佣者有吃饭和做工作的方法 雇佣的男、女都可以使用该接口 有一天,雇佣者来了一个机器人。 机器人不吃饭 例子 C#-错误 Interface IWorker { void eat(); void work(); } Class Worker:IWorker { void eat (){//eat 相关代码} void work(){//work相关代码} } ISP 例子的缺陷 胖接口,造成了对接口的污染 如何解决? 客户端不应该依赖它不需要的方法 类间的依赖关系应该建立在最小的接口上 一个接口只做一件事 例子C#-正确符合ISP Interface IWorkerEat{ void eat();} Interface IWorkerWork{void work();} Class Worker:IWorkerEat,IWorkerWork { void eat (){//eat 相关代码} void work(){//work相关代码} } Class Robot:IWorkerWork { void work() {//work相关代码} } ISP 胖接口容易导致哑方法 瘦接口更健康! 复习

文档评论(0)

1亿VIP精品文档

相关文档