日历

September 2020
M T W T F S S
 123456
78910111213
14151617181920
21222324252627
282930  

open closed principle

Home Forums 《冒号课堂》讨论区 open closed principle

  • This topic is empty.
Viewing 3 reply threads
  • Author
    Posts
    • #1039
      Todd
      Member

      OCP有两个版本,一个是Meyer最初提出的关于实现继承的,另一个是现在比较流行的关于接口继承的。前者关注的是实现的稳定(closed)与扩展(open);后者关注的是规范的稳定(closed)与扩展(open)。不知道理解对不对?

    • #1166
      hui
      Keymaster

      首先,Meyer提出的OCP是指模块分解的原则,并不限于类级别的模块。

      其次,当时他提出的OCP其实已经涵盖了实现继承和接口继承。

      下面稍微具体地说一下。

      所谓open是指模块可以扩展(extension),这个容易理解。

      所谓closed是指能为其他模块所用,这包括两方面:一是设计层或规范层——模块有定义良好的(well-defined)、稳定的规范描述,并作为正式的标准被认可和接受;二是实现层——模块可以作为编译单位,并被客户使用(比如作为library)。

      当然,Meyer在他的著作《Object Oriented Software Construction》中提到的继承的确主要是实现继承,那时似乎还没有明确的接口继承概念。

      最后,重申《冒号课堂》中强调的观点:提倡接口继承,避免实现继承。

    • #1167
      Todd
      Member

      这里的closed的概念和数学中的封闭系统(closed system)是否有联系?

    • #1168
      hui
      Keymaster

      数学中最常见的(但不限于)closed是指:一个集合中某种运算是封闭的,即集合中任意一个或多个元素经过该运算后仍然属于该集合,也称闭包(closure)原则。例如,整数对加法、减法、乘法封闭,对除法不封闭(比如:3/2不属于整数)。

      OCP中的closed主要是指“固定不变”、“不容修改”的意思。

      二者不能说完全没有联系——都有“封闭”的涵义,但总的说来区别大于联系。

Viewing 3 reply threads
  • You must be logged in to reply to this topic.
 请您评分1星(很差)2星(不行)3星(一般)4星(不错)5星(很棒)