期待与您交流!
谁拥有数据,谁就对外提供操作这些数据的方法
谁拥有数据,谁就对外提供操作这些数据的方法。这句话简直就照亮了我的面向对象的天空。面向对象在我日常的编程中也在用,但用的时候总是觉得脑袋好像是面糊一般,归根结底就是没有透彻的理解。看了张孝祥老师的交通灯系统解析对我理解面向对象帮助很大。特别是张老师举得那几个典型的例子感觉很经典。
例子一:人在黑板上画圆
那么就有person,blackboard,circle这三个对象
然而这个画得方法(draw(){})是那个对象的呢,我刚开始的思考就是person对象的,这样代码就得这样写
public class Person {
//Person的相关属性
public Circle draw(float x,float y,float r){
//......
return new Circle();
}
},这有有违于javabean的设计,和面向对象的原则,
但是听了讲解忽然就发现把draw(){}给blackboard才是面向对象的
public class Circle {
private float x;
private float y;
private float r;
public Circle draw(){
//...........
return new Circle();
}
public float getX() {
return x;
}
public void setX(float x) {
this.x = x;
}
public float getY() {
return y;
}
public void setY(float y) {
this.y = y;
}
public float getR() {
return r;
}
public void setR(float r) {
this.r = r;
}
}
正是黑板拥有了圆心坐标和圆的半径这些数据,所以黑板就对外提供画圆的方法。
那么同理列车司机刹车这个刹车的方法就得由列车提供,售货员统计收获票据上的金额就得由票据提供统计的方法,这的确与我平常的一贯的认识是不同的
另一个例子就更有意思了:两块石头磨成一把石刀,石刀砍树,砍成木材,木材做成椅子。这里面由stone,stoneKnife,tree,wood,chair对象
那么这里的磨的方法是谁提供的呢?石头吗?如果是就是石头自己把自己变没了,这显然是不可能的,所以这里得有一个工厂,接收石头生产出石刀,StoneKnife stoneKnife = KnifeFactory.creatKnife(Stone firstStone,Stone secondStone){}
当然木材做成椅子也是如此了。而砍得方法就是就是接受树木返回木材。
期待与您交流!