第一 面向对象的理解
一、面向对象的重要经验:谁拥有数据,谁就对外提供这些数据的方法
二、面向对象的理解:
1、人在黑板上画圆:画圆的方法是圆这个对象上的方法,因为画圆需要操作的是圆的半径和圆心,这些都是圆本身具备的属性。而人只是这个方法的调用者而已。
2、司机刹车:刹车这个动作是车这个对象上的方法。人只是给车发出了一个刹车的信号,也就是调用了车的刹车方法。
3、售票员统计售货小票上的总金额:统计金额是票据上的方法因为金额是票据这个对象本身的属性。售货员只是调用了票据对象的getTotalMoney的方法,getTotalMoney方法内部计算出售货票据的总金额
第二 面向对象的具体示例
一、需求:小球从绳子的一端移动到绳子的另一端
二、分析:
1、此实例中对象有小球和绳子两个
2、小球移动:小球自身有个移动的方法
3、绳子:绳子有知道自己下一点方法,因为只有绳子自己知道自己下一点是哪,而且绳子需要把下一点告诉小球,这样小球才能从绳子的一端到另一端。
下面是实例的伪代码,帮助理解:
/*
* 小球从绳子的一端移动到绳子的另一端
*/
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){
/*
* 通过两点一线的数学公式可以计算出下一点,但是这个细节不属于设计阶段考虑的问题
* 如果当前点是终点则返回null,当前点不是线上的点则抛异常
*/
return null;
}
}
class Ball{
private Rope rope;
private Point currentPoint;
public Ball(Rope rope, Point currentPoint) {
this.rope = rope;
this.currentPoint = currentPoint;
}
public void move(){
currentPoint = rope.nextPoint(currentPoint);
System.out.println("小球移动了" + currentPoint);
}
}
class Point{}
分析:
这里有两个是原材料,不作为操作方法的对象,而作为被操作的对象,
即石头和树作为材料进行加工,而操作这两个对象的就是工厂,将其加工成为石刀和椅子
1、这里将石头磨成石刀,石头并不操作的对象,而是工厂
2、石刀是对象,有砍树的方法
3、加工椅子的工厂将树加工成为椅子
伪代码,帮助理解: Stoneknife = KnifeFactoty.createKnife(stone)
Stone
Mateial = Stoneknife(tree)
tree
chair = ChairFactroy.makeChair(Mateial)