计算机和程序的本质都是要模拟客观世界。客观世界是由众多的对象相互联系和相互作用而形成的一个复杂系统。由于人类认知能力的局限性,人们不可能用一个程序来模拟整个客观世界(那是人类的终极理想),而是根据需要模拟客观世界的某个局部或方面。根据认识的层次,我们也可以把这个局部或方面认为是一个小的客观世界。
各种程序设计语言提供了众多的手段和机制来模拟客观世界的对象及其间的相互联系和作用。根据对这个世界的认识理念的不同,程序设计语言主要分为两大类。
(1)
以C语言为代表的面向过程的程序设计语言:它们利用函数、过程或者子程序(对数据进行部分处理的代码模块)来模拟某个参与协作的客观世界的对象,利用函数、过程或子程序之间的相互调用来模拟对象间的相互联系和相互作用,最后形成整个程序。这类语言书写的程序基本就是由一个或多个函数、过程或子程序构成。用此类程序设计语言开发程序,基本要点就是需要确定整个程序需要哪些函数、过程或子程序以及确定它们之间如何相互调用协作。简而言之,就是函数及函数间的相互作用。
(2)
以Java、C#等为代表的面向对象的程序设计语言:它们利用对象(一种封装了数据和数据处理的代码模块)来模拟客观世界的对象,利用对象间的相互联系和相互作用来模拟客观世界对象间的相互联系和作用。这类语言后面蕴涵的理念更贴近于现实世界,理解起来也更为自然。用此类程序设计语言开发程序,基本要点就是需要确定整个程序需要哪些对象以及确定它们之间如何相互联系和相互作用。简而言之,就是对象及对象间的相互作用。
上述两类语言之间并不是“井水不犯河水”,实际上,面向对象的程序设计语言恰恰是在面向过程的程序设计语言的基础上发展而来的,它体现了人类对这个客观世界更进一步的认识。它们的区别仅仅是认识和模拟客观世界的角度和层次不同而已。落实到具体的代码编写上,后者的对象中包含的数据和数据处理的模块本质上就是前者的函数、过程或子程序,只不过作了相应的封装和使用上的某些限制而已。
为什么讲这些?目的是让程序设计的初学者明白,C语言是学习程序设计非常重要的基础,现在所学的内容在以后学习Java或C#时都能用得上。初学者现在也只需对上面的思想有所了解,不用深究。推荐在积累一定的程序设计经验后再深入领悟这些思想。