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

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

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

时间: 2024-10-09 16:28:25

黑马程序员_Java面向对象思想的相关文章

黑马程序员_Java面向对象

- - - - - android培训.java培训.期待与您交流! - - - - - - 对象 万物皆对象,任何功能都是通过对象来实现的,就是将功能封装进对象,让对象去调用这些功能. 这样对数据是一种优化,安全性更高,操作起数据来更方便. 特点 将复杂的事情简单化. 面向对象将以前的过程中的执行者,变成了指挥者. 过程和对象在我们的程序中是如何体现的呢?过程其实就是函数:对象是将函数等一些内容进行了封装. 匿名对象(参见匿名类) 当对方法只进行一次调用的时候,可以使用匿名对象. 当对象对成员

黑马程序员_java面向对象(一)

------- android培训.java培训.期待与您交流! ---------- 面向对象是一种相对于面向过程的编程思想,是对事物属性及功能进行描述,抽象提取封装的过程.面向对象是局域面向过程的,之前所学习的将功能提取写进方法里其实就是对过程的提取,而面向对象,是将方法封装进一个对象内,使其具有该功能,当需要使用该功能时直接调用具备该功能的对象,而不用具体指导内部的实现细节. 面向对象相对于面向过程简化了书写,提高了代码的复用性,使功能的实现逻辑变的简单. 面向对象面向过程与面向对象的区别

黑马程序员_java面向对象(二)

------- android培训.java培训.期待与您交流! ---------- 一.面向对象之继承是将多个类的共性提取出来单独进行描述,通过继承的方式来建立类与类之间的关系.子类继承父类中的所有成员.关键字extends.java语言只支持单继承,因为可能会带来安全隐患,造成代码冲突.但是支持多层继承,与多实现.继承:1,提高了代码的复用性2,让类与类之间产生了关系.有了这个关系才有了多态的特性.注意:千万不要为了获取其他类的功能,简化代码而继承.必须是类与类之间有所属关系才可以继承.继

黑马程序员_Java环境搭建及语言基础

- - - - android培训.java培训.期待与您交流!- - - - - - JRE和JDK JRE:Java Runtime Environment,java运行环境. JDK:Java Development Kit,java开发工具包. 使用JDK开发java程序,交给JRE运行. JDK下载和安装 http://www.oracle.com/technetwork/java/javase/downloads/index.html JDK的目录结构 目录/文件名 功能说明   b

黑马程序员_Java异常 Java常用库类

Java异常 1,异常的基本概念 异常是导致程序中断运行的一种指令流,它是在运行时期发生的不正常的情况,在Java中,一切的异常都秉着面向对象的设计思想,所有的异常都是以对象和类的形式存在的. 2,异常类的继承结构 在整个Java的异常结构中,实际上有两个最常用的类,Exception和Error,这两个类分别是Throwable的子类 Exception:一般表示的是程序中出现的问题,可以直接使用try....catch处理 Error:一般之的是JVM的错误,程序中无法处理. 3,Java的

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点

黑马程序员_Java多线程

- - - - - android培训.java培训.期待与您交流! - - - - - - 进程:正在进行中的程序.其实进程就是一个应用程序运行时的内存分配空间.进程负责的是应用程序的空间的标示. 线程:其实就是进程中一个程序执行控制单元,一条执行路径.线程负责的是应用程序的执行顺序. 一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序. 每个线程在栈区中都有自己的执行空间,自己的方法区.自己的变量. jvm在启动的时,首先有一个主线程,负责程序的执行,

【黑马程序员】————面向对象语法1

一.  面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 常用术语 面向过程 Procedure Oriented 面向对象 Object Oriented,简称OO 面向对象编程 Object Oriented Programming,简称OOP 二.  类和对象的关系 面向对象中有2个非常重要的概念:类和对象 OC中的面相对象 1)      OC中的类相当于图纸,用来描述一类事物.也就是说,要想创建对象,必须先有类 2)      OC

黑马程序员_Java抽象类和内部类

- - - - - android培训.java培训.期待与您交流! - - - - - - 类(class) 类是相似对象中共同属性和方法的集合体 在面向对象中定义类,就是在描述事物,就是在定义属性(变量)和行为(方法).属性和行为共同成为类中的成员(成员变量和成员方法). 封装.继承和多态 面向对象方法中软件设计的主体是类,类是相同属性和方法的封装体,因此类具有封装性 子类可以在继承父类所有属性和方法的基础上,再增加自己特有的属性和方法,因此类具有继承性 在一个类层次中,定义为根类的对象可被