02 C#设计模式-面向对象设计原则.ppt
《02 C#设计模式-面向对象设计原则.ppt》由会员分享,可在线阅读,更多相关《02 C#设计模式-面向对象设计原则.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、www.ChinaSA.infoDDesign esign P Patternsatterns面向对象设计原则面向对象设计原则面向对象设计原则面向对象设计原则刘刘 伟伟(Sunny)weiliu_www.ChinaSA.info大纲w面向对象设计原则概述w单一职责原则w开闭原则w里氏代换原则w依赖倒转原则w接口隔离原则w合成复用原则w迪米特法则www.ChinaSA.info面向对象设计原则概述w可维护性(Maintainability):指软件能够被理解、改正、适应及扩展的难易程度w可复用性(Reusability):指软件能够被重复使用的难易程度w面向对象设计的目标之一在于支持可维护性复用
2、,一方面需要实现设计方案或者源代码的复用,另一方面要确保系统能够易于扩展和修改,具有良好的可维护性www.ChinaSA.info面向对象设计原则概述w面向对象设计原则为支持可维护性复用而诞生w指导性原则,非强制性原则w每一个设计模式都符合一个或多个面向对象设计原则,面向对象设计原则是用于评价一个设计模式的使用效果的重要指标之一www.ChinaSA.info面向对象设计原则概述设计设计原原则则名称名称定定 义义使用使用频频率率单单一一职责职责原原则则(Single Responsibility Principle,SRP)一一个个对对象象应应该该只只包包含含单单一一的的职职责责,并并且且该该
3、职职责责被被完整地封装在一个完整地封装在一个类类中中开开闭闭原原则则(Open-Closed Principle,OCP)软软件件实实体体应应当当对扩对扩展开放,展开放,对对修改修改关关闭闭里氏代里氏代换换原原则则(Liskov Substitution Principle,LSP)所所有有引引用用基基类类的的地地方方必必须须能能透透明明地地使使用用其其子子类类的的对对象象依依赖赖倒倒转转原原则则(Dependence Inversion Principle,DIP)高高层层模模块块不不应该应该依依赖赖低低层层模模块块,它,它们们都都应该应该依依赖赖抽象。抽象不抽象。抽象不应该应该依依赖赖于于
4、细节细节,细节应该细节应该依依赖赖于于抽象抽象接口隔离原接口隔离原则则(Interface Segregation Principle,ISP)客客户户端不端不应该应该依依赖赖那些它不需要的那些它不需要的接口接口合成复用原合成复用原则则(Composite Reuse Principle,CRP)优优先先使使用用对对象象组组合合,而而不不是是继继承承来来达达到到复复用用的的目目的的迪米特法迪米特法则则(Law of Demeter,LoD)每每一一个个软软件件单单位位对对其其他他的的单单位位都都只只有有最最少少的的知知识识,而且局限于那些与本而且局限于那些与本单单位密切相关的位密切相关的软软件
5、件单单位位www.ChinaSA.info单一职责原则 w单一职责原则定义单一职责原则是最简单的面向对象设计原则,单一职责原则是最简单的面向对象设计原则,用于控制用于控制类的粒度大小类的粒度大小单单一一职责职责原原则则:一个对象应该只包含只包含单单一的一的职责职责,并且该职责被完整地封装在一个类中。Single Responsibility Principle(SRP):Every object should have a single responsibility,and that responsibility should be entirely encapsulated by the c
6、lass.www.ChinaSA.info单一职责原则 w单一职责原则定义就一个类而言,应该就一个类而言,应该仅有一个引起它变化的原因仅有一个引起它变化的原因There should never be more than one reason for a class to change.www.ChinaSA.info单一职责原则 w单一职责原则分析 一个类(大到模块,小到方法)一个类(大到模块,小到方法)承担的职责越多承担的职责越多,它,它被被复用的可能性就越小复用的可能性就越小当一个职责变化时当一个职责变化时,可能,可能会影响其他职责的运作会影响其他职责的运作将这些职责进行分离,将这些职责
7、进行分离,将不同的职责封装在不同的类中将不同的职责封装在不同的类中将不同的变化原因封装在不同的类中将不同的变化原因封装在不同的类中单一职责原则单一职责原则是实现高内聚、低耦合的指导方针是实现高内聚、低耦合的指导方针www.ChinaSA.info单一职责原则 w单一职责原则实例 实例说明实例说明某软件公司开发人员针对CRM(Customer Relationship Management,客户关系管理)系统中的客户信息图表统计模块提出了如图2-1所示的初始设计方案。图图2-1 初始初始设计设计方案方案结结构构图图在图2-1中,GetConnection()方法用于连接数据库,FindCusto
8、mers()用于查询所有的客户信息,CreateChart()用于创建图表,DisplayChart()用于显示图表。现使用单一职责原则对其进行重构。www.ChinaSA.info单一职责原则 w单一职责原则实例 实例解析实例解析 www.ChinaSA.info开闭原则w开闭原则定义 开闭原则是开闭原则是面向对象的可复用设计的第一块基石面向对象的可复用设计的第一块基石,是最,是最重要的面向对象设计原则重要的面向对象设计原则开开闭闭原原则则:软件实体应当对扩对扩展开放,展开放,对对修改关修改关闭闭。Open-Closed Principle(OCP):Software entities sh
9、ould be open for extension,but closed for modification.www.ChinaSA.info开闭原则w开闭原则分析 开闭原则由开闭原则由Bertrand Meyer于于1988年提出年提出在开闭原则的定义中,软件实体可以是在开闭原则的定义中,软件实体可以是一个软件模块一个软件模块、一个由多个类组成的局部结构一个由多个类组成的局部结构或或一个独立的类一个独立的类开闭原则是指开闭原则是指软件实体应尽量在不修改原有代码的情况软件实体应尽量在不修改原有代码的情况下进行扩展下进行扩展www.ChinaSA.info开闭原则w开闭原则分析 抽象化抽象化是开
10、闭原则的关键是开闭原则的关键相对稳定的相对稳定的抽象层抽象层+灵活的灵活的具体层具体层对可变性封装原则对可变性封装原则(Principle of Encapsulation of Variation,EVP):找到系统的可变因素并将其:找到系统的可变因素并将其封装起来封装起来www.ChinaSA.info里氏代换原则w里氏代换原则定义 里氏代里氏代换换原原则则:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换o2时,程序P的行为没有变化,那么类型S是类型T的子类型。Liskov Substitution Principle(LSP):If
11、 for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T.里氏代里氏代换换原原则则:所有引用基基类类的地方必须能透明地使用其子子类类的对象。Liskov Substitution Principle(LSP):Functions that use pointe
12、rs or references to base classes must be able to use objects of derived classes without knowing it.www.ChinaSA.info里氏代换原则 w里氏代换原则分析里氏代换原则由里氏代换原则由2008年图灵奖得主、美国第一位计算年图灵奖得主、美国第一位计算机科学女博士、麻省理工学院教授机科学女博士、麻省理工学院教授Barbara Liskov和卡和卡内基内基.梅隆大学梅隆大学Jeannette Wing教授于教授于1994年提出年提出芭芭拉芭芭拉利斯科夫(利斯科夫(Barbara Liskov),
13、美国计算机科学家,2008年图灵奖得主,2004年约翰.冯诺依曼奖得主,美国工程院院士,美国艺术与科学院院士,美国计算机协会会士。现任麻省理工学院电子电气与计算机科学系教授,她是美国第一个计算机科学女博士。www.ChinaSA.info里氏代换原则 w里氏代换原则分析在软件中在软件中将一个基类对象替换成它的子类对象,程序将将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常不会产生任何错误和异常,反过来则不成立。如果一个,反过来则不成立。如果一个软件实体使用的是一个子类对象的话,那么它不一定能软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象够使用基类对象在程序中在程序
14、中尽量使用基类类型来对对象进行定义尽量使用基类类型来对对象进行定义,而在运,而在运行时再确定其子类类型行时再确定其子类类型我喜欢动物我喜欢动物 我喜欢狗我喜欢狗 因为狗是动物因为狗是动物 www.ChinaSA.info依赖倒转原则 w依赖倒转原则定义依依赖赖倒倒转转原原则则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不抽象不应该应该依依赖赖于于细节细节,细节应该细节应该依依赖赖于抽象于抽象。Dependency Inversion Principle(DIP):High level modules should not depend upon low level modules,b
15、oth should depend upon abstractions.Abstractions should not depend upon details,details should depend upon abstractions.www.ChinaSA.info依赖倒转原则 w依赖倒转原则定义要要针对接口编程针对接口编程,不要针对实现编程不要针对实现编程Program to an interface,not an implementation.www.ChinaSA.info依赖倒转原则 w依赖倒转原则分析依赖倒转原则是依赖倒转原则是Robert C.Martin在在1996年为年为
16、“C+Reporter”所写的专栏所写的专栏Engineering Notebook的第三的第三篇,后来加入到他在篇,后来加入到他在2002年出版的经典著作年出版的经典著作Agile Software Development,Principles,Patterns,and Practices一书中一书中www.ChinaSA.info依赖倒转原则 w依赖倒转原则分析在程序代码中传递参数时或在关联在程序代码中传递参数时或在关联关系中,关系中,尽量引用层次高的抽象层尽量引用层次高的抽象层类类,即使用接口和抽象类进行变量,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返类型声明、参数类型声明
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 02 C#设计模式-面向对象设计原则 C# 设计 模式 面向 对象 原则
限制150内