面向對象設計的優點

一旦明白了軟件設計的真諦(參見《軟件設計的真諦》),我們就更能理解面向對象設計的優點。簡單說來,它更便於我們在軟件中構建更真實的虛擬世界。

首先,對象的引入方便了在軟件虛擬世界中模擬現實世界。現實世界是由很多獨立的抽象或具體物體組成的,比如房子、汽車、空調、書等等。爲了構建更真實的虛擬世界,在軟件中需要存在用於表達類似現實物體的編程元素,這正是引入對象概念的意義所在。

以對象爲設計中心,迫使設計者在關注程序所需實現功能的同時不至於忘記通過抽象去塑造概念,以便用對象表達之。由於抽象獲得的對象有助於隱藏複雜度,這在一定程度上簡化了通過對象表達和理解軟件虛擬世界的難度。也由於對象的存在,使得設計更加的生動和具有更強的自我解釋能力。

從軟件設計者的角度:如果希望塑造的對象在現實生活中存在,這有助於他藉助現實引導自己的設計,他也應儘量將虛擬世界中對象的行爲塑造成與現實世界的相近;如果希望塑造的對象在現實生活中並不存在,他只能藉助對象的行爲和狀態去塑造對象(的概念),此時應注意行爲、狀態與概念間關係的合理性,否則所塑造的對象將令人費解。

從軟件維護者的角度:如果對象在現實生活中存在,這有助於他藉助生活經驗快速掌握設計;如果在現實中找不到對象的影子,他仍可以通過對象的行爲掌握對象的概念,這同樣有助於他更方便地維護軟件。

其次,面象對象設計由於強調以對象爲中心,因而具備更強的封裝能力。在大多支持面向對象設計的編程語言中,更強的封裝能力除了意味着更具信息隱藏能力外,還使得封裝的邊界既明顯又更不易被突破,這有助於在軟件的維護過程中維持“形”。某種程度上,面向對象設計強化了軟件行業推崇的模塊化設計。

再次,面向對象設計中的繼承和多態技術除了進一步提高通過軟件模擬現實世界的能力外,還能讓設計更靈活、易變更和方便複用。

顯然,面向對象設計的優勢是通過使得設計方法更抽象而獲得的,這也解釋了爲什麼掌握面向對象設計比掌握面向過程設計更難。現實中,由於有些工程師難以轉變爲從對象、繼承和多態的角度思考設計,使得運用面向對象設計這一方法舉步爲艱。

面向對象設計的關鍵是用對象表達抽象概念,如果抽象出的概念並不清晰,則所獲得的設計一定不會好。千萬不要誤以爲運用面向對象設計所獲得的設計就一定比面向過程的好。好方法獲得好結果的前提仍需要我們運用好。

有了面向對象設計以後並不是說我們就可以拋棄面向過程設計。實際上,即使我們採用了面向對象設計,但在局部範圍內我們還是離不開運用面向過程的設計思想。比如,類的構建需要運用面向對象設計,而類方法的實現卻得用到面向過程設計。


本文出自李雲的博客,請務必保留此出處:http://blog.csdn.net/hzliyun/article/details/7535631。

發佈了63 篇原創文章 · 獲贊 331 · 訪問量 40萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章