开博了,来一篇偿个鲜,嘿嘿……
从面向过程的编程(C语言)到“真正”面向对象的编程已经有半年了,用Java也编了不少代码,但对面向对象的概念理解还不是很深,于是把《Java编程思想》再看一遍,以达到更深的理解。
面向对象是把我们待解决的问题抽象成一个个对象从而进行操作,这里就出现一个问题,就是怎么抽象?从最简单的思考出发,那就是将具体的东西和行动抽象成对象。比如,具体的桌子、板凳,行为如取款,读取数据等,都可以抽象成一个类。如果考虑到继承等高级特性,那么类的设计就可能需要重新设计,但是都离不开“事务和任务”这个本质。面向过程的编程是以“解决问题”为出发点,如一个单位最低层的员工,做的就是具体的事务,打扫清洁的就是琢磨怎么从一楼扫到十楼,怎么样从东扫到西,考虑的是“过程”,而领导就不同了,领导是面向对象的,它知道张三是打扫卫生的,李四是文秘的,王二是跑业务的,在他眼里,这些人就是一个个类,他们有那些特性,能干什么?当需要打扫卫生的时候,他想到了张三(就好像面向对象编程想到某个类一样),把张三叫过来,说你去把我的办公室打扫一下(相当于类的发送消息,即引用),对领导而言,张三怎么打扫的,用什么工具等他不知道,但是他完成了任务了。这里唯一不同的是张三是唯一的,而不是生成的,其实这个好理解,如果这个单位有好几个这样的工作人员,那么领导想到那个人员也就相当于new一个类对象了。当然对于张三来说,那些清洁工具和打扫任务也可以看成是一个个类,如扫帚、拖把和清洁剂等,真是“万物皆对象”。
组合的概念。组合被称为has-a(拥有关系),如汽车(Car)拥有引擎(Engine),那么在Car类里面使用Engine对象(即Car的成员对象,成员对象就是说这个对象是另外一个类的成员,还有成员特性、成员函数),通常都将Engine的对象设为private,使得新类的客户端程序员不能访问它。如下:
Class Car{
……
priavte Engine engine; //这个对象是Car类所需的,但是使用Car的类不需要的
所以将其设为private
……
}