用面向对象的思想设计问题

本例子以一道面试题为例

    农场一头小母牛, 每年生头小母牛, 母牛五岁产母牛, 二十年上多少牛?

 

在设计类以及设计对象的问题上、我们可能会以农场、母牛分别添加一个类,在分析类之后,对于该类的属性以及类的方法,又怎么分的呢?

由题目上所看出的,农场有牛,牛有岁数,岁数一到就又可以new 一头小牛.

然后以此类推,不妨我们可以用递归的方式来进行对牛进行判断循环并添加,题中求返回20年内农场里有多少头牛

因此我们可以对农场Farm的属性Cow以集合的方式定义,并且,农场必须还有添加小牛的方法,每年农场增加的小牛的方法#### 

那么,是如何想到这些个方法呢?

  认真读题! 从题中提取关键字,关键名词,(比如 农场【有很多牛,每年农场都有牛】,母牛【可以生产小牛,五岁以下不可以生产#因此可以年龄是必须定义的】)

相信读到这里应该已经恍然大悟了吧!!!

先贴上我的代码

package com.choviwu.java;

import java.util.ArrayList;
import java.util.List;


/**
 * 农场一头小母牛, 
 * 每年生头小母牛, 
 * 母牛五岁产母牛, 
 * 二十年上多少牛?
 * @author ThinkWu
 * @date 2017年8月7日
 */
public class Farm {

    private List<Cow> cows = new ArrayList<Cow>();

    //add
    public void addCows(Cow cow){
        cows.add(cow);
    }
    
    public void everyYear(){
        
        for (int i = 0; i < 20; i++) {
            //every cow 's index
            for(int j = 0;j<cows.size();j++){
                Cow cow  = cows.get(j);
                int age = cow.getAge();
                if(age>=5)
                    this.addCows(cow.getCow());
            }
            System.out.println((i+1)+"   "+this.cows.size());
        }
        
    }
    
}

 

package com.choviwu.java;

import java.util.ArrayList;
import java.util.List;


/**
 * 农场一头小母牛, 
 * 每年生头小母牛, 
 * 母牛五岁产母牛, 
 * 二十年上多少牛?
 * @author ThinkWu
 * @date 2017年8月7日
 */
public class Farm {

    private List<Cow> cows = new ArrayList<Cow>();

    //add
    public void addCows(Cow cow){
        cows.add(cow);
    }
    
    public void everyYear(){
        
        for (int i = 0; i < 20; i++) {
            //every cow 's index
            for(int j = 0;j<cows.size();j++){
                //得到每只牛的实例
                Cow cow  = cows.get(j);
                //获取每只牛的年龄并且判断是否符合条件
                int age = cow.getAge();
                if(age>=5)
                    this.addCows(cow.getCow());
            }
            System.out.println((i+1)+"   "+this.cows.size());
        }
        
    }
    
}

 

package com.choviwu.java;

/**
 * 
 * @author ThinkWu
 * @date 2017年8月7日
 */
public class TestFarm {
    public static void main(String[] args) {
        Farm f = new Farm();
        f.addCows(new Cow(5));
        f.everyYear();
    }
}

 

posted @ 2017-08-07 17:03  ChoviWu  阅读(483)  评论(0编辑  收藏  举报