如何解答面向對象設計問題

        對於面向對象設計問題,要設計的對象可能是真實世界的東西,也可能是某個技術任務,不論如何,我們都能以類似的途徑解決。以下解題思路適用於很多問題。

        步驟1:處理不明確的地方

        面向對象設計(OOD)問題往往會故意放些煙幕彈,意在檢驗你是武斷臆測,還是提出問題以釐清問題。畢竟,開發人員要是沒弄清楚自己要開發什麼,就直接挽起袖子開始編碼,只會浪費公司的財力物力,還可能造成更嚴重的後果。

        碰到面向對象設計問題時,你應該先問清楚,誰是使用者、他們將如何使用。對某些問題,你甚至還有問清楚“5W1H”,也就是Who(誰)、What(什麼)、Where(哪裏)、When(何時)、Why(爲什麼)、How(如何)。

        舉個例子,假設面試官讓你描述咖啡機的面向對象設計。這個問題看似簡單明瞭,其實不然。

         這臺咖啡機可能是一款工業型機器,設計用來放在大餐廳裏,每小時要服務幾百位顧客,還要製作10種不同口味的咖啡。又或者,它可能是設計給老年人使用的簡易咖啡機,只有能製作簡單的黑咖啡就行。這些用例將大大影響你的設計。

        步驟2:定義核心對象

        瞭解我們要設計的東西后,接下來就該思考系統的“核心對象”了。比如,假設要爲一家餐館進行面向對象設計。那麼,核心對象可能包括餐桌(Table)顧客(Guest)、宴席(Party)、訂單(Order)、餐點(Meal)、員工(Employee)、服務員(Server)和領班(Host)。

        步驟3:分析對象關係

        定義核心對象之後,接下來要分析這些對象之間的關係。其中,哪些對象是其它對象的數據成員?哪些對象繼承自別的對象?對象之間是多對多的關係,還是一對多的關係?

        比如,在處理餐館問題時,我們可能會想到以下設計。

    • 宴席包括很多顧客。

    • 服務員和領班都繼承自員工。

    • 每一張餐桌對應一個宴席,但每個宴席可能擁有多張餐桌。

    • 每家餐館有一個領班。

       分析對象關係一定要非常小心——我們經常會作出錯誤假設。比如,哪怕是一張餐桌也可能包含多個“宴席”(在熱門餐館裏,“拼桌”很常見)。進行設計時,你應該跟面試官探討一下,瞭解你的設計要做到多通用。

       步驟4:研究對象的動作

       到這一步,你的面向對象設計應該初具雛形了。接下來,該想想對象可執行的關鍵動作,以及對象之間的關聯。你可能發現自己遺漏了某些對象,這時就需要補全並更新設計。

       例如,一個“宴席”對象(由一羣顧客組成)走進了“餐館”,一位“顧客”找“領班”要求一張“餐桌”。“領班”開始檢驗“預訂”,若找到記錄,便將“宴席”對象領到“餐桌”前。否則,“宴席”對象就要排在列表末尾。等到其它“宴席”對象離開後,有“餐桌”空出來,就可以分配給列表中的“宴席”對象。


                                                               ——摘自《程序員面試金典(第5版)》 






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