什麼是面向對象的設計思想?也許有不少初學者對這個概念還有許多不明白的地方特別是這個處於新舊思想交替的時代許多人剛剛學完現在看來是快要淘汰的只是面向過程的語言他們的腦子還沒有脫離面向過程思想的束縛抬頭卻發現面向對象早已經流行開來這個陌生的詞漫天飛舞隨便拿起一本流行計算機技術書籍那裡會沒有面向對象的字眼!於是心中便惶惑了什麼叫面向對象?不感興趣者一帶而過;有志於在這方面發展的匆忙找到一本有關書籍來啃究竟什麼是面向對象然而要突破思想的束縛說難也不難說到要深刻認識卻也不容易筆者在做了一些輕量級的工作後頗以為有點心得不怕贻笑大方寫出已供廣大同行批評指正
對象(Object)一詞早在十九世紀就有現象學大師胡塞爾提出並定義對象是世界中的物體在人腦中的映象是人的意識之所以為意識的反映是做為一種概念而存在的先念的東西它還包括了人的意願舉例說明吧當我們認識到一種新的物體它叫樹於是在我們的意識當中就形成了樹的概念這個概念會一直存在於我們的思維當中並不會因為這棵樹被砍掉而消失這個概念就是現實世界當中的物體在我們意識當中的映象我們對它還可以有我們自己的意願雖然我們並不需要付諸實現——只要在你的腦中想著把這棵樹砍掉做成桌子凳子等——我們就把它叫做意向於是對象就是客觀世界中物體在人腦中的映象及人的意向只要這個對象存在我們的思維意識當中我們就可以籍此判斷同類的東西譬如當我們看到另外一棵樹是並不會因為所見的第一棵樹不在了失去了供參照的模板而不認識這棵樹了當我們接觸某些新事物時我們的意識就會為這些事物確立一個對象當然這個過程是怎麼形成的那就不是我們所能討論的問題了上面所說的對象研究的是一般意義上的問題因而它可以外推到一切事物我們經常所說的對象一班指的是解決信息領域內所遇到問題的方法特別是應用軟件技術來決問題的方法如我們經常碰到的面向對象的編程(ObjectOriented Programming)面向對象的分析(ObjectOriented Analysis)面向對象的設計(ObjectOriented Design)等應用前面所介紹的關於對象的概念可以對這些問題做進一步的分析在面對較復雜的系統我們可以將它作為一個對象來進行分析一個系統(解決某個問題的全套解決方案)作為一個對象可以由多個部分組成同樣這個對象也可以由多個對象組成對於同類的事物可以由一個對象來表示這樣做的益處是顯而易見的它靈活而高效可以大大減輕設計人員的工作量簡化實際的模型舉一個例子在關系型數據庫的設計當中我們可以把一個元組當作對象給它定義一組操作方法這些方法將適用於所有元組從而我們不必在更大的范圍內去細致的考慮不同的元組(如判斷一個元素是否合法)因為它們有一組公共的面向本身的方法它們自己可以解決自己的問題更上一層的對象可以是一個表視圖等表對象在元組對象的基礎上又有它們自己的方法如增加刪除等從這個層面上講它也只需要做自己的事情因為有元組對象的支持它無須去考慮像元素是否合法這類的事情甚至有時為了滿足我們還可以將元素或表群當作時對象並定義它們自己的方法這樣更能顯示面向對象的優勢
上面所討論的可以說是面向對象的分析方法在具體的設計過程當中還應該采用適當的方式因為面向對象的思想固然很先進如果做得不好的話同樣不能達到預期的效果這主要表現在處理對象與對象的關系上沒有做好對象與對象的層次不分明如上面所舉得關系型數據庫得例子如果在元組層面上得對象過多得考慮一個表對象得因素或一個表層面上對象過多地考慮一個元組對象的因素甚至去考慮元素層面上的因素這些都不是好的面向對象的設計方法這一點在語言實現方面Java比C++更有優勢因為它不允許多重繼承從而使對象之間的關系更明確誰也不會否認C++的功能更強大但是它也要由次付出巨大代價——當現在代碼庫發展到一定程度一定規模時個對象之間的層次關系將變得異常復雜給後繼使用者得學習理解帶來很大的困難應用上很難把握另外雖然C++具備面向對象的處理能力但它還是保留了很多面向過程的東西用C++完全可以不用面向對象的思想來進行程序設計當然人們不會這樣去做——除了那些只是把C++看成是C擴充的初學者這就為以後的發展埋下了隱患在者一方面Java的限制更多一點就者一點還遠遠不夠搞開發的是人開發方法是由人決定的要應用面向對象的方法開發出優秀的軟件必須要求開發人員具有良好的面向對象的思想好的工程師可以利用適當的工具開發出優秀的軟件——而不在乎他所使用的語言工具——JavaC++Object PascalAda等
From:http://tw.wingwit.com/Article/program/Java/hx/201311/27236.html