由於軟體開發廠商致力於提供更好的物件導向化的工具,包括從物件導向程式語言(OOP,C++、Java、VB.NET…)至使用者端介面的開發工具(圖形元件化,如 Button、Textfield、Form…,乃至模型化的工具(Rational Rose for UML)。似乎,採取了這些工具,軟體開發人員就得以享受到物件導向化軟體開發的美麗新境界,得以脫離傳統軟體開發方式的夢魘。
殊不知,物件導向化的開發設計並不是萬靈丹,並不是採取了物件導向的技術,就能簡化軟體的設計 ; 再則,物件導向設計的思維,也不是由 UML、OOP、Tools 等這些表面所獲得的知識就可以能理解的。
物件導向化的軟體設計是從真實世界上人們面臨問題時,所運用的哲理及技巧來解答問題,將這些智慧及經驗的累積,來反應至軟體的設計思維。所以,並不是因為有了所謂的 “軟體” 才會有 “物件導向” 這樣的技術產生,反之,如何運用前人為了解決生活上的問題所累積的智慧及經驗,甚而創造自己的智慧,並將經驗傳授他人等這些技巧來反應至軟體的設計思維,才是軟體開發人員所需具備的涵養。
例如,介面(Interface)的設計,老早在現實的生活上隨處可見,好比,設計了雙孔插座,使得家電用品不需要知道內部複雜電路的設計,只要依循其規格:雙孔插座、110V 電壓,任何家電用品即可享用其共通的規格,造成了多型(Polymorphism)的效果,進而增加再利用(Reuse)的好處。
但反映到軟體的設計上,大部分的軟體開發人員卻沒有體認到介面設計的好處, “Design Pattern” 一書即提到:
「介面是物件導向系統的基石。想辨識物件,只有靠介面這條路 ; 若不知道介面,便無從得知物件的資訊,也無法叫它作任何事。物件介面並不含任何實做事項 – 物件有權自由決定該如何實做這些操作,因此,兩物件即使介面完全一樣,也可能會有完全不同的實做。」
為何需要這些生活上的哲理來輔助軟體的設計呢?主要的原因也就在於 “變” 這個因素。因為 “變” 造成了軟體系統開發的障礙,提升了複雜度、增加高度維護的成本。如果軟體開發人員一直無法認清這點,一直想以逃避的方式來凍結 “變”,既不合情合理、沒有人性化,也使得軟體系統無法順應善變的需求 ; 反之,若能認清 “變” 的本質,進而擁抱 “變” (Embracing Change),使得軟體系統能生意盎然、生生不息,而提升了軟體系統的高度價值,這反而因為 “變” 而帶來了更巨大的經濟效應。