用面向对象的思想设计问题
Posted ChoviWu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用面向对象的思想设计问题相关的知识,希望对你有一定的参考价值。
本例子以一道面试题为例
农场一头小母牛, 每年生头小母牛, 母牛五岁产母牛, 二十年上多少牛?
在设计类以及设计对象的问题上、我们可能会以农场、母牛分别添加一个类,在分析类之后,对于该类的属性以及类的方法,又怎么分的呢?
由题目上所看出的,农场有牛,牛有岁数,岁数一到就又可以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(); } }
以上是关于用面向对象的思想设计问题的主要内容,如果未能解决你的问题,请参考以下文章