题目一
SpecialZoo小动物园里生活着小狗、小猫和小鸡等小动物,每天饲养员辛勤的喂养着他们,得到食物之后小动物们都会很感激的向饲养员致谢,吃饱了,大家就去玩耍,SpecialZoo开发了一个小游戏来模拟他们心爱的小动物们,于是开发人员给出了下面的类结构:

测试人员给出了一些测试,下面是测试代码和结果,请根据这些资料完成相应的类代码
public static void main(String[] args) {
Animal a1=new Dog();
a1.feed();
a1.thank();
a1.play();
Animal a2=new Cat();
a2.feed();
a2.thank();
a2.play();
Animal a3=new Chick();
a3.feed();
a3.thank();
a3.play();
}
输出结果:
喂肉骨头
汪汪汪
玩儿飞盘
喂小鱼儿
米易嗷呜
捉蝴蝶
喂小虫子
叽叽叽
走来走去翻翻找找
题目二
老张是某公司核心程序员,公司业务蒸蒸日上,多个产品线在同步推进开发,在好几个产品线中都存在一个读取键盘字符向打印机输出的需求,于是某天老板找到老张,将这个重任交给了老张完成。
于是老张写下了以下程序:
char c;
while ((c=readChar())!=EOF)printChar(c);
readChar负责读取键盘输入,printChar负责向打印机输出,精妙的算法仅仅两行就把核心思想表达好了,老张很自信,将代码提交到了项目代码库里。
各个团队非常赞赏老张的设计,该代码得到了充分的使用,帮助许多模块解决了核心问题。
一段时间以后,老板再次找到老张,在赞赏了老张的设计后,与老张商量设计的拓展问题,因为目前又出现了一些从网络读取向打印机打印的需求,老张觉得这个事儿比较麻烦,倒也不是不能解决,于是老张修改了自己的设计:
//设计全局变量flag,0表示从键盘读取,1表示从网络读取
const int flag=0
//核心算法
char c;
while(true){
if(flag==0)c=readChar();
else c=readFromNet();
if(c==EOF)break;
else printChar();
}
代码开始变得难看了,不过修改不多,还能接受,于是老张发布了他的代码,并贴心的提醒其他程序员,原来使用该程序的模块应该增加全局变量flag,并且设置该变量值为0,新使用者依据flag的设置决定读取的数据源,老张当然收到了一堆抱怨,原先写好的代码还得做那么多修改,幸亏老张平时乐于助人,口碑不错,大家最终倒也没多说什么。
当然老张的难处老板并不清楚,毕竟他也不写代码,于是某天老板再次找到老张,用户端出现了一个新的需求,输出不是向打印机而是向绘图仪,在图纸上画出当前输入数据流里面的数据。并再三向老张强调客户是上帝的真理…
老张的头疼了起来
老张硬着头皮修改了他的代码,为了区分他不得不加入了一个新的全局变量,当然,他不敢修改原来的变量名字,毕竟许多项目模块里面已经使用了那些代码,尽管自己看着这些变量名和函数名很别扭。
//设计全局变量flag,0表示从键盘读取,1表示从网络读取
const int flag=0
//设计全局变量flagOutput,0表示向打印机输出,1表示向绘图仪输出
const int flagOut=0
//核心算法
char c;
while(true){
if(flag==0)c=readChar();
else c=readFromNet();
if(c==EOF)break;
else{
if(flagOutput==0)printChar();
else printToPlotter();
}
当然,这次老张部署的新代码收获了更多的抱怨,老张的头越发的疼了起来。
老板第四次找到老张,新的需求是从扫描仪读入扫描的图片,向网络传输,老张抓狂了
思考一下,可不可以从面向对象的思路来帮助老张解决这个问题,有什么更好的方案吗?尝试画图表达自己的思想。
文章讲述了SpecialZoo小动物园的模拟游戏类设计和一个核心读写功能的程序设计问题。随着需求增加,代码逐渐变得复杂,使用全局变量来控制数据源和输出设备导致了维护困难。文章提出了面向对象方法可能的解决方案。

691

被折叠的 条评论
为什么被折叠?



