从 IBM 公司的约翰·巴库斯在 1957 年开发出世界上第一个高级程序设计语言 Fortran 至今,高级程序设计语言的发展已经经历了整整半个世纪。在这期间,程序设计语言主要经历了从面向过程(如 C 和 Pascal 语言)到面向对象(如:C++、Java、Objective-C),再到面向组件编程(如 .NET 平台下的 C# 语言),以及正在快速发展的面向服务架构技术(如 SOA 和 WebService)。
约翰•巴库斯
面向过程编程
结构化编程思想的核心:功能分解(自顶向下,逐层细化)。
结构化编程思想主要是将一个大的问题划分为几个小的问题,再将几个小的问题划分为更小的问题,我们解决大问题非常困难,但是解决划分后的最小的问题却比较容易。
面向过程编程把编程任务划分成一个一个的步骤,然后按照步骤分别去执行。其中每完成一个步骤就像是完成一个任务中的单个过程一样。
尼古拉斯•沃思(Niklaus Wirth):结构化编程思想的创始人。因发明了 Euler、Alogo-W、Modula 和 Pascal 等一系列优秀的编程语言并提出了结构化编程思想而在 1984 年获得了图灵奖。
尼古拉斯•沃思
尼古拉斯•沃思教授在编程界提出了一个著名的公式:
程序 = 数据结构 + 算法
在面向过程编程或结构化编程语言当中,高级程序设计语言种类非常繁多,很多刚接触编程的人不知道应学习哪一门语言。其实语言不能用好坏来区分,任何一门程序设计语言只要它存生,就有它自己的特色和用途。在面向过程编程领域最流行的两种语言应该是 C 和 Pascal 语言,特别是 C 语言。C 语言的语法曾影响了其后所出现的所有编程语言(如 Javascript、Java、C# 等)。
面向过程编程最重要的原则:高内聚,低耦合。
内聚是指模块内部各成员之间关联的紧密程度。
耦合是指模块与模块之间关联的紧密程度。
不管是面向过程还是面向对象,我们都强调模块的独立性。只有模块独立,才能实现重用。也只有实现弱耦合,模块与模块之间才不会产生太多的关联关系。
面向过程编程语言存在的主要缺点是不符合人的思维习惯,而是要用计算机的思维方式去处理问题,而且面向过程编程语言重用性低,维护困难,无法编写大型的应用程序。
面向对象编程
面向对象编程(Object-Oriented Programming)简称 OOP 技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用 OOP 技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。
在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:
对象=(算法+数据结构),程序=(对象+对象+……)。
从上面的等式可以看出,程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。
面向对象编程思想的核心:应对变化,提高复用。
面向对象编程思想主要是复用性和灵活性(弹性)。复用性是面向对象编程的一个主要机制。灵活性主要是应对变化的特性,因为客户的需求是不断改变的,怎样适应客户需求的变化,这是软件设计灵活性或者说是弹性的问题。
阿伦•凯(Alan Kay):面向对象编程思想的创始人。2003 年因在面向对象编程上所做的巨大贡献而获得图灵奖。
阿伦•凯
阿伦•凯:麻省理工学院的院长。阿伦•凯是 Smalltalk 面向对象编程语言的发明人之一,也是面向对象编程思想的创始人之一,同时,他还是笔记本电脑最早的构想者和现代 Windows GUI 的建筑师。最早提出 PC 概念和互联网的也是阿伦•凯,所以人们都尊称他为“预言大师”。他是当今 IT 界屈指可数的技术天才级人物。
面向过程与面向对象编程的联系
面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法,它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势,因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。
比如拿学生早上起来的事情来说说这种面向过程吧,粗略的可以将过程拟为:
(1)起床
(2)穿衣
(3)洗脸刷牙
(4)去学校
而这 4 步就是一步一步地完成,它的顺序很重要,你只须一个一个地实现就行了。而如果是用面向对象的方法的话,可能能就只抽象出一个学生的类,它包括这四个方法,但是具体的顺序就不能体现出来。
参考资料: