前些日子,在这里写了一篇关于面向对象自己的理解,不知为何已经找不到了。难道是博客园主动删除了吗?不过也没有关系,因为那篇文章讲得面向对象,其实只是面向对象的一个特征:“封装性”。实在过于浅显,浅显的漏洞百出。
现在,又过了几个月,我想再谈一谈关于面向对象的理解,主要是理解面向对象是如何而来的。
首先,我们需要有 一个共同的认知: 编程 归根结底,就是对计算机内存数据的 增删改查 。 如果你并不认为如此,那么我下面关于面向对象的解释,显然毫无意义。如果你觉得有道理,那么继续看。
增删改查是需要对“数据”进行操作的。数据又是什么呢?以C语言这个面向过程的编程语言而言,它的数据无非就是:布尔型,字符型,整型,浮点型,这几个基本类型的数据,那么对数据的增删改查,就是对这几个基本类型数据进行操作。对于一些简单的数学计算,这个还是很方便的,然而要去表达更复杂的东西的时候,这几个基本类型的数据,就要进行很复杂的操作了,比如我在数据库中删除一个学生,那么这个人有名字(字符型),学号(整型),有性别(布尔型),有成绩(浮点型),那么以基本数据类型操作的话,就需要一个个删除了。这时候我们就想,如果可以对学生这个东东,整体删除,那该多好啊!这时候面向对象里的一个概念就被提出了,叫做“ 类类型 ”。
同基本数据类型一致的是,“类类型”同样规定了两个问题:1.定义什么样的数据。 2. 可以进行什么样的操作。其实就是对基本数据类型的再包装。
1 public class Student { 2 String name; 3 float score; 4 int ID; 5 boolean sex; 6 void setName(String name){ 7 this.name = name; 8 }; 9 String getName() { 10 return name; 11 } 12 }
上述代码,省略了其余的内容的set 和 get函数。每次new Studnent(),都是定义了含有name,score,ID,sex的一个Student数据,然后可以对这个Student进行set和get。同样完成删除一个同学,那么定义一个数组array(student),就可以在数组中任意添加和删除Student了,完全可以按照基本数据类型进行操作了。
这时候的思想就是面向对象的雏形了。
回到计算机,计算机其实只认识0,1两个基本类型,刚刚我们所谈到的布尔型,字符型,整型,浮点型,不过也是一种对0,1进行包装而已。人们初期为了不直接利用机器码(0,1)操作计算机发明了汇编语言,再由汇编语言慢慢发展到了高级编程语言比如C。这其中的思想就是对数据类型的包装过程,使之越来越符合人类的思维,让“ 计算机迁就人 ”是这一切演化的根源动力。 在我看来,C语言是小部分面向对象的,大部分面向过程的,JAVA大部分面向对象,小部分面向过程。
再谈计算机,你这样一步步的包装,写出来的程序怎么让计算机理解的。凡是一个语言的诞生伴随而生就有一种“ 编译器 ”,“编译器”就是对你所创造语言的向下解释工具。如果你和一个英国人聊天,你不会英文,那么找个翻译,就是等同于你和计算机沟通方式。
看看我们的地球,就是元素周期表上的几百个元素组成的,相当于计算机的0,1咯,但是上帝并不是学化学的,它很烦对一个个元素进行操作,于是它就把这些原子进行整合,形成分子,分子依旧不具具体,就有了物质,然后就有细胞,然后就有了各种肉眼可见的东西。这是这个世界的面向对象思想的演化过程。人类固然是世界的一员,他看待这个世界想法和上帝差不多,于是他就以这种思路,不断的对计算机进行改进,于是乎就有了“面向对象”。
好了,这就是我对面向对象的理解。