面向对象体系结构设计原则.ppt

上传人:za****8 文档编号:17022465 上传时间:2020-11-06 格式:PPT 页数:36 大小:304.50KB
返回 下载 相关 举报
面向对象体系结构设计原则.ppt_第1页
第1页 / 共36页
面向对象体系结构设计原则.ppt_第2页
第2页 / 共36页
面向对象体系结构设计原则.ppt_第3页
第3页 / 共36页
点击查看更多>>
资源描述
郑州大学软件学院 赵哲 1 软件体系结构 补充内容: 第八章 -面向对象体系结构设计原则 郑州大学软件学院 赵哲 2 回顾 设计模式 MVC ABSD ABSD相关术语 ABSDM 郑州大学软件学院 赵哲 3 本节主要内容 面向对象体系结构设计 7大原则 单一职责原则 开 -闭原则 里氏代换原则 依赖倒转原则 接口隔离原则 合成 /聚合复用原则 迪米特原则 郑州大学软件学院 赵哲 4 单一职责原则 有关手机 如果一个类承担的职责过多,就等于把 这些 职责耦合 在一起,一个职责的变化 可能会削弱或抑制这个类完成其他职责 的能力,这种耦合会导致 脆弱 的设计, 当变化发生时,设计会遭受到意想不到 的破坏! 郑州大学软件学院 赵哲 5 单一职责原则 软件设计真正要做的许多内容,就是发 现职责并且把职责相互分离 原则:若想到多于一个的动机去改变一 个类,那么这个类就具有多于一个的职 责 一个类只有一种职责 SRP Single Responsibility Principle 郑州大学软件学院 赵哲 6 开 -闭原则 对扩展开放、对更改封闭 Open for extension Closed for modification + - 法类图 郑州大学软件学院 赵哲 7 开 -闭原则 开放 -封闭原则是面向对象设计的 核心所在 遵循这个原则可以带来面向对象技术所声称的 巨大好处 开发人员将程序中呈现出频繁变化的部分抽象 出来 但是每个部分都进行抽象不是一个好主意。拒 绝不成熟的抽象和抽象本身一样重要! 郑州大学软件学院 赵哲 8 里氏代换原则 Barbara Liskow 在 1988年发表的 1972年 Barbara成为麻省理工学院的教 授 是美国获得计算机科学博士学位的第一 人 郑州大学软件学院 赵哲 9 里氏代换原则 Liskow Substitution Principle (LSP): 子类必须能够替换掉它们的父类型 只要是基类出现的地方,一定能够出现 子类! LSP指导继承,是继承的基石 郑州大学软件学院 赵哲 10 LSP 例子: 企鹅是一种鸟,鸟都会飞,但是企鹅不会飞, 那么企鹅可以继承鸟这个类吗? 不能!因为飞是鸟的 public方法! 一个例子:长方形和正方形 某软件 while(长 =宽 ),将宽 +1. 父类没问题,但子类就回出现死循环 正方形不可以继承长方形 郑州大学软件学院 赵哲 11 LSP 例子 孙悟空勾掉生死簿中所有猴子的名字, 那么猕猴、石猴、长臂猿等的名字是否 都勾掉了? 乘马,乘白马、乘骊马 注意 LSP反之不成立! 墨子 小取 娣,美人也,爱娣,非爱 美人也 .盗,人也;恶盗,非恶人也 郑州大学软件学院 赵哲 12 依赖倒转原则 要针对接口编程,不要针对实现编程。 Program to an interface, not an implementation. 电脑 PC 高层模块不应该依赖底层模块,两者应该都依 赖抽象 High-level module should not depend upon bottom module. both should depend upon abstractions 郑州大学软件学院 赵哲 13 依赖倒转原则 所谓的依赖倒转就是谁也不要依赖谁, 除了约定的接口,大家都要灵活自在! 收音机是否符合依赖倒转原则? 为何说倒转呢? 郑州大学软件学院 赵哲 14 为何说倒转 高层模块 底层模块 底层复用没关系,若要复用高层怎么办? 郑州大学软件学院 赵哲 15 依赖倒转 无论是高层还是底层都不互相依赖 高层模块不依赖底层模块,两者都应该 依赖抽象。 高层模块 底层模块 或抽象类 郑州大学软件学院 赵哲 16 依赖倒转的缺点 很强大,但却不多人会用 需要丰富的面向对象经验和丰富的类管 理经验 郑州大学软件学院 赵哲 17 接口隔离原则 Interface Segregation Principle ISP 客户端不应该依赖它不需要的方法 类间的依赖关系应该建立在最小的接口 上 郑州大学软件学院 赵哲 18 ISP 接口是我们设计时对外提供的契约,通过分散 定义多个接口,可以预防未来变更的扩散,提 高系统的灵活性和可维护性。 接口定义的方法,在其子类必须要实现。 一个例子 一个接口:内容是雇佣者有吃饭和做工作的方 法 雇佣的男、女都可以使用该接口 有一天,雇佣者来了一个机器人。 机器人不吃饭 郑州大学软件学院 赵哲 19 例子 C#-错误 Interface IWorker void eat(); void work(); Class Worker:IWorker void eat ()/eat 相关代码 void work()/work相关代码 郑州大学软件学院 赵哲 20 ISP 例子的缺陷 胖接口,造成了对接口的污染 如何解决? 客户端不应该依赖它不需要的方法 类间的依赖关系应该建立在最小的接口 上 一个接口只做一件事 郑州大学软件学院 赵哲 21 例子 C#-正确 符合 ISP Interface IWorkerEat void eat(); Interface IWorkerWorkvoid work(); Class Worker:IWorkerEat,IWorkerWork void eat ()/eat 相关代码 void work()/work相关代码 Class Robot:IWorkerWork void work() /work相关代码 郑州大学软件学院 赵哲 22 ISP 胖接口容易导致哑方法 瘦接口更健康! 郑州大学软件学院 赵哲 23 复习 单一职责原则 一个类只做一件事 开 -闭原则 对扩展开放,对修改关闭 里氏代换原则 只要基类出现的地方,都可以出现子类 郑州大学软件学院 赵哲 24 复习 依赖倒转原则 针对接口编程,不针对实现编程 高层不依赖底层,两者都依赖抽象 接口隔离原则 客户端不依赖它不需要的方法 瘦接口 郑州大学软件学院 赵哲 25 合成 /聚合复用原则 Composite/Aggregate Reuse Principle CARP 合成和聚合 合成 是强烈的关联,部分 (将 )和整体 (主 ) 生命周期一样,整体 (主 )对部分 (将 )有 支配权,包括创建和销毁。 聚合 是部分和整体的普通关联 郑州大学软件学院 赵哲 26 合成和聚合 刘邦和韩信 郑州大学软件学院 赵哲 27 CARP原则 合成: class Person private Hand hand; public Person() hand = new Hand(); 郑州大学软件学院 赵哲 28 CARP原则 聚合: class Person private Computer computer; public setComputer() computer = new Computer(); 郑州大学软件学院 赵哲 29 CARP原则 尽量使用合成 /聚合,而不是使用继承 继承的优点 新的实现较为容易,因为基类的大部分功能可以通 过继承的关系自动进入子类。 修改和扩展继承而来的实现较为容易。 继承的缺点 继承将基类的实现细节暴露给子类。称 “ 白箱 ” 复 用。 如果基类发生改变,那么子类的实现也不得不发生 改变。 多继承不利于维护 郑州大学软件学院 赵哲 30 CARP特定 优点: 依赖少,条条框框的限制少 几乎可以用到任何环境中 容易实现 修改和扩展容易 缺点: 对象多,需要管理 郑州大学软件学院 赵哲 31 迪米特原则 The Law of Demeter LoD 想说爱你不容易 不要和陌生人说话 宅男 /腐女记 又叫 最少知识原则 郑州大学软件学院 赵哲 32 迪米特法则 一个对象应当对其他对象有尽可能少的 了解 ,不和陌生人说话 最少知识 不相往来 talk only to your immediate friends 郑州大学软件学院 赵哲 33 迪米特法则 郑州大学软件学院 赵哲 34 迪米特法则的优点 相当弱的类耦合 利于复用 只要有可能类就可以设计成不变类 郑州大学软件学院 赵哲 35 迪米特法则的缺点 造成大量的小方法,散落在系统的各个 角落 这些方法仅仅是传递间接的调用 容易引起第一次了解系统人的困惑 郑州大学软件学院 赵哲 36 迪米特法则和设计模式 Faade模式和 Mediator模式都符合迪 米特法则
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!