0面向对象设计原则

0面向对象设计原则

ID:32591629

大小:70.93 KB

页数:10页

时间:2019-02-13

0面向对象设计原则_第1页
0面向对象设计原则_第2页
0面向对象设计原则_第3页
0面向对象设计原则_第4页
0面向对象设计原则_第5页
资源描述:

《0面向对象设计原则》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、面向对象设计的原则正如牛顿三大定律在经典力学中的位置一样,“开■闭''原则(Open-ClosedPrinciple)是面向对象的可复用设计(ObjectOrientedDesign或00D)的基石。其他设计原则(里氏代换原则、依赖倒转原则、合成/聚合复用原则、辿米特法则、接口隔离原则)是实现“开-闭”原则的手段和工具。—、“开■闭^原则(Open-ClosedPrinciple5OCP)1・1“开-闭,源则的定义及优点1)定义:一个软件实体应当对扩展开放,对修改关Softwareentitiesshouldbeopenforextension,butclosedformodificati

2、on.)□即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。2)满足“开-闭瞧则的系统的优点a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化屮的软件系统有一定的适应性和灵活性。b)已有的软件模块,特别是最重要的抽彖层模块不能再修改,这就使变化屮的软件系统有一定的稳定性和延续性。c)这样的系统同时满足了可复用性与可维护性。1.2如何实现“开•闭”原则在面向对象设计中,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。解决问题关键在于抽象化,抽象化是面向对象设计的第一个核心

3、本质。对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西,从更高一层去思考。这降低了思考的复杂度,我们不用同时考虑那么多的东西。换言之,我们封装了事物的本质,看不到任何细节。在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭S而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放覽对实体进行扩展时,不必改动软件的源代码或者二进制代码。关键在于抽象。1.3对可变性的封装原则"开■闭”原则也就是"对可变性的封装原则"(PrincipleofEncapsulationofVariation,EVP)。即找

4、到一个系统的可变因素,将之封装起来。换言之,在你的设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。“对可变性的封装原则”意味着:a)—种可变性不应当散落在代码的许多角落,而应当被封装到一个对象里面。同一可变性的不同表象意味着同一个继承等级结构中的具体子类。因此,此处可以期待继承关系的出现。继承是封装变化的方法,而不仅仅是从一般的对象生成特殊的对象。b)—种可变性不应当与另一种可变性混合在一起。作者认为类图的继承结构如果超过两层,很可能意味着两种不同的可变性混合在了一起。使用“可变性封装原则”来进行设计可以使系统遵守“开■闭”原则。即使无法百分之百的做到“开

5、■闭”原则,但朝这个方向努力,可以显著改善一个系统的结构。二、里氏代换原则(LiskovSubstitutionPrinciple,LSP)2.1概念定义:如果对每一个类型为T1的对象01,都有类型为T2的对象02,使得以T1定义的所有程序P在所有的对象01都代换为02时,程序P的行为没有变化,那么类型T2是类型T1的子类型。即,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类。而且它觉察不出基类对象和子类对象的区别。也就是说,在软件里面,把基类都替换成它的子类,程序的行为没有变化。反过来的代换不成立,如果一个软件实体使用的是一个子类的话,那么它不一定适用于基类。任何基类可以出现

6、的地方,子类一定可以出现。基于契约的设计、抽象出公共部分作为抽象基类的设计。2.2里氏代换原则与“开•闭,源则的关系实现“开■闭”原则的关键步骤是抽象化。基类与子类之间的继承关系就是抽象化的体现。因此里氏代换原则是对实现抽象化的具体步骤的规范。违反里氏代换原则意味着违反了“开■闭”原则,反之未必。三、依赖倒转原则(dependenceinversionprinciple,DIP〉3.1概念依赖倒转原则就是要依赖于抽象,不要依赖于实现。(Abstractionsshouldnotdependupondetails.Detailsshoulddependuponabstractions.)要针

7、对接口编程,不要针对实现编程。(Programtoaninterface,notanimplementation.)也就是说应当使用接口和抽象类进行变量类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。而不耍用具体类进行变量的类型声明、参数类型声明、方法返还类型说明,以及数据类型的转换等。要保证做到这一点,一个具体类应当只实现接口和抽象类中声明过的方法,而不要给岀多余的方法。传统的过程性系统的设计办法倾向于

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。