(53)--14-8 面向对象设计原则 迪米特法则 面向对象与UML.pdf
《(53)--14-8 面向对象设计原则 迪米特法则 面向对象与UML.pdf》由会员分享,可在线阅读,更多相关《(53)--14-8 面向对象设计原则 迪米特法则 面向对象与UML.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 面向对象与面向对象与UML Object-Oriented and UML 面向对象设计原则面向对象设计原则 Object-Oriented Design Principles -3-3-面向对象的基本设计原则面向对象的基本设计原则(1)LSP:Liskov(里氏里氏)替换原则替换原则 Liskov Substitution Principle(2)OCP:开放:开放-封闭原则封闭原则 Open-Close Principle(3)SRP:单一职责原则:单一职责原则 Single Responsibility Principle(4)ISP:接口隔离原则:接口隔离原则 Interface S
2、egregation Principle (5)DIP:依赖倒置原则:依赖倒置原则 Dependency Inversion Principle(6)CARP:组合组合/聚合复用原则聚合复用原则 Composite/Aggregate Reuse Principle(7)LOD(LKP):迪米特法则迪米特法则(最少知道原则最少知道原则)Law of Demeter(Least Knowledge Principle)LOD 迪米特法则迪米特法则(Law of Demeter)或或LKP 最少知道原则最少知道原则)(Least Knowledge Principle)迪米特法则定义迪米特法则定义
3、 迪米特法则迪米特法则(Law of Demeter,LoD)又称为又称为最少知识原则最少知识原则(Least Knowledge Principle,LKP):一个对象应该对其他对象保持最少的一个对象应该对其他对象保持最少的了解。了解。问题由来:问题由来:类与类之间的关系越密切,耦合度越大,当一个类发生类与类之间的关系越密切,耦合度越大,当一个类发生改变时,对另一个类的影响也越大。改变时,对另一个类的影响也越大。解决方案:解决方案:尽量降低类与类之间的耦合,实现低耦合。尽量降低类与类之间的耦合,实现低耦合。解决途径:解决途径:使用迪米特法则。使用迪米特法则。LOD 迪米特法则迪米特法则 对迪
4、米特法则有多种定义方法,其中几种典型定义如下:对迪米特法则有多种定义方法,其中几种典型定义如下:(1)不要和“陌生人”说话。不要和“陌生人”说话。(2)只与只与直接朋友直接朋友通信。通信。(3)每个软件单元对其它单元尽可能少了解,而且仅限于那些与自己密切相每个软件单元对其它单元尽可能少了解,而且仅限于那些与自己密切相关的单元关的单元。最常用的表述最常用的表述 迪米特法则是迪米特法则是对软件实体之间通信的限制,对软件实体之间通信的限制,它要求限制软件实体之间通它要求限制软件实体之间通信的宽度和深度。体现在信的宽度和深度。体现在一个软件实体应当尽可能少的与其它实体发生一个软件实体应当尽可能少的与其
5、它实体发生相互作用。相互作用。迪米特法则分析迪米特法则分析 在迪米特法则中,对于一个对象(某人),其在迪米特法则中,对于一个对象(某人),其朋友朋友包括以下几类:包括以下几类:(1)当前对象本身当前对象本身(this);(2)以参数形式传入到当前对象方法中的对象;以参数形式传入到当前对象方法中的对象;(3)当前对象的成员对象;当前对象的成员对象;(4)如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;如果当前对象的成员对象是一个集合,那么集合中的元素也都是朋友;(5)当前对象所创建的对象,调用方法时返回的对象(返回值是对象)。当前对象所创建的对象,调用方法时返回的对象(返回值是对象
6、)。任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,任何一个对象,如果满足上面的条件之一,就是当前对象的“朋友”,否则就是“陌生人”否则就是“陌生人”。每个对象都会与其他对象有耦合关系,只要两个对象之间有每个对象都会与其他对象有耦合关系,只要两个对象之间有耦合关系耦合关系,就表明这两个对象之间是,就表明这两个对象之间是朋友关系朋友关系。耦合耦合的方式很多,依赖、关联、组合、聚合等。的方式很多,依赖、关联、组合、聚合等。对象中的成员变量、方法参数、方法返回值中的对象称为直接的朋友对象中的成员变量、方法参数、方法返回值中的对象称为直接的朋友,而,而出现在成员方法中的局部对象则不是直接
7、的朋友出现在成员方法中的局部对象则不是直接的朋友。也就是说,陌。也就是说,陌生的类对象最好不要作为局部变量出现在类的内部。生的类对象最好不要作为局部变量出现在类的内部。迪米特法则分析迪米特法则分析 迪米特法则分析迪米特法则分析 迪米特法则可分为迪米特法则可分为狭义法则狭义法则和和广义法则广义法则。狭义的迪米特法则狭义的迪米特法则 如果两个类之间不必彼此直接通信,那么这两个类就不应当发如果两个类之间不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以如果其中的一个类需要调用另一个类的某一个方法的话,可以通过通过第三者转
8、发这个调用第三者转发这个调用。yradnuoB sseccA A tcejbOC tcejbOB tcejbOA tcejbO 1.某人与一个朋友组成自己的朋友圈某人与一个朋友组成自己的朋友圈,两个人都需要与一个圈外的陌生,两个人都需要与一个圈外的陌生人发生相互作用,如图人发生相互作用,如图1。2.朋友与陌生人若是朋友,组成朋友朋友与陌生人若是朋友,组成朋友的朋友圈,如图的朋友圈,如图2。某人某人 朋友朋友 陌生人陌生人 某人的朋友圈某人的朋友圈 图图1 图图2 某人某人 朋友朋友 陌生人陌生人 某人的朋友圈某人的朋友圈 朋友的朋友圈朋友的朋友圈 3.迪米特法则迪米特法则建议某人建议某人不要直
9、接不要直接与陌生人直接发生相互作用与陌生人直接发生相互作用,而,而是是通过朋友与之发生间接的相互通过朋友与之发生间接的相互作用作用,如图,如图3。某人某人 朋友朋友 陌生人陌生人 某人的朋友圈某人的朋友圈 朋友的朋友圈朋友的朋友圈 图图3 3.迪米特法则迪米特法则建议某人建议某人不要直不要直接与陌生人直接发生相互作用接与陌生人直接发生相互作用,而是,而是通过朋友与之发生间接通过朋友与之发生间接的相互作用的相互作用,如图,如图3。图图3 某人某人 朋友朋友 陌生人陌生人 某人的朋友圈某人的朋友圈 朋友的朋友圈朋友的朋友圈 此时,此时,“朋友朋友”实际上起到了实际上起到了将将“某人某人”对对“陌生
10、人陌生人”的调的调用转发给用转发给“陌生人陌生人”的作用。的作用。这种传递叫做这种传递叫做调用转发调用转发。所谓。所谓调用转发,需要隐藏调用转发,需要隐藏“陌生人陌生人”的存在,使得的存在,使得“某人某人”仅知道仅知道“朋友朋友”,而不知道,而不知道“陌生陌生人人”。Someone +operation1(Friend friend)Friend +operationg2():void+provide():Stranger Stranger +operation3():void-stranger:Stranger 实例实例1:不满足迪米特法则的系统设计:不满足迪米特法则的系统设计 Someon
11、e与与Friend是朋友,而是朋友,而Friend与与Stranger是朋友。是朋友。public class Someone public void operation1(Friend friend)Stranger stranger=friend.provide();stranger.operation3();public class Friend private Stranger stranger =new Stranger();public void operation2()/public Stranger provide()return stranger;public class S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 53-14-8 面向对象设计原则 迪米特法则 面向对象与UML 53 14 面向 对象 设计 原则 迪米特 法则 UML
限制150内