再谈面向对象
2015-08-09 10:25
211 查看
前些日子,在这里写了一篇关于面向对象自己的理解,不知为何已经找不到了。难道是博客园主动删除了吗?不过也没有关系,因为那篇文章讲得面向对象,其实只是面向对象的一个特征:“封装性”。实在过于浅显,浅显的漏洞百出。
现在,又过了几个月,我想再谈一谈关于面向对象的理解,主要是理解面向对象是如何而来的。
首先,我们需要有一个共同的认知: 编程归根结底,就是对计算机内存数据的增删改查。如果你并不认为如此,那么我下面关于面向对象的解释,显然毫无意义。如果你觉得有道理,那么继续看。
增删改查是需要对“数据”进行操作的。数据又是什么呢?以C语言这个面向过程的编程语言而言,它的数据无非就是:布尔型,字符型,整型,浮点型,这几个基本类型的数据,那么对数据的增删改查,就是对这几个基本类型数据进行操作。对于一些简单的数学计算,这个还是很方便的,然而要去表达更复杂的东西的时候,这几个基本类型的数据,就要进行很复杂的操作了,比如我在数据库中删除一个学生,那么这个人有名字(字符型),学号(整型),有性别(布尔型),有成绩(浮点型),那么以基本数据类型操作的话,就需要一个个删除了。这时候我们就想,如果可以对学生这个东东,整体删除,那该多好啊!这时候面向对象里的一个概念就被提出了,叫做“类类型”。
同基本数据类型一致的是,“类类型”同样规定了两个问题:1.定义什么样的数据。 2. 可以进行什么样的操作。其实就是对基本数据类型的再包装。
上述代码,省略了其余的内容的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咯,但是上帝并不是学化学的,它很烦对一个个元素进行操作,于是它就把这些原子进行整合,形成分子,分子依旧不具具体,就有了物质,然后就有细胞,然后就有了各种肉眼可见的东西。这是这个世界的面向对象思想的演化过程。人类固然是世界的一员,他看待这个世界想法和上帝差不多,于是他就以这种思路,不断的对计算机进行改进,于是乎就有了“面向对象”。
好了,这就是我对面向对象的理解。
现在,又过了几个月,我想再谈一谈关于面向对象的理解,主要是理解面向对象是如何而来的。
首先,我们需要有一个共同的认知: 编程归根结底,就是对计算机内存数据的增删改查。如果你并不认为如此,那么我下面关于面向对象的解释,显然毫无意义。如果你觉得有道理,那么继续看。
增删改查是需要对“数据”进行操作的。数据又是什么呢?以C语言这个面向过程的编程语言而言,它的数据无非就是:布尔型,字符型,整型,浮点型,这几个基本类型的数据,那么对数据的增删改查,就是对这几个基本类型数据进行操作。对于一些简单的数学计算,这个还是很方便的,然而要去表达更复杂的东西的时候,这几个基本类型的数据,就要进行很复杂的操作了,比如我在数据库中删除一个学生,那么这个人有名字(字符型),学号(整型),有性别(布尔型),有成绩(浮点型),那么以基本数据类型操作的话,就需要一个个删除了。这时候我们就想,如果可以对学生这个东东,整体删除,那该多好啊!这时候面向对象里的一个概念就被提出了,叫做“类类型”。
同基本数据类型一致的是,“类类型”同样规定了两个问题:1.定义什么样的数据。 2. 可以进行什么样的操作。其实就是对基本数据类型的再包装。
public class Student { String name; float score; int ID; boolean sex; void setName(String name){ this.name = name; }; String getName() { return name; } }
上述代码,省略了其余的内容的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咯,但是上帝并不是学化学的,它很烦对一个个元素进行操作,于是它就把这些原子进行整合,形成分子,分子依旧不具具体,就有了物质,然后就有细胞,然后就有了各种肉眼可见的东西。这是这个世界的面向对象思想的演化过程。人类固然是世界的一员,他看待这个世界想法和上帝差不多,于是他就以这种思路,不断的对计算机进行改进,于是乎就有了“面向对象”。
好了,这就是我对面向对象的理解。
相关文章推荐
- iOS基础-UIKit框架-触摸事件-响应者链条
- 将linux用在开发环境中
- 面向对象三大特性以及对类和对象的理解
- C++设计模式——简单工厂模式
- 在网络营销在于用户信赖
- hander消息机制原理
- 按下按钮圆圈可以改变颜色
- hdu 5365 /BC 50B Run
- bzoj-3203 保护出题人
- 更多RANK37
- JAVA环境变量配置
- china-pub
- http——访问图片资源
- Java中wait,notify方法
- 【日常学习】【背包DP(完全背包)】洛谷1616 疯狂的采药题解
- linux自定义脚本添加到rc.local脚本无法正常运行的问题
- china-pub
- 生活记录(1)
- 内存泄露
- POJ 3050 Hopscotch (穷竭搜索)