码迷,mamicode.com
首页 > 编程语言 > 详细

黑马程序员_Java面向对象思想

时间:2014-07-20 22:22:10      阅读:302      评论:0      收藏:0      [点我收藏+]

标签:style   blog   java   color   使用   strong   

 

面向对象要把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法

1.人在黑板上画圆

  • 对于这个设计,上面有Person, Blackborad , Circle三个对象
  • 动词 : 画
  • 因为画的动作的数据:坐标(x,y),半径(randius) 是Circle拥有的数据,所以 draw()方法应该属于Circle对象,而不是动作的发出者Person。

注意:【动作发出者往往会委托动作承受者 】

2.司机紧急刹车

  • 对于这个设计,上面有Driver, Car两个对象
  • 动词 : 刹车 
  • 因为刹车的动作的数据:作用力power,作用时间time, 是Car拥有的数据,所以 stop()方法应该属于Car对象,而不是动作的发出者Driver。

3.售货员统计收获小票的金额 :售货员统计小票的动作会委托小票来完成。

4.小利把门关上了 :小利关门的动作会委托门本身来完成,所以关门这个动作应定义在Door对象中,而非小利中。 

5.球从一根绳子的一段移动到了另一端

  • 球的移动是需要修改球本身的参数,所以方法由球本身来提供
  • 球参数的获取是通过委托绳子来完成,所以任何两个事物之间的交换最好使用委托模式 。
import java.awt.Point;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
class Line{
    
    private Point startPoint;
    private Point endPoint;
    
    public Line(Point sPoint,Point ePoint){
        startPoint = sPoint;
        endPoint = ePoint;
    }
    public Point getStartPoint() {
        return startPoint;
    }
    public void setStartPoint(Point startPoint) {
        this.startPoint = startPoint;
    }
    public Point getEndPoint() {
        return endPoint;
    }
    public void setEndPoint(Point endPoint) {
        this.endPoint = endPoint;
    }
    
    public Point nextPoint()
    {
        //计算下一个移动点
        Point nextPoint =new Point(startPoint.getLocation());
        if (nextPoint.distance(endPoint) >= 0) {
            return startPoint;
        }else if (nextPoint.distance(startPoint) < 0) {
            return startPoint;
        }else{
            nextPoint.setLocation(startPoint.getX()+1, startPoint.getY()+1);
            return nextPoint;
        }
    }
}
class Ball {
    
    private Point myPoint;
    private Line line;
    
    public Ball()
    {
        line=new Line(new Point(1,1),new Point(5,5));
        myPoint=line.getStartPoint();
        System.out.println("小球的起始坐标为:("+myPoint.getX()+","+myPoint.getY()+")");
        
        /*定时器timer,让小球1s后开始移动,并且每隔1s移动1次*/
        ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
        timer.scheduleAtFixedRate(new Runnable() {
            
            @Override
            public void run() {
                System.out.println("小球现在的坐标为:("+myPoint.getX()+ "," + myPoint.getY()+")");
                move();
            }
        }, 1, 1, TimeUnit.SECONDS);
        
    }
    public void move()
    {
        myPoint=line.nextPoint();
    }
}
public class Test{
    public static void main(String[] args) {
        new Ball();
    }
}

 6.两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子

//石头
class Stone{
    public Stone(){}
}
//木材
class Wood{
    public Wood(){}
}
//树
class Tree{
    public Tree(){}
    //变成木材
    public void toWood(){return new Wood();}
}
//椅子
class Chair{
    pubilc Chair(){}
}
//石刀
class StoneKnife{
    
    //砍树
    public Wood[] cutTree(Tree tree)
    {
        return tree.toWood();
    }
}
//石刀工厂  
class StoneKnifeFactory{  
      
    //制造石刀  
    public StoneKnife makeStoneKnife(Stone[] stones){  
          
        return new StoneKnife();  
    }  
}  
//椅子工厂  
class ChairFactory{  
      
    //制造椅子  
    public Chair makeChair(Wood woods){  
          
        return new Chair();  
    }  
}  
//主函数
class Program
{
     public static void main(String[] args)
     {
         Stones[] stones = {new Stone(),new Stone()};
         StoneKnife sk=StoneKnifeFactory.makeStoneKnife(stones);
         Wood wood=sk.cutTree(new Tree());
         ChairFactory.makeChair(wood);
     }
}

面向对象是一种将各个功能封装进对象的思想,强调了具备功能的对象,主体是对象,将过程简化。在实际开发中,以对象为核心,先明确好对象,再实现具体功能。面向对象是一种思想理论,要远远高于编程语言。不深入理解面向对象理论就无法做到编写比较高级的软件,而且往往这些软件不能有效应对变化,不能复用,不能扩展,不能维护等。使用抽象方法还能应对软件的复杂度,因为抽象是对事物的简化方法。首先在学习面向对象前明白你的目的然后讲方法(这个很重要,如果目的不明,任何事情都做不好,而且肯定方法不对)。

黑马程序员_Java面向对象思想,布布扣,bubuko.com

黑马程序员_Java面向对象思想

标签:style   blog   java   color   使用   strong   

原文地址:http://www.cnblogs.com/iadanac/p/3857248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!