網路城邦
上一篇 回創作列表 下一篇   字體:
物件導向設計的...什麼啊?
2012/12/08 23:37:04瀏覽698|回應0|推薦1

有碰過應用程式設計的人,應該都對物件導向這個名詞不陌生。很久以前,在DOS的時代,程式開發還是C語言的天下,但從C++問世以來,物件導向的設計已經成為大勢所趨了,較新的開發工具與技術,基本上不是物件導向至少也是高度依賴物件基礎的,好像不懂物件導向就不懂程式設計一樣。

記得讀大學的時候,有時候會去圖書館借點書來看。因為唸資管,所以有時候加減借本程式設計的書,每本介紹程式設計的書多半都標榜物件導向,教的東西也都差不多,繼承重用據說很有用,然而,實際上還從沒遇過實務上能應用這些物件導向技術的機會。為了使用物件導向的設計,硬是設計一些物件出來,然後呢,決定物件要繼承一下,把技術應用一下,也好像有點模樣,但那到底有什麼好處?不知道。是較新的技術,應該是好的吧?

其實物件導向,如果單純就程式設計,以把明確的需求化為程式碼這個步驟來看,其實並沒有多少幫助,不明就裡的為了繼承而繼承,把沒搞清楚的需求用物件的方式來建構,並不會帶來什麼好處,只會增加不必要的複雜度,製造品質低落的設計而已。

那,物件導向是無用之物?其實,這個觀念是很有用的,只不過,主要並不是應用在寫程式上頭,而是在需求分析與模組化設計的架構設計上,這個觀念與技巧是很實用的。沒有良好模組化設計的程式,可以加入很多厲害的設計技巧,也可以設法讓執行效能很好,與充分滿足應用面的需求,有親和簡單的使用介面,什麼都行,問題就只在後續的維護工作上頭,沒有模組化設計的程式,對稍具規模的系統開發來說,基本上會是災難。而模組化設計與其說是程式技巧,不如說是需求分析的技巧。當需求解讀不到位,沒抓到真正的精神,可能還是可以在表面上設法滿足使用者的需求,片面的需求,但隨著需求明朗化之後,預測失誤,會讓用了許多心思的設計成果成為糟糕的包袱,丟掉重做很可惜,但結構上不符合需求,要滿足應用面的需要,就只能用扭曲的設計,大量的例外規則去調整以求適用。走到這一步,就是爛攤子了,基本上這種專案的投入多半是浪費資源,因為通常是救不回來的。重點就是在設計出簡單容易管理與調整的模組,像簡單的零件一般可以容易組合應用,也方便抽換與共用。這是物件導向的封裝概念吧。其實重點就是模組化,有彈性的設計,才能應付日趨複雜的大型軟體專案開發工作,不然就只能做出學生等級的小程式,簡單的進銷存與使用者介面之類的,一旦需求升級,應用擴大之後,之前很有用的程式常常變成日後的夢魘。

物件導向的根本其實是找物件。這和程式設計沒多少關係,這其實是一種思考的方式。有哪些對象,或許對岸的翻譯面對對象更適切點吧,在現在要處理的需求與問題上是重要的對象,是需要加以考慮的,能對目標的達成與否產生影響的。可以是人,事,物,純粹是一種抽象的思考活動,但這種找物件的思考,卻一點也不難,因為這是思考的基本模式。盡可能的找出所有可能的對象,確認這些對象與目標之間的關聯,以及這些對象彼此之間的關聯,其實也能說是把整個情勢做全盤的分析,漏掉重要的對象,就是有瑕疵的分析,也常常會帶來預期外的災難。沒有經過整體的分析,以及做好這個找物件,清點相關對象的過程,就無法找到重要的任務,認清關鍵的風險,這樣,自然不會清楚自己到底在做啥,而缺乏重心與方向,只能便宜行事與做做表面工夫,而無法有任何績效。

而物件導向的另外一個概念是封裝物件,這其實也就是模組化的延伸。這並不是技術上的概念,模組化,是簡單靈活的原則概念,而且,是要設計給別人應用與整合的,而不是自己做爽的。高度競爭的領域,管理上的最大挑戰就是要整個大團隊與多領域的各種能力與資源,完成更困難的複雜大任務。心中要有目標與方向,才能落實這個觀念,因為,人很容易傾向於把事情搞複雜,然後當成是自己的個人成就感,而不是弄出一些方便別人理解與修改應用的東西,甚至,還為此而老搞一些自己也不是很懂的東西,欺敵前先自欺,結果就是災難。

物件導向設計的精神,看設計模式是不易入門的,傻蛋唯一能介紹的也還是代碼大全(台灣譯作軟體建構之道),雖然這本書不是介紹物件導向技術的,但傻蛋是讀這本書才覺得自己開始懂得物件導向設計精華的。然後,程式設計只是一回事。重點在於思考的方式。

先客觀的探索各個利害關係與整個盤勢,這不但是策略分析的一個步驟,這也是創意的重要來源。過程中,咦,還有這個,對了,那個也有關係,找到本來沒有想到的意外對象,或許就可以整個推翻常識的無味策略,而找到全然不同的創造價值的機會。這和假創意,政府最喜歡的那種裝一副馬馬虎虎的酷帥青春無腦創意形象是完全不一樣的,這其實只是最基本的思考工作,如果沒有掌握這個基本的思考方式,要脫離顢頇無能的官僚廢物,基本上是很困難的,因為可以說根本就沒有思考能力吧?而另一方面,要自我節制,設計出利於其他人應用的工作成果,這更是一種修養。只有在起點就以簡單且為別人著想作為出發,才能做出模組化的設計,或是對他人有益的工作品質,而缺乏自信的人是不可能簡單的做事情的,總是得把事情弄得盡可能複雜好掩飾自己的弱點與不足,這也是關於勇氣與人格修養上的一種境界吧。所以呢?不一定是寫程式的人才需要這些觀念吧?其實各個領域都需要思考的能力與方法,需要創新的動力,以及需要適合團隊合作與節制的人格修養,才有打破腐敗,開創新局的可能性。而且,這和許多傳統知識,本來也就是相通的,至少和傻蛋國中時自修學到的儒家思考方法是高度一致的,要動動腦筋吧,不然人和禽獸又有何異呢?

另外就是,物件導向是一個技術名詞,也只是一個技術名詞。如果拘泥於名詞,而非對真理有興趣與探求,人也就是工具的載體罷了,變不出什麼新把戲的。會寫程式是一回事,寫得出好品質的程式是另一回事,能完成大型軟體專案的程式設計功力又是另一回事。保持好奇心,對知識的本質保持興趣,而非只是搞些因為什麼原因所以我怎樣偉大的糟糕邏輯來讓自己的靈魂窒息,不覺得,這個社會的理由太多了點,實在是廢話連篇嗎?

( 不分類不分類 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=pondin&aid=7116693