实现简单运算计算器引发的思考

242 阅读3分钟

小Q接到老大任务,要实现一个简单的四则运算计算器,小Q心想这任务简单啊,原来就写过。到了大展身手的时候了,小Q急忙打开了电脑,开战。没过多长时间,小Q就写好了第一版代码,简单测试了一下就交付了。


嘀嘀嘀,过了一会,小Q收到了老大发来的消息。

”小Q啊,你的代码应对正常的情况是可以的,但是如果用户的输入是错的呢,比如他输入了字符串而不是数字,这时候你的代码是不是就要异常中止了呢,这就是计算机软件不满足鲁棒性的后果,重新修改一下代码再交给我,好好考虑一下异常情况哦。“

小Q看完消息很难受,看来还是自己想的太简单了,连异常情况都没有考虑到。不过刚刚老大提到了一个新词汇,”鲁棒性“,这是什么意思呢,小Q赶紧去google了一下。

鲁棒是Robust的音译,也就是健壮和强壮的意思。它也是在异常和危险情况下系统生存的能力。比如说,计算机软件在输入错误、磁盘故障、网络过载或有意攻击情况下,能否不死机、不崩溃,就是该软件的鲁棒性。

原来是这样啊,小Q仔细考虑了一下会出现的异常情况,应该有这么几种。

  1. 用户没有选择制定的运算方式。
  2. 用户输入的操作数不是数字。
  3. 用户输入的除数为0。
理清了异常情况就好办了,小Q马上重新改写了自己的代码,然后认真的针对异常情况测试了一下,没问题之后就交付了。



嘀嘀嘀,又过了一会,小Q收到了老大的消息。

”小Q啊,这版代码是满足了鲁棒性了,可是你有没有考虑过它的可扩展性呢,你把计算方式都的代码都放进了主函数,想一下这个时候如果客户提了个新需求,需要给计算器加上一种计算方式,比如说幂运算,这个时候你的代码的改动是不是非常的大呢,我们一直在说面向对象,仔细考虑下,从面向对象的角度应该怎么解决这个问题呢?“

这下可把小Q给难住了,面向对象,面向对象,老大的意思应该是让我把计算方式给抽离出来,既方便扩展又避免耦合度过高,可是应该怎么抽离呢,小Q的第一想法是,先定义一个抽象类作为计算方式的基类,在定义一个计算的抽象方法,不同的计算方式对应不同的实现类,在实现自己的计算方法就好了。正准备这样去写的时候,突然小Q灵光一闪,想到自己在《effective java》这本书里看到的枚举类的妙用,感觉用枚举解决会更好啊,”我真是个天才“,小Q心里想到,想到这,小Q就开始动手写自己的第3版计算器了。



嘀嘀嘀,收到小Q的代码没多久,老大又发来了消息。

”不错啊小Q,能想到用枚举的方式解决扩展性和耦合度的问题,想必你今天也是收获一些东西的,以后写代码之前一定要考虑清楚了,磨刀不误砍柴工么,加油吧小伙子,你要学的还很多呢。“

看完消息后小Q终于松了一口气,简单的计算器并不简单啊,不过想到今天学习到的新知识小Q心里还是美滋滋的,前路漫漫,加油吧小Q,相信你一定会慢慢变(bian)强(tu)的。



    怕什么真理无穷,进一步有进一步的欢喜,我是洛尘,一个渴望变强的程序猿。