关于算法与OO

题目:"农场一头小母牛,每年生头小母牛,
母牛五岁产母牛,二十年上多少牛?"
要求:分别从算法和OO的角度实现下,看其中区别?

[该贴被purh于2010-05-15 10:15修改过]

写了个OO的,随便讨论下,呵呵


import java.util.Vector;

public class Farm
{
Vector<Cow> cows;

class Cow
{
private int age;

public Cow()
{
age = 0;
}

public Cow(int _age)
{
age = _age;
}

public void passAYear()
{
if(this.age >= 5)
{
Cow cow = new Cow();
cows.add(cow);
}
this.age++;
}
}

public Farm()
{
cows = new Vector();

Cow cow = new Cow(5);

cows.add(cow);
}

public int getNumOfCowsByYear(int year)
{
for(int i = 0; i < year; i++)
{
for(int j=0; j < cows.size(); j++)
{
Cow cow = cows.get(j);
cow.passAYear();
}
}

return cows.size();
}


public static void main(String[] args)
{
Farm farm = new Farm();
int year = 20;
int num = farm.getNumOfCowsByYear(year);

System.out.println("After " + year + " years, there're " + num + " cows in the farm.");
}
}

递归实现思路:f(n)=f(n-1)+f(n-4)
对比来讲OO好像在纯计算方面稍显苍白
[该贴被purh于2010-05-25 16:48修改过]

2010年05月25日 16:38 "purh"的内容
对比来讲OO好像在纯计算方面稍显苍白 ...

OO是一种方法来,粒度比较粗,而算法是一种内聚性很强的方法,如果你在事物内部发行了代表规律的算法,那么就用算法表达;如果你无法发现,就以事物外部特征来形象表述它,这就是象数区别。

算法与OO,是不同层面的东西,没法拿来比较。
算法,是如何通过代码来解决现实问题的办法。它是很广义的东西,并不仅仅是回溯、排序、归并、查找等东西。
OO是一种代码编写风格。

你要比,也只能这样比:就这一具体问题,SP方式下与OOP方式下,哪个能实现较好的算法?

就我的理解写出来的OO。


public interface Algorithm {
long getFn(int n);
}

public class Cow implements Algorithm {
public long getFn(int n) {
if (n > 4) {
return getFn(n - 1) + getFn(n - 4);
} else {
return 1;
}
}

public static void main(String[] args) {
final int i = 20;
final long fn = new Cow().getFn(i);
System.out.println("f(" + i + "): " + fn);
}
}