对可变性的封装原则

http://zhidao.baidu.com/link?url=cfRIgIL2YrU9HnKFvDCIBBWopD3lFIlBdNgazFpEIfcRyjcjLDpHtZE1hM-V3rExCimreXVvapq64IlOB9vT0a

“对可变性的封装原则”(Principle of Encapsulation of Variation ,EVP)。即找到一个系统的可变因素,将之封装起来。换言之,在你的设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。

“开-闭”原则(Open-Closed Principle,OCP)的定义及优点
定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but closed for modification.)。即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。
满足“开-闭”原则的系统的优点:
a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性。
b)已有的软件模块,特别是最重要的抽象层模块不能再修改,这就使变化中的软件系统有一定的稳定性和延续性。
c)这样的系统同时满足了可复用性与可维护性。
如何实现“开-闭”原则
在面向对象设计中,不允许更改的是系统的抽象层,而允许扩展的是系统的实现层。换言之,定义一个一劳永逸的抽象设计层,允许尽可能多的行为在实现层被实现。
解决问题关键在于抽象化,抽象化是面向对象设计的第一个核心本质。
对一个事物抽象化,实质上是在概括归纳总结它的本质。抽象让我们抓住最最重要的东西,从更高一层去思考。这降低了思考的复杂度,我们不用同时考虑那么多的东西。换言之,我们封装了事物的本质,看不到任何细节。
在面向对象编程中,通过抽象类及接口,规定了具体类的特征作为抽象层,相对稳定,不需更改,从而满足“对修改关闭”;而从抽象类导出的具体类可以改变系统的行为,从而满足“对扩展开放”。
对实体进行扩展时,不必改动软件的源代码或者二进制代码。关键在于抽象。
对可变性的封装原则
“开-闭”原则也就是“对可变性的封装原则”(Principle of Encapsulation of Variation ,EVP)。即找到一个系统的可变因素,将之封装起来。换言之,在你的设计中什么可能会发生变化,应使之成为抽象层而封装,而不是什么会导致设计改变才封装。
“对可变性的封装原则”意味着:
a)一种可变性不应当散落在代码的许多角落,而应当被封装到一个对象里面。同一可变性的不同表象意味着同一个继承等级结构中的具体子类。因此,此处可以期待继承关系的出现。继承是封装变化的方法,而不仅仅是从一般的对象生成特殊的对象。
b)一种可变性不应当与另一种可变性混合在一起。作者认为类图的继承结构如果超过两层,很可能意味着两种不同的可变性混合在了一起。
使用“可变性封装原则”来进行设计可以使系统遵守“开-闭”原则。即使无法百分之百的做到“开-闭”原则,但朝这个方向努力,可以显著改善一个系统的

时间: 2024-10-12 22:15:10

对可变性的封装原则的相关文章

低耦合高聚合,封装原则

(oop)面向对象编程的一个关键原则之一就是封装,把暴漏的数据封装起来,尽可能的让对象管理它们自己的状态,因为过多的依存性会造成紧耦合性系统,使得任意一点小的改动都可能造成许多无法预料的结果.而数据封装机制是一个控制对象数据和状态强有力的方法,它对外部世界隐藏其内部细节,这就意味着每一个对象都应该尽可能少的了解系统的其他部分或者被其他部分所了解,这样一来一旦发生了变化,需要了解这一个变化的对象会比较少,因此变化也就相对来说便于改动. 内聚:内聚指的是一个模块内部各部分之间的关联程度,一个好的内聚

面向对象设计原则

七大原则:开闭原则.里氏代换原则.依赖倒转原则.合成/聚合复用原则.迪米特法则.接口隔离原则,单一职责原则. 开闭原则是面向对象的可复用的基石.其他六种原则是手段和工具. 各规则详细(本部分为转载) http://kb.cnblogs.com/page/214010/ 正如牛顿三大定律在经典力学中的位置一样,“开-闭”原则(Open-Closed Principle)是面向对象的可复用设计(Object Oriented Design或OOD)的基石.其他设计原则(里氏代换原则.依赖倒转原则.合

面向对象的设计原则(JAVA)

一.单一职责原则(Single Responsibility Principe,SRP) 1.1单一职责原则的定义 1)定义:在软件系统中,一个类只负责一个功能领域中的相应职责. 2)另一种定义方式如下:就一个类而言,应该仅有一个引起它变化的原因. 1.2对可变性的封装原则 一个类(或者大到模块,小到方法)承担的职责越多,它被复用的可能性越小.而且如果一个类承担的职责过多,就相当于将这些职责耦合在一起,当其中一个职责变化时,可能会影响其他职责的运作. 类的职责主要包过两方面:数据职责和行为职责,

“开-闭”原则 (Open-Closed principle, OCP)

"开-闭"原则 (Open-Closed principle, OCP) 一个软件实体应当对扩展开放,对修改关闭. Software entities should be open for extension, but closed for modification. 在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展. "可变性的封装原则"从工程的角度讲解了如何实现"开-闭"原则. "可变性的封装原则"意味着两

“开”-“闭”原则

对可变性的封装原则(Principle of Encapsulation of Variation) 考虑你的设计什么可能会发生变化.这与通常将焦点放到 ”什么会导致设计改变“ 的思想方式正好相反.这一思路考虑的不是 什么会导致设计改变, 而是考虑你允许什么发生改变而不让这一改变导致重新设计. 找到一个系统的可变因素, 将它封装起来.(对可变性的封装原则) 这意味着,1)一种可变性不应该散落在代码的各个角落里, 而应该被封装到一个对象里面.同一种可变性的不同表象意味着同一个继承等级结构中的具体子

OOD 7大原则

1.  开闭原则(Open-Closed Principle,OCP) 1)定义:一个软件实体应当对扩展开放,对修改关闭( Software entities should be open for extension,but closed for modification.).即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展. 2)满足“开-闭”原则的系统的优点: a)通过扩展已有的软件系统,可以提供新的行为,以满足对软件的新需求,使变化中的软件系统有一定的适应性和灵活性. b

学习设计模式个人思想总结

1.就是首先将需求中的变于不变进行确定 2,不变的东西首先将其进行 确定, 而那些最能变的东西要将其进行逻辑上的是抽象,抽象最高的最好使接口, 最为核心的思想是将 变得东西你最好将其进行先抽象出来,而后其如何进行变进行进一步进的细化 ,对其进行留出来一些余地,以用来以后的变化 设计模式可能在一些需求较为确定的时候,或者对于一些莫些一些较为确定的场景的应用较为好, 但是他却不能将其进行用于对用户的需求频繁的变化进行一次性的成功 个人学学习心得: 1.其实,23中设计模式都是要到达一种开闭原则(对扩

Java设计模式之初学者笔记——设计模式基础讲解

前言 最近了解了一下设计模式,起初看的是<大话设计模式>,这本书是用C#语言写的,觉着挺有意思,其实很多模式我们都已经在用了,却不知道这就是设计模式.所以后来买了本GOF的<设计模式--可复用面向对象软件的基础>打算好好钻研下.这本书是设计模式的鼻祖,相当权威,书名中说的是"可复用面向对象软件的基础",这是基础,我对此表示比较震撼.用了三年的面向对象语言居然不了解设计模式,不知道这是基础,看来也是白活了.我暂时了解到的在此基础上还有重构等等很多比较高级概念.但这

.NET 高级架构师 架构师之路(5)---开闭原则

2 开闭原则(Open-Closed Principle,OCP) 2.1 什么是开闭原则     开闭原则是面向对象设计中"可复用设计"的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段. 1988年,Bertrand Meyer在他的著作<Object Oriented Software Construction>中提出了开闭原则,它的原文是这样:"Software entities should be open for e