编程范式你们都应该不陌生,随口均可以说出来几个,好比 : 过程式,函数式,面向对象......程序员
在正式开始正文以前,我想你思考几个问题:编程
1.什么是面向对象编程?编程语言
2.面向对象的特性是什么?函数
3.面向对象继承真的好吗?设计
4.你还记得面向对象中的组合吗?对象
好了,看完这四个问题,开始正文的内容吧。继承
面向对象,即对象范式,诞生于20世纪80年代,属于第二次软件危机的产物,解决告终构化编程的危机。面向对象编程
可是真正的发展,是很曲折的,毕竟编程范式,必定程度上解决了当前的环境的困惑,影响了下一代环境。程序设计
1967 年的** Simula-67 语言**,属于第一个面向对象的语言,使用的是直接调用目标对象的方法,也就是咱们所称的组合方法。软件
受到 Simula-67 语言的启发, Smalltalk-71 编程语言诞生,Smalltalk 不一样于 Simula ,使用发消息实现对象方法的调用。
在一开始的对象范式中,对象范式思想 : 程序由对象组成,对象之间互相发送消息,协做完成任务。
注意 : 并不包括如今的 类 与 继承。
面向对象编程范式的流行,更多的缘由是解决了当时的困境,进行了新的演化。能够将其称为软件方法。
C++ 编程语言的诞生,带来了对象范式的演化。
因为在本来的对象范式思想中,在对象之间互相发消息,须要知道目标对象有哪些方法。因此,此时就须要在对象范式中,引入定义对象自己有哪些方法的“类”和“继承”。此时的对象,也就是类造出来的,并不重要了。(七夕,程序员new对象,来源于此~)
通过演变,此时的对象范式,核心就变成 : 封装、继承、多态。
而本来的 面向对象 OOP(Object Oriented Programming) 也 演变为了 面向类程序设计 COP(Class Oriented Programming)。
注意 : 此时,你是否是以为本身一直写的类,而且一直叫的面向对象,是否是能够改名为面向类了呢?
当对象范式变为 COP 以后,已经与初期的面向对象不一致了。
或者说,使用 COP这个概念,是‘错’的。
这里的错,来源于继承与组合。
1994 年 Robert C. Martin 在《** Object-Oriented C++ Design Using Booch Method** 》中,曾建议面向对象程序设计从对象活动图入手,而不是从类图入手。(对象活动图 : 组合,类图 : COP)
1995 年出版的经典做品《 Design Patterns 》中,建议优先考虑组合而不是继承。
2000 年后,工程界明确的提出:“组合比继承重要,并且更灵活”。
好了,看到这里,我不知道你们,在本身写程序的时候,使用的是组合多呢? 仍是继承多?
综上,我介绍了OOP的诞生,一级演化为COP,而且借用例证,代表对象范式的主张。
此刻,不知道你是否对于前言的四个问题有了本身的答案。
其实,面向对象的初衷 : 复合对象的惟一方法是组合。(并非继承)