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

8/24/2009

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

Relative Primitives
我個人解釋是, 一個系統該有怎樣相關的元素幾乎取決於系統的觀察者對系統的描述, 軟體是個憑空產生的東西, 人們在思考一個需求並轉換成一個系統時有著高度主觀的見解與考量, 這也造就了軟體設計的複雜度.
舉個例子: "設計出一個可以讓人們涼快的器具", 人們可以設計出扇子, 電風扇, 冷氣機, 而即使是扇子這樣簡單的器具, 都可以有多種不同的設計方式, 而這些東西都源自於相同的需求.
我認為, 設計者對於需求的詮釋是個決定性的因素, 因為一個需求包含了許多潛在性的根本需求, 包含功能面與非功能面, 以上述的例子來說, 扇子跟電風扇有著相近的原理, 都是利用流動的空氣來帶走熱能, 差異之處在於電風扇不需要 "人力", 這個功能可以說是非功能性的考量或是延伸的需求: 利用電力來讓扇葉轉動是比較有效率的, 或是, 我需要一個不需要出 "人力" 就可以達到散熱的工具.
軟體在這方面的複雜度就非常的高, 但是這些潛在需求或是非功能性的需求往往都會被忽略, 原因無他, 因為這些東西對於外在的使用者是看不見, 但是軟體是會藉由版本的更新而演進的, 在演進的過程也有著適者生存與無法從頭的特性 , 而演進的彈性與可能性幾乎取決於最初的觀察者對系統的觀察與需求的分析 (可參考 Architectural Vision) 可惜, 多半的觀察者都會過度簡化該需求或是做出只符合當下需求的設計.