再谈面向对象

前些日子,在这里写了一篇关于面向对象自己的理解,不知为何已经找不到了。难道是博客园主动删除了吗?不过也没有关系,因为那篇文章讲得面向对象,其实只是面向对象的一个

  前些日子,在这里写了一篇关于面向对象自己的理解,不知为何已经找不到了。难道是博客园主动删除了吗?不过也没有关系,因为那篇文章讲得面向对象,其实只是面向对象的一个特征:“封装性”。实在过于浅显,浅显的漏洞百出。

  现在,又过了几个月,我想再谈一谈关于面向对象的理解,主要是理解面向对象是如何而来的。

  首先,我们需要有一个共同的认知: 编程归根结底,就是对计算机内存数据的增删改查如果你并不认为如此,那么我下面关于面向对象的解释,显然毫无意义。如果你觉得有道理,那么继续看。

  增删改查是需要对“数据”进行操作的。数据又是什么呢?以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咯,但是上帝并不是学化学的,它很烦对一个个元素进行操作,于是它就把这些原子进行整合,形成分子,分子依旧不具具体,就有了物质,然后就有细胞,然后就有了各种肉眼可见的东西。这是这个世界的面向对象思想的演化过程。人类固然是世界的一员,他看待这个世界想法和上帝差不多,于是他就以这种思路,不断的对计算机进行改进,于是乎就有了“面向对象”。

  好了,这就是我对面向对象的理解。