CSDN博客

img cnssk

国王和电烤箱

发表于2004/9/16 16:46:00  807人阅读

分类: Other

 国王和电烤箱

 
有一次,在离这儿不远的一个王国里,国王把他的两个顾问叫来,让他们看一个闪闪发光的
金属盒子。盒子顶上有两个开口,旁边有一个旋钮和一个手柄。

“你们知道这是什么吗?”国王问。

一个顾问——他是一名工程师——抢先回答说:“是电烤箱。”

国王接着问道:“要为它设计一台嵌入式计算机的话,你会怎么设计呢?”

工程师回答说:“使用4位的微处理器。我编一个简单的程序,读取火候调节旋钮的当前位
置,把位置信息量化,变成从雪白到漆黑的16个焦度级别之一。程序以焦度级别为索引,从
一张16行的小数据表中,读取预置的烧烤时间。然后,程序启动加热器,在计时器中设定烧
烤时间,计时结束后,就关闭加热器,弹出面包片。给我一周时间,我就可以拿出这个程序
的原型。”

第二个顾问是一个计算机科学家,他马上意识到工程师的想法是缺乏远见的。他说:“电烤
箱不只是用来烤面包片的,它还可以用来热鸡蛋饼。桌上摆的实际是一台早餐加工机。我们
的国民有丰富的生活经验,他们需要多功能的机器,比如说,一台能烤香肠、煎培根、炒鸡
蛋的早餐加工机。只能烤面包片的电烤箱不久就会过时,如果我们不为将来着想,就必须在
两、三年后重新设计电烤箱了。

“有鉴于此,我们可以这样定义我们的电烤箱。首先,创建一个名为早餐的类。然后,从这
个类派生出一组子类:面食类、肉类、禽蛋类等等。面食类进一步派生出面包类、松糕类、
煎饼类、蛋饼类;肉类派生出香肠类、肉串类、培根类;禽蛋类派生出炒鸡蛋类、水煮蛋类、
荷包蛋类、煎蛋类以及各式各样的蛋卷类。

“对于干酪火腿煎蛋卷类,需要特殊处理,它必须同时继承肉类、乳制品类和禽蛋类的特
性。因此,没有多重继承是没办法解决这个问题的。运行时,程序必须正确地创建对象实例,
然后向对象发送‘加工你自己’的消息。消息会引发何种操作要取决于对象的类型,这样,
同一条消息就可以激活从烤面包片到炒鸡蛋的各种不同操作了。

“综上所述,在分析阶段,我们将核心需求界定为加工不同种类的早餐食品。在设计阶段,
我们还要进一步明确由此衍生的附加需求。比如,我们必须使用一种拥有多重继承功能的面
向对象语言。另外,鸡蛋已经晾凉了,培根还没有烤好的情况是不能接受的,所以,多任务
并发处理的功能也是必需的。

“别忘了用户界面。手柄是不适于加工多种食品的,火候调节旋钮也容易让人摸不着头脑。
用户只会去买那些有友好的图形界面的产品。当早餐加工机插上电以后,用户会在屏幕上看
到一只发令枪。点击发令枪,一声枪响过后,屏幕上就会出现‘启动UNIX v.88.33’的字样
(UNIX v.88.33版将在早餐加工机上市前发布)。用户可以打开下拉菜单,在菜单里点击他
们想要加工的食品名称。

“在前面的设计阶段,我们详细定义了软件的功能特性,接下来的事情就是要为实现阶段选
择一种合适的硬件平台了。推荐的硬件配置是Pentium 4 2.6G CPU,2G内存,160G硬盘,21
寸液晶显示器。在软件方面,如果你选择了一种多任务、支持多重继承、有内置GUI开发包的
面向对象语言,那你编写程序时就轻松多了。——相比之下,那种先确定硬件环境,再把自
己禁锢在4位微处理器上的做法是多么的愚蠢啊!”

国王明智地砍掉了计算机科学家的脑袋。从那以后,国王和他们的国民们一直生活得很快乐

0 0

相关博文

我的热门文章

img
取 消
img