黑马程序员技术交流社区

标题: 面向对象设计问题 [打印本页]

作者: 严海荣    时间: 2012-9-18 20:15
标题: 面向对象设计问题
本帖最后由 严海荣 于 2012-9-19 08:22 编辑

比如说:生产者消费者,一个资源类,一个生产者类,一个消费者类,一个主类,然后考虑各个类的属性和方法,生产者和消费者实现Runnable接口,考虑类与类之间的关系,还有什么时候用构造函数,传递参数,好难想到啊?
面向对象设计时,你们是怎么思考问题的?
作者: 武庆东    时间: 2012-9-18 20:26
学员的两个面向对象的面试题,用面向对象的方式设计如下情景。

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

* 石头-->(通过KnifeFactory)-->石刀

* 树-->(通过StoneKnife的cut方法)-->木材-->(ChairFactory的makeChair方法)-->椅子

StoneKnife = KnifeFactory.createKnife(Stone first,Stone second);//KnifeFactory具有制作石刀的方法(createKnife),两块石头磨成石刀

material = StoneKnife.cut(tree);//石刀具有砍树的方法
Chair chair = ChairFactory.makeChair(material);//ChairFactory具有制作椅子的方法makeChair

“球从一根绳子的一段移动到了另一端”,

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;如果当前点不是线上的店,则抛出异常。

        */
    }

}

class Ball{

private Rope rope;

private Point currentPoint;

public Ball(Rope rope,startPoint){

this.rope=rope;

this.currentPoint=startPoint;

    }

public void move(){

       currentPoint=rope.nextPoint(currentPoint);

       System.out.println("小球移动到"+currentPoint);

    }

}
作者: 史小兵    时间: 2012-9-18 21:04
面向对象的设计其实在你拿到一个问题时,你可以先分析一下问题中到底涉及到几个对象,然后呢就是分析每个对象应该具有什么属性,和方法!
然后就是设计程序了!
就比如人吃苹果这个例子
人吃的苹果是什么时间收获的,苹果会是什么颜色的这些收获时间、和颜色肯定是只有苹果自己知道
每个人都可以吃苹果,因此到底是谁吃了,就应该有名字,和年龄和一些其他的属性!通过分析就可以写了!

public class Person {

        private String name;//人都会有名字的属性
        private int age;//人都会有年龄的属性
        //在创建人的对象时直接为人的上边的属性进行初始化
        //人的一些属性经常不想被人访问因此为其提供了get和set的方法
        Person(String name,int age)
        {
                this.name=name;
                this.age=age;
               
        }

        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getAge() {
                return age;
        }
        public void setAge(int age) {
                this.age = age;
        }
        //比如吃苹果的这个方法,肯定就应该是人所具有的方法
        //然后就是在里头写下你要实现的方法
        public void eat()
        {
               
        }

}



public class Apple {

        private String color;//苹果的颜色也只有自己知道
        private String get_time;//苹果收获时间也只有苹果自己知道
        //创建苹果对象时就对其进行初始化
        //因为事物的自身的一些属性经常不想被人访问因此给出其get和set方法
        public Apple(String color, String get_time) {
                super();
                this.color = color;
                this.get_time = get_time;
        }

        public String getColor() {
                return color;
        }

        public void setColor(String color) {
                this.color = color;
        }

        public String getGet_time() {
                return get_time;
        }

        public void setGet_time(String get_time) {
                this.get_time = get_time;
        }

       

        }







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2