*在寫《程式猿的思維修煉》隨筆中,我們大概猜想到了,oop的思想更趨於模組化,更獨立,因此稱為乙個個物件,本次隨筆將對oop和一般程式設計的區別有更詳細的解釋
物件導向程式設計的含義:
物件導向程式設計是建立計算機應用程式的一種相當新的方法,它解決了傳統程式設計技巧帶來的許多問題。一般的的程式設計方法稱為函式(或過程)化程式設計,常常會導致所謂的單一應用程式,即所有的功能都包含在幾個**模組中(常常是乙個**模組)。而使用oop技術,常常要使用許多**模組,每個模組都提供特定的功能,每個模組都是孤立的,甚至與其他模組完全獨立。這種模組化程式設計方法提供了非常大的多樣性,大大增加了重用**的機會。
要進一步說明這個問題,假定計算機上的乙個高效能應用程式是一輛一流賽車。如果使用傳統的程式設計技巧,這輛賽車就是乙個單元。如果要改進該車,就必須替換整車,把它送回廠商那裡,讓汽車專家公升級它,或者購買一輛新車。如果使用oop技術,就只需從廠商處購買新的引擎,自己按照其說明替換它,而不必用鋼鋸切割車體。
在傳統的應用程式中,執行流常常是簡單的、線性的。把應用程式載入到記憶體中,從a點開始執行,在b點結束,然後從記憶體中解除安裝,在這個過程中可能用到其他各種實體,例如儲存介質上的檔案或顯示卡的功能,但處理的主體總是位於乙個地方。此時的**一般與使用各種數學和邏輯方式處理資料相關。處理方法通常比較簡單,使用基本的資料型別,例如整型和布林值,建立比較複雜的資料表達方式。
而使用oop,事情就不是這麼直接了。儘管可以獲得相同的效果,但其實現方式是完全不同的。oop技術以結構、資料的含義以及資料和資料之間的互動操作為基礎。這通常意味著要把更多的精力放在專案的設計階段,但專案的可擴充套件性比較高。一旦對某種型別的資料的表達方式達成一致,這種表達方式就會應用到應用程式以後的版本中,甚至是全新的應用程式中。這種一致的表達方式可以大大減少開發時間。這就是上述賽車示例的工作原理。這裡的一致是"引擎"的**是結構化的,這樣就可以很容易地替換成新**(即新引擎),而不需要找廠商幫忙。這也表示,引擎建立出來後可以用於其他目的,可以把它安裝到另一輛車上,或者用它驅動潛艇。
除了資料表達方式的一致性外,oop程式設計還常常可以簡化任務,因為較抽象實體的結構和用法也是一致的。例如,不僅把輸出結果傳送給裝置(如印表機)所使用的資料格式是一致的,而且與該裝置交換資料的方法也是一致的,這包括它理解的指令等等。回到賽車的示例上,要達成的一致包括引擎如何連線到油箱上,如何把驅動力傳送給車輪等。
顧名思義,oop技術要使用物件。
物件導向的四個基本特徵:
①抽象:抽象就是忽略乙個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。比如,我們要設計乙個學生成績管理系統,考察學生這個物件時,我們只關心他的班級、學號、成績等,而不用去關心他的身高、體重這些資訊。抽象包括兩個方面,一是過程抽象,二是資料抽象。過程抽象是指任何乙個明確定義功能的操作都可被使用者看作單個的實體看待,儘管這個操作實際上可能由一系列更低階的操作來完成。資料抽象定義了資料型別和施加於該型別物件上的操作,並限定了物件的值只能通過使用這些操作修改和觀察。
②繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。物件的乙個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那裡繼承方法和例項變數,並且類可以修改或增加新的方法使之更適合特殊的需要。這也體現了大自然中一般與特殊的關係。繼承性很好的解決了軟體的可重用性問題。比如說,所有的windows應用程式都有乙個視窗,它們可以看作都是從乙個視窗類派生出來的。但是有的應用程式用於文書處理,有的應用程式用於繪圖,這是由於派生出了不同的子類,各個子類新增了不同的特性。
③封裝:封裝是物件導向的特徵之一,是物件和類概念的主要特性。封裝是把過程和資料報圍起來,對資料的訪問只能通過已定義的介面。物件導向計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的物件,這些物件通過乙個受保護的介面訪問其他物件。一旦定義了乙個物件的特性,則有必要決定這些特性的可見性,即哪些特性對外部世界是可見的,哪些特性用於表示內部狀態。在這個階段定義物件的介面。通常,應禁止直接訪問乙個物件的實際表示,而應通過操作介面訪問物件,這稱為資訊隱藏。事實上,資訊隱藏是使用者對封裝性的認識,封裝則為資訊隱藏提供支援。封裝保證了模組具有較好的獨立性,使得程式維護修改較為容易。對應用程式的修改僅限於類的內部,因而可以將應用程式修改帶來的影響減少到最低限度。
④多型:多型性是指允許不同類的物件對同一訊息作出響應。比如同樣的加法,把兩個時間加在一起和把兩個整數加在一起肯定完全不同。又比如,同樣的選擇編輯-貼上操作,在字處理程式和繪圖程式中有不同的效果。多型性包括引數化多型性和包含多型性。多型性語言具有靈活、抽象、行為共享、**共享的優勢,很好的解決了應用程式函式同名問題。
物件導向的優點:
①開發時間短,效率高,可靠性高,所開發的程式更強壯。由於物件導向程式設計的可重用性,可以在應用程式中大量採用成熟的類庫,從而縮短了開發時間。
②應用程式更易於維護、更新和公升級。繼承和封裝使得應用程式的修改帶來的影響更加區域性化。
程式設計初學者的良言警句
我始終認為,對乙個初學者來說,it界的技術風潮是不可以追趕的,而且也沒有能力去追趕。我時常看 見自己的ddmm們把課本扔了,去賣些 不菲的諸如c vb.net 這樣的大部頭,這讓我感到非常痛心。而許多搞不清指標是咋回事的bbs站友眉飛色舞的討論c 裡面可以不用指標等等則讓我覺得好笑。c 就象當年的a...
初學者的程式設計自學指南
關於這份指南 之前有不少同學問我如何學習程式設計,根據dry法則 don t repeat yourself 還是把自己學習過程中的一些經驗整理成一篇部落格吧。由於本人目前也處在學習的階段,文章中列出來的內容也並未全部學習過,所以文章的客觀性可能存在一些問題,還望讀者自行判斷。需要的所有工具就是一台...
C語言初學者的困惑 dos向windows轉變
2006年04月05日 07 09 賽迪網 很多人學c語言很長一段時間了,還不知c究竟能幹什麼,以為學習c語言沒什麼用,純粹是為了應付學校的考試.更有人說 學c語言?別做如此愚蠢的行為了 趕快學c 吧 這種看法是不對的,不應該把c跟c 之間划起絕對的界限,過分看重c 而把c貶得一無是處,這是很片面的...