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