對象導論之每個對象都提供服務

每個對象都提供服務
  當正在試圖開發或理解一個程序設計時,最好的方法之一就是將對象想像爲“服務提供者”。程序本身將向用戶提供服務,它將通過調用其他對象提供的服務來實現這一目的。你的目標就是去創建(或者最好是在現有代碼庫中尋找)能夠提供理想的服務來解決問題的一系列對象。
  着手從事這件事的一種方式就是問一下自己:“如果我可以將問題從表象中抽取出來,那麼什麼樣的對象可以馬上解決我的問題呢?”例如,假設你正在創建一個薄記系統,那麼可以想像,系統應該具有某些包括了預定義的薄記輸入屏幕的對象,一個執行薄記計算的對象集合,以及一個處理在不同的打印機上打印支票和開發票的對象。也許上述對象中的某些已經存在了,但是對於那些並不存在的對象,它們看起來像什麼樣子?它們能夠提供那些服務?它們需要哪些對象才能履行它們的義務?如果持續這樣做,那麼最終會說“那個對象看起來很簡單,可以坐下來寫代碼了”,或者會說“我肯定那個對象已經存在了”。這是將問題分解爲對象集合的一種合理方式。
  將對象看作是服務提供者還有一個附帶的好處:它有助於提高對象的內聚性。高內聚是軟件設計的基本質量要求之一:這意味着一個軟件構件(例如一個對象,當然他也有可能是指一個方法或一個對象庫)的各個方面“組合”得很好。人們在設計對象時所面臨的一個問題是,將過多的功能都塞在一個對象中。例如,在檢查打印模式的模塊中,你可以這樣設計一個對象,讓它瞭解所有的格式和打印技術。你可能會發現,這些功能對於一個對象來說太多了,你需要的是三個甚至更多個對象,其中,一個對象可以是所有可能的支票排版的目錄,它可以被用來查詢有關如何打印一張支票的信息;另一個對象(或對象集合)可以是一個通用的打印接口,它知道有關所有不同類型的打印機的信息(但是不包含任何有關薄記的內容,它更應該是一個需要購買而不是自己編寫的對象);第三個對象通過調用另外兩個對象的服務來完成打印任務。這樣,每個對象都有一個它所能服務的內聚的集合。在良好的面向對象設計中,每個對象都可以很好地完成一項任務,但是它並不試圖做更多的事。就像在這裏看到的,不僅允許通過購買獲得某些對象(打印機接口對象),而且還可以創建能夠在別處複用的新對象(支票排版目錄對象)。
  將對象作爲服務提供者看待是一件偉大的簡化工具,這不僅在設計過程中非常有用,而且當其他人試圖理解你的代碼或重用某個對象時,如果他們看出了這個對象所能提供的服務的價值,它會使調整對象以適應其設計的過程變得簡單得多。

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