物件導向是一種戰略,把程式用更高層次的分散,擊破。

孫子兵法「故用兵之法,十則圍之,五則攻之,倍則分之,敵則能戰之,少則能逃之,不若則能避之。」

起初程式碼就像一篇文章,從頭到尾完整的敘述一件事。接著你可以把重複的地方分成新的文章取個標題,重複引用。

你的文章在講述一件事時,就變的簡略了:抽出重複的程式成為函式。

當有一天你的函式也多到無法記憶跟理解的時候,或許你需要把他們多一層分類,那要以什麼為單位分類?用人類習慣的抽象邏輯去分類。

你用到的資料,可以是一堆資料的集合,它也可以有行為,你可以透過跟你的分類的結果「物件」互動,你可以讓你的物件跟你的物件互動,你就有更高層次的文章,你的文章主幹就可以簡略到一個極致,就像文言文一樣,每句話背後都有複雜完整的解釋,但是你可以從精簡的文章中快速的了解主要意義。

舉一個我目前遇過最複雜的例子:當你要讓使用者可以管理退貨,修改他有各種權限的限制,退貨本身又關聯到其他資料,也有修改上的邏輯價格計算的方法,退貨本身也有狀態需要被控管。

你可能會把它抽象成? 退貨、權限、狀態機、使用者。想像一些物件或許沒有那麼困難,只是要實做出他們互動的關係,定義出他們的職責,這可能是寫出一個好程式的關鍵。

或許可以用測試驅動開發,先定義每個物件的介面,自然的演化出他們的職責。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *