第七次实验题目

文章讲述了SpecialZoo小动物园的模拟游戏类设计和一个核心读写功能的程序设计问题。随着需求增加,代码逐渐变得复杂,使用全局变量来控制数据源和输出设备导致了维护困难。文章提出了面向对象方法可能的解决方案。

题目一

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();
}

当然,这次老张部署的新代码收获了更多的抱怨,老张的头越发的疼了起来。

老板第四次找到老张,新的需求是从扫描仪读入扫描的图片,向网络传输,老张抓狂了

思考一下,可不可以从面向对象的思路来帮助老张解决这个问题,有什么更好的方案吗?尝试画图表达自己的思想。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值