早期的计算机编程方法很自然地应用了面向过程的编程方法,也称作结构化程序设计方法。这种方法天生地特别适用于解决科学计算类问题。比如,先输入用于计算的数据,根据计算机需求逐步计算机,最后输出计算结果。计算步骤之间具有很强的连续性、逻辑性,所以早期使用的机器语言、汇编语言、BASIC、C、Pascal等都是面向过程的语言。
实际上,早在20世纪40年代,在对数字模拟的分析研究中就引入了“对象”的概念。随后经过多年的发展,在70年代初期,以Smalltalk为代表的纯面向对象程序设计语言环境诞生,它体现了纯粹的面向对象思想,堪称面向对象的经典。随后的80年代和90年代中产生了许多面向对象的语言,比如C++、JAVA、C#等。
面向对象语言的发展是计算机技术发展到一定阶段的产物。随着计算机技术发展,需要解决的问题越来越复杂,计算机软件规模的扩张也很快。这样一来,软件的代码量愈来愈大,软件的开发、代码的维护、功能的修改变得越来越困难,很自然地过渡到了面向对象的编程方法。
面向对象的编程是类似于模拟现实世界的事物,现实宇宙中的万物都处于不断运动变化之中,事物的属性、能动性时刻都可能有所变化。而它们的运动变化既有相互作用,也有自身演变。程序描述的事物一旦具有以上特性,将与真实世界达到极强的拟合度,更贴近自然界的运行方式。
从代码的组织方面来看,面向对象程序的代码组织比面向过程程序的代码组织更合理,更易于代码重用和维护。面向过程程序是由一系列相互独立的常量、变量和函数组成,他们之间没有明显的关联和隶属关系。任意函数之间可以相互调用,任意函数也可以使用全局的常量、变量,甚至可以改变全局的变量。面向对象程序的代码则是由一系列对象组成,每个对象包含其所属的常量、变量、函数(为与面向过程函数区分,常称为方法),一般来说,引用对象内部状态(对象内部常量)与修改对象内部状态(对象内部变量)必须通过对象自身来进行,不能或不允许直接从对象的外部修改和控制对象的状态。这样,就可以避免面向过程程序中的变量发生不可预料的改变或超出其范围的变化。
从以上内容看出,面向对象程序主要优点是易维护、易复用、易扩展,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。面向对象的三个基本特征是封装、继承、多态。
面向对象的编程方法确实具有一定的优越性,但并不能取代面向过程的的编程方法。当今IT界两种方式的编程语言都是很活跃的,甚至有可以混合使用两种编程方法的高级语言,如Python、PHP等。