OCP有两个版本,一个是Meyer最初提出的关于实现继承的,另一个是现在比较流行的关于接口继承的。前者关注的是实现的稳定(closed)与扩展(open);后者关注的是规范的稳定(closed)与扩展(open)。不知道理解对不对?
open closed principle
(4 posts) (2 voices)-
Posted 6 months ago #
-
首先,Meyer提出的OCP是指模块分解的原则,并不限于类级别的模块。
其次,当时他提出的OCP其实已经涵盖了实现继承和接口继承。
下面稍微具体地说一下。
所谓open是指模块可以扩展(extension),这个容易理解。
所谓closed是指能为其他模块所用,这包括两方面:一是设计层或规范层——模块有定义良好的(well-defined)、稳定的规范描述,并作为正式的标准被认可和接受;二是实现层——模块可以作为编译单位,并被客户使用(比如作为library)。当然,Meyer在他的著作《Object Oriented Software Construction》中提到的继承的确主要是实现继承,那时似乎还没有明确的接口继承概念。
最后,重申《冒号课堂》中强调的观点:提倡接口继承,避免实现继承。
Posted 6 months ago # -
这里的closed的概念和数学中的封闭系统(closed system)是否有联系?
Posted 6 months ago # -
数学中最常见的(但不限于)closed是指:一个集合中某种运算是封闭的,即集合中任意一个或多个元素经过该运算后仍然属于该集合,也称闭包(closure)原则。例如,整数对加法、减法、乘法封闭,对除法不封闭(比如:3/2不属于整数)。
OCP中的closed主要是指“固定不变”、“不容修改”的意思。
二者不能说完全没有联系——都有“封闭”的涵义,但总的说来区别大于联系。Posted 6 months ago #
Reply
You must log in to post.