java语言是一种面向对象的语言,这和面向过程有着本质的区别
面向过程,就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
而面向对象则是把构问题的事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
举例说明:
1、从冰箱拿东西。
同样是从冰箱里面拿东西,面向过程的思想是 打开冰箱门-->把东西拿出来--> 关上冰箱门,该思想始终强调整件事情的步骤;
而面向对象的思想则是:将冰箱作为一个事物,所有的打开、关上、取出都是冰箱本身具备的方法,与人无关,人只是发一个指令,具体执行在冰箱,然后 冰箱.打开-->冰箱.出东西-->冰箱.关闭,始终强调的是对该冰箱的状态。
2、小球在线上滚动。
对象有两个:小球、线。
小球具有的属性:现在的位置。方法:移动。
线具有的属性:起始点、终点。方法:下一个点的位置。
class Rope{
private Point start;
private Point end;
public Rope(Point start, Point end){
this.start = start;
this.end = end;
}
public Point nextPoint(Point currentPoint){
/*.......相关算法........*/
}
}
class Ball{
private Rope rope;
private Point currentPoint;
public Ball(Rope rope, Point start)
this.rope = rope;
this.currentPoint = start;
public void move(){
currentPoint = rope.nextPoint(currentPoint);
System.out.println("小球移动到了"+currentPoint);
}
}
在这里,我们不讨论算法问题,只分析对象,求与线相连,并拿到现在的位置,这是他自己拥有的属性,而移动则是自身的方法,move根据线给出的nextPoint方法来确定移动到那个位置。同样,线拥有开始端是末端两个属性,还有确定下一个点的方法, 但是小球如何移动的与线无关。
面向对象思想开发的代码,其的可读性非常强,因为方法都是围绕着事物的。同时它的解决问题的方式更加接近于生活的自然思考方式,从而提高了代码的效率以及增强了它的易读性。再就是扩展性很强,因为继承、多态、封装的特性,使得该思想写出的代码扩展性跟强。
张孝祥老师的经验得出:谁拥有数据,谁就对外提供操作该数据的方法。这句话能很好的帮助刚学习面向对象思想的人确认对象的属性和方法。