现在的位置: 首页 > 综合 > 正文

国王和电烤箱

2014年09月05日 ⁄ 综合 ⁄ 共 1348字 ⁄ 字号 评论关闭
  有一次,在离这儿不远的一个王国里,国王把他的两个顾问叫来,让他们看一个闪闪发光的金属盒子。盒子顶上有两个开口,旁边有一个旋钮和一个手柄。
  “你们知道这是什么吗?”国王问。
  一个顾问——他是一名工程师——抢先回答说:“是电烤箱。”
  国王接着问道:“要为它设计一台嵌入式计算机的话,你会怎么设计呢?”
  工程师回答说:“使用4位的微处理器。我编一个简单的程序,读取火候调节旋钮的当前位置,把位置信息量化,变成从雪白到漆黑的16个焦度级别之一。程序以焦度级别为索引,从一张16行的小数据表中,读取预置的烧烤时间。然后,程序启动加热器,在计时器中设定烧烤时间,计时结束后,就关闭加热器,弹出面包片。给我一周时间,我就可以拿出这个程序的原型。”
  第二个顾问是一个计算机科学家,他马上意识到工程师的想法是缺乏远见的。他说:“电烤箱不只是用来烤面包片的,它还可以用来热鸡蛋饼。桌上摆的实际是一台早餐加工机。我们的国民有丰富的生活经验,他们需要多功能的机器,比如说,一台能烤香肠、煎培根、炒鸡蛋的早餐加工机。只能烤面包片的电烤箱不久就会过时,如果我们不为将来着想,就必须在两、三年后重新设计电烤箱了。
  “有鉴于此,我们可以这样定义我们的电烤箱。首先,创建一个名为早餐的类。然后,从这个类派生出一组子类:面食类、肉类、禽蛋类等等。面食类进一步派生出面包类、松糕类、煎饼类、蛋饼类;肉类派生出香肠类、肉串类、培根类;禽蛋类派生出炒鸡蛋类、水煮蛋类、荷包蛋类、煎蛋类以及各式各样的蛋卷类。
  “对于干酪火腿煎蛋卷类,需要特殊处理,它必须同时继承肉类、乳制品类和禽蛋类的特性。因此,没有多重继承是没办法解决这个问题的。运行时,程序必须正确地创建对象实例,然后向对象发送‘加工你自己’的消息。消息会引发何种操作要取决于对象的类型,这样,同一条消息就可以激活从烤面包片到炒鸡蛋的各种不同操作了。
  “综上所述,在分析阶段,我们将核心需求界定为加工不同种类的早餐食品。在设计阶段,我们还要进一步明确由此衍生的附加需求。比如,我们必须使用一种拥有多重继承功能的面向对象语言。另外,鸡蛋已经晾凉了,培根还没有烤好的情况是不能接受的,所以,多任务并发处理的功能也是必需的。
  “别忘了用户界面。手柄是不适于加工多种食品的,火候调节旋钮也容易让人摸不着头脑。用户只会去买那些有友好的图形界面的产品。当早餐加工机插上电以后,用户会在屏幕上看到一只发令枪。点击发令枪,一声枪响过后,屏幕上就会出现‘启动UNIX v.88.33’的字样(UNIX v.88.33版将在早餐加工机上市前发布)。用户可以打开下拉菜单,在菜单里点击他们想要加工的食品名称。
  “在前面的设计阶段,我们详细定义了软件的功能特性,接下来的事情就是要为实现阶段选择一种合适的硬件平台了。推荐的硬件配置是Pentium 4 2.6G CPU,2G内存,160G硬盘,21寸液晶显示器。在软件方面,如果你选择了一种多任务、支持多重继承、有内置GUI开发包的面向对象语言,那你编写程序时就轻松多了。——相比之下,那种先确定硬件环境,再把自己禁锢在4位微处理器上的做法是多么的愚蠢啊!”
  国王明智地砍掉了计算机科学家的脑袋。从那以后,国王和他们的国民们一直生活得很快乐。

抱歉!评论已关闭.