UML软件工程组织

淺談物件導向設計樣式

作者:陳國生

 

記得不久之前有位仁兄在點空間的留言板,寫了這麼一段留言,他說︰希望可以介紹一些物件導向理論的書或網站,但不要又是談一些汽車房子為例的。看了這一則留言,除了會心一笑之外,也感慨許多著書或介紹理論的作者,往往不是把一些艱澀的理論讓讀者去生吞活剝,或是不經意的舉一些似是而非的例子,讓讀著摸不著頭緒,但我的話說的輕鬆,要做起來真的很難,這問題到底出在哪裡,是作者表達不好,還是讀者的理解能力有待強化呢?

吳明皓先生有一篇文章叫《物件導向實例 是定理還是方法》,裡面說了一句耐人尋味的話︰「

很多人都會問為什麼我們要採用物件導向程式設計(OOP)的方式來設計系統呢?其實原因無他,就是要減少系統開發的時間以及出錯的機率。然而很遺憾的,在筆者接觸許多國內的案例中,雖然他們都是使用 JavaDelphi、或者是 C++,但是卻鮮少有人真正使用物件導向的思維來設計程式,更甚者,連基本模組化的工作,都做不好的...

」這段話中,點出了一個很重要的觀點,那就是︰鮮少有人真正使用物件導向的思維來設計程式,為什麼我要舉這段話出來呢?聰明的讀者也許已經知道我想要表達什麼了,如果物件導向是武功密笈,作者是在教授武功的,你雖然學了武功,但可能依然無法克敵制勝,因為光是學了架式,是無法領略武學精髓的,這個精髓是什麼,那是一種思維。在吳先生的文中,是還舉了一個西遊記的遊戲,解說傳統模組化思維與物件導向思維的不同,使用比對的方式,對讀者了解思維這個抽象概念是很有幫助。

現在個人想跟大家談的是設計樣式,但拉拉雜雜說了一些跟主題無關的東西,原因就是我想說的是一個檳榔攤的廣告看板設計,如果不講上面那一段,很多朋友會很奇怪,這個賣檳榔跟樣式有什麼關聯,正因為想要表達一種思維,思維簡單說就是一種想法,但是要表達這種抽象的東西,還是得透過實例來說。這個檳榔攤的故事是這樣的,檳榔攤的西施賣檳榔的時候,必須要把檳榔的價格標出來,如 20 100 元,解決這個問題很簡單,用一張紅字條寫上價格,貼上去不就得了?嗯,話是沒錯,但兩天之後,問題來了,因為檳榔的價格波動很厲害,所以西施小姐必須經常更換紅條,那小姐反正閒閒沒事做,也不厭其煩的換,但過了一段時間,問題又來了,市場因為競爭的關係,出現了大小粒分級銷售的方式,小粒 20 100 元,大粒 15 100 元,所以原本換一張紅紙條變成要換兩張紅紙條,那個西施小姐開始有點慌了,每次這樣寫,也不是辦法,所以想了一個方法就是寫了一個 100 XX 粒,這 XX 粒是空白不填的,等到價格一變動,才把幾粒填上去。看到這裡,我想大家應該知道我想說什麼,這位西施小姐運用了一個物件導向設計的思維,就是區分變與不變,又把不變的部分固定起來, 形成一種樣式,成功的克服了檳榔價格變動的廣告問題。

運用樣式我們可以輕易的解決一個特定的問題,這時候你可能會問,這些變動在一開始的時候,並沒有在設計的範圍內,也就是說始料所未及的,沒錯,我們沒有辦法一開始就去預測這個變化,只有等問題明確化之後,我們才能正視如何去因應變化,那如果變化是發生在系統最僵硬的部分,或者說整個系統設計根本就是僵硬的,這時候怎麼辦呢?我的答案是仍然得運用樣式去解決問題。假如當初西施小姐一開始不是用紅紙條來標示價格,而是在壓克力板印上無法塗改的價格,這時候解決的方法可能又不一樣了,克服系統的僵硬性,變成也是必須去面對的一個問題。如果我是那個西施小姐,也許我會把壓克力板上的價格與數量鋸成變成兩半,然後再製作一些不同數量的壓克力板去跟價格做組合,讓數量與價格由一對一關係,變成一對多的對應關係。實際上我這個虛擬的案例,後來也出現在檳榔攤的價格廣告上,讓數量與價格產生了多樣性的組合變化。

如果你問我這個案例,是否可能產生銷售價格多變,而檳榔數量也會多變的情形呢?要是真的如此變化,又要如何去對應呢?這讓我想到一個笑話,說有一隻在店門口招呼客人的鸚鵡,拉左腳會喊︰『哈囉』,拉右腳則會喊︰『你好 』,有一個調皮的小孩子說︰『那如果左右腳一起拉的時候,會喊什麼呢?』那隻鸚鵡一聽,說了一句話︰『你是要把我摔死嗎?』舉這個笑話是要跟大家說明一件事,設計樣式是一個古老而實用 ,解決問題所匯集起來的一些方法,同時也可以改善系統結構性的問題,使系統更有彈性,而易於應付外在的變動,但千萬不要以為它是萬靈丹,什麼事都可以用樣式去解決,否則可能就變成了那隻摔死的鸚鵡了。

總之,為了順應市場需求,變動成了一個必然的趨勢,也是軟體工程中一個難以克服的問題,而一般人不是視而不見,不然就是把變動視為是一個不合理的要求,而加以凍結。這是錯誤的想法,因為把變動凍結了,系統是沒問題了,但使用者的問題仍然沒有得到解決,失去了意義,尤其是在一些 MIS 的部門,經常會犯了這種錯誤,強用管理手段去隱藏技術上一些無法克服的盲點。然而若是耗用大量的資源,過高的成本去克服變動,亦是不智之舉,因此如何學習並運用樣式解決問題才是明智的選擇,最後希望這篇短文,可以引發 你對設計樣式研究的興趣。

 

版权所有:UML软件工程组织