java面向对象思想如何理解
生活随笔
收集整理的這篇文章主要介紹了
java面向对象思想如何理解
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Java 的核心是面向對象編程 . 所有的 java 程序都是面向對象的。
以前總聽老師說 c 語言是面向過程的, c++ 和 java 是面向對象的,這些糊涂老師卻從來不說明何為面向過程,何為面向對象,搞得我一直對此稀里糊涂。 最近看了不少的資料,在這里總結一下對此的心得體會。
所有的計算機程序都由兩類元素組成:代碼和數據。換句話說,程序還可以以它的代碼或是數據為核心進行組織編寫。也就是說,一些程序圍繞 “ 正在發生什么 ” 編寫,而另一些程序則圍繞 “ 誰將被影響 ” 編寫。第一種方法被稱為面向過程 的模型( process-oriented model ),用它編寫的程序都具有線性執行的特點。面向過程的模型可認為是代碼作用于數據,像 C 這樣的過程式語言采用這個模型是相當成功的。第二種方式,也就是面向對象 的編程( object-oriented programming )。面向對象的編程圍繞它的數據(即對象)和為這個數據嚴格定義的接口來組織程序。面向對象的程序實際上是用數據控制對代碼的訪問。
這樣說來很籠統,也很簡單,下面具體說一下面向對象的編程思想。
面向對象編程的一個實質性的要素是抽象。那么何為抽象? 抽象與具體相對應。 人們不會把一臺電腦想象成由幾萬個互相獨立的部分所組成的一套裝置,而是把電腦想成一個具有自己獨特行為的對象。這種抽象使人們可以很容易地用電腦上網打游戲,而不會因組成電腦各部分零件過于復雜而不知所措。他們可以忽略內存、硬盤、 CPU 的工作細節,將電腦作為一個整體來加以利用。在面向對象的計算機世界中,這種細節程度就叫抽象。一個抽象的事物又可以把他細節化,例如一臺汽車有音響系統,而音響系統由一臺收音機、一個 CD 播放器、或許還有一臺磁帶放音機組成。我們可以這樣歸納,在現實生活中,為了減少必須處理的事情,我們是在某一程度的細節中生活的,這中細節程度叫抽象 。這種細節是相對的,沒有絕對的抽象也沒有絕對的具體正如前面所說,抽象與具體是相對應的概念(有點像相對論了 ~~ )所以我們可以通過層級抽象對復雜的汽車(或任何另外復雜的系統)進行管理。(我們現在開始用這段話來承上啟下了)
復雜系統的分層抽象也能被用于計算機程序設計。傳統的面向過程程序的數據經過抽象可用若干個組成對象表示,程序中的過程步驟可看成是在這些對象之間進行消息收集。這樣,每一個對象都有它自己的獨特行為特征。你可以把這些對象當作具體的實體,讓它們對告訴它們做什么事的消息作出反應。這是面向對象編程的本質。
面向對象的概念是 Java 的核心,當然了對程序員來講,重要的是要理解這些概念怎么轉化為程序。我想任何軟件都不可避免地要經歷概念提出、成長、衰老這樣一個生命周期,而面向對象的程序設計,可以使軟件在生命周期的每一個階段都處變不驚,有足夠的應變能力。
所有面向對象的編程語言都提供幫助你實現面向對象模型的機制,這些機制是封裝,繼承及多態性。現在讓我們來看一下它們的概念。
封裝
封裝( Encapsulation )是將代碼及其處理的數據綁定在一起的一種編程機制,該機制保證了程序和數據都不受外部干擾且不被誤用。封裝代碼的好處是每個人都知道怎么訪問它,但卻不必考慮它的內部實現細節,也不必害怕使用不當會帶來負面影響。 Java 封裝的基本單元是類。一個類( class )定義了將被一個對象集共享的結構和行為(數據和代碼)。一個給定類的每個對象都包含這個類定義的行為和結構,好像它們是從同一個類的模子中鑄造出來似的。因為這個原因,對象有時被看作是類的實例。所以,類是一種邏輯結構,而對象是真正存在的物理實體。 當創建一個類時,你要指定組成那個類的代碼和數據。從總體上講,這些元素都被稱為該類的成員( members )。具體地說,類定義的數據稱為成員變量或實例變量。操作數據的代碼稱為成員方法( member methods )或簡稱方法( methods )。 Java 程序員所稱的方法,就是 C/C++ 程序員所稱的函數( function )。在完全用 Java 編寫的程序中,方法定義如何使用成員變量。 既然類的目的是封裝復雜性,在類的內部就應該有隱藏實現復雜性機制。類中的每個方法或變量都可以被標記為私有( private )或公共( public )。類的公共接口代表類的外部用戶需要知道或可以知道的每件事情;私有方法和數據僅能被一個類的成員代碼所訪問,其他任何不是類的成員的代碼都不能訪問私有的方法或變量。既然類的私有成員僅能被程序中的其他部分通過該類的公共方法訪問,那么就能保證不希望發生的事情就一定不會發生。當然,公共接口應該小心仔細設計,不要過多暴露類的內部內容。
繼承
繼承( Inheritance )是一個對象獲得另一個對象的屬性的過程。繼承很重要,因為它支持了按層分類的概念。如前面提到的,大多數知識都可以按層級(即從上到下)分類管理。使用了繼承,一個對象就只需定義使它在所屬類中獨一無二的屬性即可,因為它可以從它的父類那兒繼承所有的通用屬性。所以,可以這樣說,正是繼承機制使一個對象成為一個更具通用類的一個特定實例成為可能。 我們可以舉例來說,動物——哺乳動物——兔子這是一個層級結構。我們說哺乳類動物是動物的子類( subclass ),而動物是哺乳動物的超類( super class )。 由于哺乳動物類是需要更加精確定義的動物,所以它可以從動物類繼承所有的屬性。一個深度繼承的子類繼承了類層級中它的每個祖先的所有屬性。 繼承性與封裝性相互作用。如果一個給定的類封裝了一些屬性,那么它的任何子類將具有同樣的屬性,而且還添加了子類自己特有的屬性。這是面向對象的程序在復雜性上呈線性而非幾何性增長的一個關鍵概念。新的子類繼承它的所有祖先的所有屬性。它不與系統中其余的多數代碼產生無法預料的相互作用。
多態性
多態性是允許一個接口被多個同類動作使用的特性,具體使用哪個動作與應用場合有關,下面我們以一個后進先出型堆棧為例進行說明。假設你有一個程序,需要 3 種不同類型的堆棧。一個堆棧用于整數值,一個用于浮點數值,一個用于字符。盡管堆棧中存儲的數據類型不同,但實現每個棧的算法是一樣的。如果用一種非面向對象的語言,你就要創建 3 個不同的堆棧程序,每個程序一個名字。但是,如果使用 Java ,由于它具有多態性,你就可以創建一個通用的堆棧程序集,它們共享相同的名稱。 多態性的概念經常被說成是 “ 一個接口,多種方法 ” 。這意味著可以為一組相關的動作設計一個通用的接口。多態性允許同一個接口被同一類的多個動作使用,這樣就降低了程序的復雜性。選擇應用于每一種情形的特定的動作 , 是編譯器的任務,程序員無需手工進行選擇。我們只需記住并且使用通用接口即可。
多態性、封裝性與繼承性相互作用
如果用得當,在由多態性、封裝性和繼承性共同組成的編程環境中可以寫出比面向過程模型環境更健壯、擴展性更好的程序。精心設計的類層級結構是重用你花時間和努力改進并測試過的程序的基礎,封裝可以使你在不破壞依賴于類公共接口的代碼基礎上對程序進行升級遷移,多態性則有助于你編寫清楚、易懂、易讀、易修改的程序。 所有的 Java 程序都是面向對象的?;蛘?#xff0c;更精確地說,每個 Java 程序都具有封裝性、繼承性及多態性。你將看到, Java 提供的許多特性是它的內置類庫的一部分,這個庫使封裝性、繼承性及多態性得到更廣泛應用。
Java 的核心是面向對象編程 . 所有的 java 程序都是面向對象的。
以前總聽老師說 c 語言是面向過程的, c++ 和 java 是面向對象的,這些糊涂老師卻從來不說明何為面向過程,何為面向對象,搞得我一直對此稀里糊涂。 最近看了不少的資料,在這里總結一下對此的心得體會。
所有的計算機程序都由兩類元素組成:代碼和數據。換句話說,程序還可以以它的代碼或是數據為核心進行組織編寫。也就是說,一些程序圍繞 “ 正在發生什么 ” 編寫,而另一些程序則圍繞 “ 誰將被影響 ” 編寫。第一種方法被稱為面向過程 的模型( process-oriented model ),用它編寫的程序都具有線性執行的特點。面向過程的模型可認為是代碼作用于數據,像 C 這樣的過程式語言采用這個模型是相當成功的。第二種方式,也就是面向對象 的編程( object-oriented programming )。面向對象的編程圍繞它的數據(即對象)和為這個數據嚴格定義的接口來組織程序。面向對象的程序實際上是用數據控制對代碼的訪問。
這樣說來很籠統,也很簡單,下面具體說一下面向對象的編程思想。
面向對象編程的一個實質性的要素是抽象。那么何為抽象? 抽象與具體相對應。 人們不會把一臺電腦想象成由幾萬個互相獨立的部分所組成的一套裝置,而是把電腦想成一個具有自己獨特行為的對象。這種抽象使人們可以很容易地用電腦上網打游戲,而不會因組成電腦各部分零件過于復雜而不知所措。他們可以忽略內存、硬盤、 CPU 的工作細節,將電腦作為一個整體來加以利用。在面向對象的計算機世界中,這種細節程度就叫抽象。一個抽象的事物又可以把他細節化,例如一臺汽車有音響系統,而音響系統由一臺收音機、一個 CD 播放器、或許還有一臺磁帶放音機組成。我們可以這樣歸納,在現實生活中,為了減少必須處理的事情,我們是在某一程度的細節中生活的,這中細節程度叫抽象 。這種細節是相對的,沒有絕對的抽象也沒有絕對的具體正如前面所說,抽象與具體是相對應的概念(有點像相對論了 ~~ )所以我們可以通過層級抽象對復雜的汽車(或任何另外復雜的系統)進行管理。(我們現在開始用這段話來承上啟下了)
復雜系統的分層抽象也能被用于計算機程序設計。傳統的面向過程程序的數據經過抽象可用若干個組成對象表示,程序中的過程步驟可看成是在這些對象之間進行消息收集。這樣,每一個對象都有它自己的獨特行為特征。你可以把這些對象當作具體的實體,讓它們對告訴它們做什么事的消息作出反應。這是面向對象編程的本質。
面向對象的概念是 Java 的核心,當然了對程序員來講,重要的是要理解這些概念怎么轉化為程序。我想任何軟件都不可避免地要經歷概念提出、成長、衰老這樣一個生命周期,而面向對象的程序設計,可以使軟件在生命周期的每一個階段都處變不驚,有足夠的應變能力。
所有面向對象的編程語言都提供幫助你實現面向對象模型的機制,這些機制是封裝,繼承及多態性。現在讓我們來看一下它們的概念。
封裝
封裝( Encapsulation )是將代碼及其處理的數據綁定在一起的一種編程機制,該機制保證了程序和數據都不受外部干擾且不被誤用。封裝代碼的好處是每個人都知道怎么訪問它,但卻不必考慮它的內部實現細節,也不必害怕使用不當會帶來負面影響。 Java 封裝的基本單元是類。一個類( class )定義了將被一個對象集共享的結構和行為(數據和代碼)。一個給定類的每個對象都包含這個類定義的行為和結構,好像它們是從同一個類的模子中鑄造出來似的。因為這個原因,對象有時被看作是類的實例。所以,類是一種邏輯結構,而對象是真正存在的物理實體。 當創建一個類時,你要指定組成那個類的代碼和數據。從總體上講,這些元素都被稱為該類的成員( members )。具體地說,類定義的數據稱為成員變量或實例變量。操作數據的代碼稱為成員方法( member methods )或簡稱方法( methods )。 Java 程序員所稱的方法,就是 C/C++ 程序員所稱的函數( function )。在完全用 Java 編寫的程序中,方法定義如何使用成員變量。 既然類的目的是封裝復雜性,在類的內部就應該有隱藏實現復雜性機制。類中的每個方法或變量都可以被標記為私有( private )或公共( public )。類的公共接口代表類的外部用戶需要知道或可以知道的每件事情;私有方法和數據僅能被一個類的成員代碼所訪問,其他任何不是類的成員的代碼都不能訪問私有的方法或變量。既然類的私有成員僅能被程序中的其他部分通過該類的公共方法訪問,那么就能保證不希望發生的事情就一定不會發生。當然,公共接口應該小心仔細設計,不要過多暴露類的內部內容。
繼承
繼承( Inheritance )是一個對象獲得另一個對象的屬性的過程。繼承很重要,因為它支持了按層分類的概念。如前面提到的,大多數知識都可以按層級(即從上到下)分類管理。使用了繼承,一個對象就只需定義使它在所屬類中獨一無二的屬性即可,因為它可以從它的父類那兒繼承所有的通用屬性。所以,可以這樣說,正是繼承機制使一個對象成為一個更具通用類的一個特定實例成為可能。 我們可以舉例來說,動物——哺乳動物——兔子這是一個層級結構。我們說哺乳類動物是動物的子類( subclass ),而動物是哺乳動物的超類( super class )。 由于哺乳動物類是需要更加精確定義的動物,所以它可以從動物類繼承所有的屬性。一個深度繼承的子類繼承了類層級中它的每個祖先的所有屬性。 繼承性與封裝性相互作用。如果一個給定的類封裝了一些屬性,那么它的任何子類將具有同樣的屬性,而且還添加了子類自己特有的屬性。這是面向對象的程序在復雜性上呈線性而非幾何性增長的一個關鍵概念。新的子類繼承它的所有祖先的所有屬性。它不與系統中其余的多數代碼產生無法預料的相互作用。
多態性
多態性是允許一個接口被多個同類動作使用的特性,具體使用哪個動作與應用場合有關,下面我們以一個后進先出型堆棧為例進行說明。假設你有一個程序,需要 3 種不同類型的堆棧。一個堆棧用于整數值,一個用于浮點數值,一個用于字符。盡管堆棧中存儲的數據類型不同,但實現每個棧的算法是一樣的。如果用一種非面向對象的語言,你就要創建 3 個不同的堆棧程序,每個程序一個名字。但是,如果使用 Java ,由于它具有多態性,你就可以創建一個通用的堆棧程序集,它們共享相同的名稱。 多態性的概念經常被說成是 “ 一個接口,多種方法 ” 。這意味著可以為一組相關的動作設計一個通用的接口。多態性允許同一個接口被同一類的多個動作使用,這樣就降低了程序的復雜性。選擇應用于每一種情形的特定的動作 , 是編譯器的任務,程序員無需手工進行選擇。我們只需記住并且使用通用接口即可。
多態性、封裝性與繼承性相互作用
如果用得當,在由多態性、封裝性和繼承性共同組成的編程環境中可以寫出比面向過程模型環境更健壯、擴展性更好的程序。精心設計的類層級結構是重用你花時間和努力改進并測試過的程序的基礎,封裝可以使你在不破壞依賴于類公共接口的代碼基礎上對程序進行升級遷移,多態性則有助于你編寫清楚、易懂、易讀、易修改的程序。 所有的 Java 程序都是面向對象的?;蛘?#xff0c;更精確地說,每個 Java 程序都具有封裝性、繼承性及多態性。你將看到, Java 提供的許多特性是它的內置類庫的一部分,這個庫使封裝性、繼承性及多態性得到更廣泛應用。
總結
以上是生活随笔為你收集整理的java面向对象思想如何理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 张亚勤:从信息化生存到互联网化生存 百度
- 下一篇: JAVA语言的特点