全文共3838字,预计学习时长10分钟
图源:unsplash
编程在上世纪60年代遇到了一个大问题:计算机那时还没有那么强大,需要以某种方式在数据结构和进程之间分配容量。这意味着如果拥有大量数据,那么在不将计算机推向极限的情况下,很多事情将无法完成。另一方面,如果需要做很多事情,那么就不能使用过多的数据,否则计算机将永远占据空间。
接着艾伦·凯(AlanKay)大约于1966年或1967年得出理论认为可以使用封装的微型计算机,这些微型计算机不共享数据,而是通过消息传递进行通信。这样可以更加经济地使用计算资源。
尽管这个想法很巧妙,但直到1981年,面向对象编程才成为主流。但是从那以后,它并没有停止吸引软件开发新手和老手。面向对象编程的程序员一如既往的繁忙。
但近年来,这一已有十年历史的范式受到越来越多的批评。难道是在面向对象程序设计大行其道40年之后,技术已经超越了这种范式?
带数据的耦合函数是否可笑?
面向对象编程的主要思想非常简单:尝试将一个程序分解为功能强大的整体。随之而来的是,将数据片段和仅在相关数据上使用的那些函数耦合在一起。
请注意,这仅涵盖封装的概念。也就是说,位于对象内部的数据和函数对于外部是不可见的,一个人只能通过消息(通常称为getter和setter函数)与对象的内容进行交互。
继承和多态并没有包含在最初的想法中,但是对于当今的面向对象编程而言,这是必需的。继承基本上意味着开发人员可以定义具有其父类具有的所有属性的子类,直到1976年——面向对象的程序设计概念问世十年后,才将其引入。
十年后,多态进入了面向对象的程序设计。从根本上讲,这意味着方法或对象可以用作其他方法的模板。从某种意义上说,这是继承的概括,因为并非原始方法或对象的所有属性都需要传输给新实体;相反,可以选择覆盖属性。
多态的特殊之处在于,即使两个实体在源代码中相互依赖,被调用实体的工作方式也更像插件。这使开发人员的工作更加轻松,他们不必再担心运行时的依赖关系。
值得一提的是,继承和多态性并不是面向对象编程所独有的。真正的区别在于封装数据及其所属的方法。在那个计算资源比今天稀缺得多的时代,这是一个天才般的想法。面向对象的编程并不可笑,它使编码变得容易得多。
图源:unsplash
面向对象编程中的五大问题
面向对象编程一问世便改变了开发人员查看代码的方式。在1980年代以前,面向过程编程通常以机器为中心,开发