初學者的困惑:OOP與一般編程的區別


*在寫《程序猿的思維修煉》隨筆中,我們大概猜想到了,OOP的思想更趨於模塊化,更獨立,因此稱為一個個對象,本次隨筆將對OOP和一般編程的區別有更詳細的解釋

 

面向對象編程的含義:

  面向對象編程是創建計算機應用程序的一種相當新的方法,它解決了傳統編程技巧帶來的許多問題。一般的的編程方法稱為函數(或過程)化編程,常常會導致所謂的單一應用程序,即所有的功能都包含在幾個代碼模塊中(常常是一個代碼模塊)。而使用OOP技術,常常要使用許多代碼模塊,每個模塊都提供特定的功能,每個模塊都是孤立的,甚至與其他模塊完全獨立。這種模塊化編程方法提供了非常大的多樣性,大大增加了重用代碼的機會。

  要進一步說明這個問題,假定計算機上的一個高性能應用程序是一輛一流賽車。如果使用傳統的編程技巧,這輛賽車就是一個單元。如果要改進該車,就必須替換整車,把它送回廠商那里,讓汽車專家升級它,或者購買一輛新車。如果使用OOP技術,就只需從廠商處購買新的引擎,自己按照其說明替換它,而不必用鋼鋸切割車體。

  在傳統的應用程序中,執行流常常是簡單的、線性的。把應用程序加載到內存中,從A點開始執行,在B點結束,然后從內存中卸載,在這個過程中可能用到其他各種實體,例如存儲介質上的文件或顯卡的功能,但處理的主體總是位於一個地方。此時的代碼一般與使用各種數學和邏輯方式處理數據相關。處理方法通常比較簡單,使用基本的數據類型,例如整型和布爾值,建立比較復雜的數據表達方式。

  而使用OOP,事情就不是這么直接了。盡管可以獲得相同的效果,但其實現方式是完全不同的。OOP技術以結構、數據的含義以及數據和數據之間的交互操作為基礎。這通常意味着要把更多的精力放在項目的設計階段,但項目的可擴展性比較高。一旦對某種類型的數據的表達方式達成一致,這種表達方式就會應用到應用程序以后的版本中,甚至是全新的應用程序中。這種一致的表達方式可以大大減少開發時間。這就是上述賽車示例的工作原理。這里的一致是"引擎"的代碼是結構化的,這樣就可以很容易地替換成新代碼(即新引擎),而不需要找廠商幫忙。這也表示,引擎創建出來后可以用於其他目的,可以把它安裝到另一輛車上,或者用它驅動潛艇。

  除了數據表達方式的一致性外,OOP編程還常常可以簡化任務,因為較抽象實體的結構和用法也是一致的。例如,不僅把輸出結果發送給設備(如打印機)所使用的數據格式是一致的,而且與該設備交換數據的方法也是一致的,這包括它理解的指令等等。回到賽車的示例上,要達成的一致包括引擎如何連接到油箱上,如何把驅動力傳送給車輪等。

  顧名思義,OOP技術要使用對象。

 

面向對象的四個基本特征:

    ①抽象:抽象就是忽略一個主題中與當前目標無關的那些方面,以便更充分地注意與當前目標有關的方面。抽象並不打算了解全部問題,而只是選擇其中的一部分,暫時不用部分細節。比如,我們要設計一個學生成績管理系統,考察學生這個對象時,我們只關心他的班級、學號、成績等,而不用去關心他的身高、體重這些信息。抽象包括兩個方面,一是過程抽象,二是數據抽象。過程抽象是指任何一個明確定義功能的操作都可被使用者看作單個的實體看待,盡管這個操作實際上可能由一系列更低級的操作來完成。數據抽象定義了數據類型和施加於該類型對象上的操作,並限定了對象的值只能通過使用這些操作修改和觀察。

    ②繼承:繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱為類繼承。新類繼承了原始類的特性,新類稱為原始類的派生類(子類),而原始類稱為新類的基類(父類)。派生類可以從它的基類那里繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要。這也體現了大自然中一般與特殊的關系。繼承性很好的解決了軟件的可重用性問題。比如說,所有的Windows應用程序都有一個窗口,它們可以看作都是從一個窗口類派生出來的。但是有的應用程序用於文字處理,有的應用程序用於繪圖,這是由於派生出了不同的子類,各個子類添加了不同的特性。

    ③封裝:封裝是面向對象的特征之一,是對象和類概念的主要特性。封裝是把過程和數據包圍起來,對數據的訪問只能通過已定義的界面。面向對象計算始於這個基本概念,即現實世界可以被描繪成一系列完全自治、封裝的對象,這些對象通過一個受保護的接口訪問其他對象。一旦定義了一個對象的特性,則有必要決定這些特性的可見性,即哪些特性對外部世界是可見的,哪些特性用於表示內部狀態。在這個階段定義對象的接口。通常,應禁止直接訪問一個對象的實際表示,而應通過操作接口訪問對象,這稱為信息隱藏。事實上,信息隱藏是用戶對封裝性的認識,封裝則為信息隱藏提供支持。封裝保證了模塊具有較好的獨立性,使得程序維護修改較為容易。對應用程序的修改僅限於類的內部,因而可以將應用程序修改帶來的影響減少到最低限度。

    ④多態:多態性是指允許不同類的對象對同一消息作出響應。比如同樣的加法,把兩個時間加在一起和把兩個整數加在一起肯定完全不同。又比如,同樣的選擇編輯-粘貼操作,在字處理程序和繪圖程序中有不同的效果。多態性包括參數化多態性和包含多態性。多態性語言具有靈活、抽象、行為共享、代碼共享的優勢,很好的解決了應用程序函數同名問題。

 

面向對象的優點:

  ①開發時間短,效率高,可靠性高,所開發的程序更強壯。由於面向對象編程的可重用性,可以在應用程序中大量采用成熟的類庫,從而縮短了開發時間。
  ②應用程序更易於維護、更新和升級。繼承和封裝使得應用程序的修改帶來的影響更加局部化。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM