My friends, my life, my style - James S.F. Hsieh

8/31/2009

[OOAD] 一個複雜系統中的五種屬性 Part3

Separation concerns - Decoupling
一個系統不管在相同或不同層次下, 都存在可分割拆解的部分, 這些分解於不同部分的單元之間有著較低至沒有的耦合性, 分在相同部分內的單元則有著較強的耦合性. 舉個例子: 一輛汽車有許多的功能粗略的分割, 我們可以得到車輛的骨架鋼板, 傳動, 電力, 空調, 音響, 安全等較相互獨立的子系統, 子系統間有著較弱的耦合. 譬如汽車的傳動系統利用電力系統來發動內燃機, 而電力系統利用傳動產生的動能來發電, 彼此之間有著交互關係, 但相依性遠低於子系統內各單元間的關係, 譬如說傳動系統中有變速箱, 離合器, 內燃機等, 這多個單元之間的耦合性就遠比跟其他子系統之單元來的強烈.
這種特質是複雜系統中都可以觀察到的性質, 而這個性質有利於簡化系統的複雜度. 為什麼要簡化複雜度呢, 主要的原因在於人們無法同時處理太過於複雜的事物, 我們必須要有些前提, 假設或是模型來降低系統的複雜度並且把焦點放在當下要解決的問題之上, 讓彼此耦合較弱的單元分離可以有助於我們分析與創建一個系統.

為什麼這些前提, 假設或是模型可以幫助我們發展一個系統呢? 以認知心理學的角度來看, 人們同一時間下能處理的資訊量跟短期記憶是有限的, 在同個時間下一個人大概只能記住5~9 個 chunk, 基於這個原因, 我們必須簡化或抽象畫我們的問題並且忽略細節才有辦法思考,  正所謂 "分而治" OOP 中的封裝與多型就是建立在這種思維之上.