【源起】为什么会产生OOP?

20世纪60年代,软件曾出现过严重危机,由软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰学者E.W.Dijkstra提出了程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化。此举引起了软件界长达数年的论战,并由此产生了结构化程序设计方法,同时诞生了基于这一设计方法的程序设计语言Pascal。

但是,到了70年代末期,随着计算机科学的发展和应用领域的不断扩大,对计算机技术的要求越来越高。结构化程序设计语言和结构化分析与设计已无法满足用户需求的变化,于是面向对象技术开始浮出水面。

面向对象程序设计方法起源于Simula 67语言。它的面向对象概念的影响是最巨大而深远的。它本身虽因为比较难学、难用而未能广泛流行,但在它的影响下所产生的面向对象技术却迅速传播开来,并在全世界掀起了一股OO热潮,盛行不衰。面向对象程序设计在软件开发领域引起了大的变革,极大地提高了软件开发的效率,为解决软件危机带来了一线光明。

理解:
    程序设计由语句发展到方法(函数)再发展到对象
    有点像细菌发展到单细胞再进化到个体的感觉
    背后的助力是人们日益丰富的需求

【定义】OOP是什么?

Smalltalk由Alan Kay、Dan Ingalls、Adele Goldberg和Xerox PARC的其他人一起开发的。Smalltalk比Simula更加面向对象 - Smalltalk中的所有东西都是一个对象,包括类、整数和块(闭包)。最初的Smalltalk-72并没有实现子类的功能。这是由Dan Ingalls在Smalltalk-76中引入的。

虽然Smalltalk支持类并最终实现了子类化,但Smalltalk并不是关于类或子类化的东西。它是一个受Lisp和Simula启发的函数式语言。Alan Kay认为,业界对子类化的关注会混淆面向对象编程的真正优势。

“我很抱歉,我很久以前就为这个话题创造了”对象“一词,因为它让很多人专注于这个较小的想法。最重要的是消息传递。”  
~ Alan Kay
2003邮件交流中,Alan Kay澄清了当他称Smalltalk是面向对象时的自身想法:
“OOP对我而言意味着仅有消息传递、本地保留和保护以及隐藏状态过程,以及所有事物的完全的晚绑定。”  
~ Alan Kay

换而言之,按照Alan Kay的说法,OOP的基本要素是:

  • 消息传递
  • 封装
  • 动态绑定

值得注意的是,继承和子类多态并未被Alan Kay视为OOP的必备要素,Alan Kay创造了这个术语,并为大众带来了OOP。

tips:
        OOP: Object Oriented Programming 面向对象编程
        OOPL: Object Oriented Programming Language 面向对象编程语言

参考:


JTR354
21 声望1 粉丝

读书点亮生活