1 / 44
文档名称:

《面向对象编程原则》.ppt

格式:ppt   大小:4,227KB   页数:44页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

《面向对象编程原则》.ppt

上传人:相惜 2024/4/27 文件大小:4.13 MB

下载得到文件列表

《面向对象编程原则》.ppt

相关文档

文档介绍

文档介绍:该【《面向对象编程原则》 】是由【相惜】上传分享,文档一共【44】页,该文档可以免费在线阅读,需要了解更多关于【《面向对象编程原则》 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。设计模式(1)导言:〔CARP〕Booch和Rumbaugh的新的“统一〞标识符单一职责SRP一个优良的系统设计,强调模块间保持低耦合、高内聚的关系,在面向对象设计中这条规那么同样适用,所以面向对象的第一个设计原那么就是:单一职责原那么〔SRP,SingleResponsibilityPrinciple〕。单一职责,强调的是职责的别离,在某种程度上对职责的理解,构成了不同类之间耦合关系的设计关键,因此单一职责原那么或多或少成为设计过程中一个必须考虑的根底性原那么。〔SRP〕一个类,最好只做一件事,只有一个引起它变化的原因。例如,在一个Game类中,可能会具有两个不同的职责,一个职责是维护创立当前轮的比赛,另一个职责是计算总比赛得分。根据srp原那么,着两个职责应该别离到两个类中,Game类保持维护创立当前轮的比赛,Scorer类负责计算比赛的得分。如何要把这两个职责别离到单独的类中呢?如果一个类承担的职责过多,等于把这些职责耦合在了一起。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。例如,考虑以下图的设计。Retangle类具有两方法,如图。一个方法把矩形绘制在屏幕上,另一个方法计算矩形的面积。有两个不同的Application使用Rectangle类,如上图。一个是计算几何面积的,Rectangle类会在几何形状计算方面给予它帮助。另一个Application实质上是绘制一个在舞台上显示的矩形。Rectangle类具有了两个职责,第一个职责是提供一个矩形形状几何数据模型;第二个职责是把矩形显示在屏幕上。对于SRP的违反导致了一些严重的问题。首先,我们必须在计算几何应用程序中包含核心显示对象的模块。其次,如果绘制矩形Application发生改变,也可能导致计算矩形面积Application发生改变,导致不必要的重新编译,和不可预测的失败。一个较好的设计是把这两个职责别离到以下图所示的两个完全不同的类中。这个设计把Rectangle类中进行计算的局部一道GeometryRectangle类中。现在矩形绘制方式的改变不会对计算矩形面积的应用产生影响了。,我们把职责定义为“变化的原因〞(areasonforchange)。如果你能够想到多于一个的动机去改变类,那么这个类就具有多于一个的职责。有时,我们很难注意到这一点。我们****惯于以组的形式去考虑职责。classModem{public:voiddial(pno:String):;voidhangup():;voidsend(c:Char):;voidrecv():;}上述Modem接口,大多数人会认为这个接口看起来非常合理。该接口声明了4个函数确实是Modem所具有的功能。然而,该接口却显示出了两个职责,一个是连接管理〔dial+hangup〕,第二个是数据通信〔send+recv〕。这两个职责应该被别离开么?这依赖于应用程序的变化。是按照实际情况决定的。如果应用程序的变化会影响连接管理,那么设计就具有僵化的臭味。因为,调用send和recv的类必须要重新编辑。在这种情况下,这两个职责应该被别离,这样做会防止这两个职责耦合在一起。另一方面,如果应用程序的变化总是导致这两方面职责同时变化,那么就不必别离他们。实际上,,Employee类包含了业务逻辑和对于持久层的控制。这两个职责在大多数情况下决不应该混合在一起。业务规那么往往会频繁的变化,而持久化的方式却不会如此频繁的变化,并且变化的原因也是完全不同的。把业务规那么和持久模块绑定在一起的做法是不妥的。当僵化性和脆弱性的臭味变得强烈,那么就应该使用FACADE和PROXY模式对设计进行重构,别离这两个职责。小结:SRP是所有原那么中最简单的之一,也是最难正确应用的。我们会自然的把职责结合在一起。软件设计要做的许多内容,就是发现职责并把那些职责相互别离。别离的原那么也不是教条性的,需要应实际需求而定。“ClosedforModification;OpenforExtension〞——是所有面向对象原那么的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原那么正是对这一目标的最直接表达。其他的设计原那么,很多时候是为实现这一目标效劳的,例如以Liskov替换原那么实现最正确的、正确的继承层次,就能保证不会违反开放封闭原那么。OCP的动机很简单:软件是变化的。不管是优质的设计还是低劣的设计都无法回避这一问题。OCP说明了软件设计应该尽可能地使架构稳定而又容易满足不同的需求。