在這一階段,必須拿出一套設計方案,並解釋其中包含的各類對象在外觀上是什麼樣子,以及相互間是如何溝通的。此時可考慮采用一種特殊的圖表工具:“統一建模語言”(UML)。請到http://www.rational.com去下載一份UML規格書。作為第1階段中的描述工具,UML也是很有幫助的。此外,還可用它在第2階段中處理一些圖表(如流程圖)。當然並非一定要使用UML,但它對你會很有幫助,特別是在希望描繪一張詳盡的圖表,讓許多人在一起研究的時候。除UML外,還可選擇對對象以及它們的接口進行文字化描述(就象我在《Thinking in C++》裡說的那樣,但這種方法非常原始,發揮的作用亦較有限。
我曾有一次非常成功的咨詢經歷,那時涉及到一小組人的初始設計。他們以前還沒有構建過OOP(面向對象程序設計)項目,將對象畫在白板上面。我們談到各對象相互間該如何溝通(通信),並刪除了其中的一部分,以及替換了另一部分對象。這個小組(他們知道這個項目的目的是什麼)實際上已經制訂出了設計方案;他們自己“擁有”了設計,而不是讓設計自然而然地顯露出來。我在那裡做的事情就是對設計進行指導,提出一些適當的問題,嘗試作出一些假設,並從小組中得到反饋,以便修改那些假設。這個過程中最美妙的事情就是整個小組並不是通過學習一些抽象的例子來進行面向對象的設計,而是通過實踐一個真正的設計來掌握OOP的竅門,而那個設計正是他們當時手上的工作!
作出了對對象以及它們的接口的說明後,就完成了第2階段的工作。當然,這些工作可能並不完全。有些工作可能要等到進入階段3才能得知。但這已經足夠了。我們真正需要關心的是最終找出所有的對象。能早些發現當然好,但OOP提供了足夠完美的結構,以後再找出它們也不遲。