國王和電烤箱

 國王和電烤箱

 
有一次,在離這兒不遠的一個王國裏,國王把他的兩個顧問叫來,讓他們看一個閃閃發光的
金屬盒子。盒子頂上有兩個開口,旁邊有一個旋鈕和一個手柄。

“你們知道這是什麼嗎?”國王問。

一個顧問——他是一名工程師——搶先回答說:“是電烤箱。”

國王接着問道:“要爲它設計一臺嵌入式計算機的話,你會怎麼設計呢?”

工程師回答說:“使用4位的微處理器。我編一個簡單的程序,讀取火候調節旋鈕的當前位
置,把位置信息量化,變成從雪白到漆黑的16個焦度級別之一。程序以焦度級別爲索引,從
一張16行的小數據表中,讀取預置的燒烤時間。然後,程序啓動加熱器,在計時器中設定燒
烤時間,計時結束後,就關閉加熱器,彈出麪包片。給我一週時間,我就可以拿出這個程序
的原型。”

第二個顧問是一個計算機科學家,他馬上意識到工程師的想法是缺乏遠見的。他說:“電烤
箱不只是用來烤麪包片的,它還可以用來熱雞蛋餅。桌上擺的實際是一臺早餐加工機。我們
的國民有豐富的生活經驗,他們需要多功能的機器,比如說,一臺能烤香腸、煎培根、炒雞
蛋的早餐加工機。只能烤麪包片的電烤箱不久就會過時,如果我們不爲將來着想,就必須在
兩、三年後重新設計電烤箱了。

“有鑑於此,我們可以這樣定義我們的電烤箱。首先,創建一個名爲早餐的類。然後,從這
個類派生出一組子類:麪食類、肉類、禽蛋類等等。麪食類進一步派生出麪包類、鬆糕類、
煎餅類、蛋餅類;肉類派生出香腸類、肉串類、培根類;禽蛋類派生出炒雞蛋類、水煮蛋類、
荷包蛋類、煎蛋類以及各式各樣的蛋卷類。

“對於乾酪火腿煎蛋卷類,需要特殊處理,它必須同時繼承肉類、乳製品類和禽蛋類的特
性。因此,沒有多重繼承是沒辦法解決這個問題的。運行時,程序必須正確地創建對象實例,
然後向對象發送‘加工你自己’的消息。消息會引發何種操作要取決於對象的類型,這樣,
同一條消息就可以激活從烤麪包片到炒雞蛋的各種不同操作了。

“綜上所述,在分析階段,我們將核心需求界定爲加工不同種類的早餐食品。在設計階段,
我們還要進一步明確由此衍生的附加需求。比如,我們必須使用一種擁有多重繼承功能的面
向對象語言。另外,雞蛋已經晾涼了,培根還沒有烤好的情況是不能接受的,所以,多任務
併發處理的功能也是必需的。

“別忘了用戶界面。手柄是不適於加工多種食品的,火候調節旋鈕也容易讓人摸不着頭腦。
用戶只會去買那些有友好的圖形界面的產品。當早餐加工機插上電以後,用戶會在屏幕上看
到一隻發令槍。點擊發令槍,一聲槍響過後,屏幕上就會出現‘啓動UNIX v.88.33’的字樣
(UNIX v.88.33版將在早餐加工機上市前發佈)。用戶可以打開下拉菜單,在菜單裏點擊他
們想要加工的食品名稱。

“在前面的設計階段,我們詳細定義了軟件的功能特性,接下來的事情就是要爲實現階段選
擇一種合適的硬件平臺了。推薦的硬件配置是Pentium 4 2.6G CPU,2G內存,160G硬盤,21
寸液晶顯示器。在軟件方面,如果你選擇了一種多任務、支持多重繼承、有內置GUI開發包的
面嚮對象語言,那你編寫程序時就輕鬆多了。——相比之下,那種先確定硬件環境,再把自
己禁錮在4位微處理器上的做法是多麼的愚蠢啊!”

國王明智地砍掉了計算機科學家的腦袋。從那以後,國王和他們的國民們一直生活得很快樂

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章