1. 程式人生 > >面向物件基本概念及舉例理解

面向物件基本概念及舉例理解

物件抽象

真實世界的物件有成千上萬個屬性,是不是把它們通通搬進計算機世界裡來呢?回答顯然是不行的,分析人員往往把那些只對用計算機管理業務所必須的物件屬性對映到計算機裡,而忽略那些無助於處理業務的無用資訊。這個過程叫作物件抽象。

封裝

封裝是把物件的屬性、操作結合在一起,構成一個獨立的物件。一旦封裝,內部資訊對外界是隱藏的,也就象一個四周密封的房子一樣,不允許直接對物件的屬性進行操作,要想操作,只能通過區域性介面(相當於房子的大門)。外部只能看到物件對操作的反應,而不知道物件是如何做出這一反應的。所以封裝包含兩個方面的含義,一個是資訊隱藏,另一個區域性開放。

訊息

在系統中的物件只有對外提供服務,才能發揮自己的作用,當系統中的其他物件請求這個物件提供服務時,該物件就給予響應,並完成指定的操作。在這個過程中,其他物件要求提供服務這個資訊就叫作訊息。

聚合

如果物件間是一種比較鬆散的關係,整體物件和部分物件可以獨立地建立,並在整體物件中設定一個部分物件的屬性,它可以是部分物件的標識,也可以是指向部分物件的指標。同時,部分物件也可以屬於多個整體物件,其生命週期與整體物件不同,這種物件間的關係叫聚合。

多型

如果在父類定義的屬性和操作被子類繼承以後,表現出不同的屬性和操作,這種現象叫作多型。多型的基本表現是:屬性名或操作名在子類和父類中相同,但語義不同。比如筆可以寫字,但寫什麼樣的字並沒有確定,在執行時,子類鋼筆、毛筆、粉筆都繼承了筆的寫字操作,但功能卻不一樣,鋼筆寫出鋼筆字,毛筆寫出毛筆字,粉筆寫出粉筆字,毛筆子類無法寫出鋼筆字,同理,如果毛筆類再分為大字筆和小字筆兩個子類,它們兩個的功能又不一樣……因此,對於同一個訊息,讓繼承關係中的不同物件去執行,執行的結果也不同。
多型的實現主要靠以下幾個機制:

  1. 過載:即在子類中對繼承來的屬性或操作進行重新定義(俗稱改寫),有很多開發語言支援這一特性。

  2. 動態繫結:即訊息的接收物件根據接收的訊息,動態地確定呼叫自己的那個操作。

  3. 類屬:即服務的引數型別是引數化的,根據這些引數型別,動態地確定呼叫自己的那個操作。

  4. 定義介面類:另一種實現多型的方式是定義一個特殊的抽象類(缺乏完整定義的類)介面類,它只宣告一些操作標記,告訴其他物件如何觸發該行為的細節,如名稱,引數、返回值,再建立介面類多個子類,在每個子類中實現介面類定義的所有操作,從實現相同的介面類這個角度來看,表現出相同的一組介面由不同的子類去實現這樣的多型。

永久物件

指生存週期可以超越程式的執行時間而長期存在的物件,又叫持久物件。永久物件與直接儲存物件的區別在於,封裝過後,進行序列化,把物件的屬性、關聯等資訊直接儲存到控制元件或檔案中。永久物件的優勢是遮蔽了共享記憶體和檔案操作,方便程式設計師使用,此外,它還具有事務功能。

主動物件

主動物件是指不需要接收訊息就可以主動執行操作的物件。主動物件內部包含一個執行緒,可以自動完成動作或改變狀態,而一般的被動物件只能通過被其他物件呼叫才有所作為。在多執行緒程式中,經常把一個執行緒封裝到主動物件裡面。參考文章:http://blog.chinaunix.net/uid-20528042-id-1935065.html