1. 程式人生 > >c語言如何實現面向物件的機制

c語言如何實現面向物件的機制

我們知道嵌入式是在作業系統內部做開發的,作業系統所有的核心幾乎都是c語言。它具有出色的可移植性,能在多種不同體系結構的軟硬體平臺上執行。具有很高的執行效率,而且簡潔緊湊,有靈活的語法機制,並能直接訪問硬體。c語言是面向過程機制,它有很多的缺點,如程式碼的複用性,維護性,擴充套件性都比較差。所以c語言需要模擬面向物件機制來彌補這些缺點。

   面向物件的特徵為

(1)封裝,隱藏內部實現

(2)繼承,複用現有程式碼

(3)多型,改寫物件行為

1.封裝

封裝是一種資訊隱藏技術,它體現於類的說明,是物件的重要特徵。封裝資料和加工該資料的方法(函式)封裝為一個整體,以實現獨立性很強的模組,使得使用者見到物件的外特性(物件能接受哪些訊息,具有那些處理能力),而物件的內特性(儲存內部狀態的私有資料和實現加工能力的演算法)對使用者是隱蔽的。封裝的目的在於把物件的設計者和物件者的使用分開,使用者不必知曉行為實現的細節,只須用設計者提供的訊息來訪問該物件。

在c語言中,可以用結構+函式指標來模擬類的實現,而用這種結構定義的變數就是物件。我們可以在標頭檔案中宣告,在c檔案中真正定義,這樣可以隱藏內部資訊,因為外部不知道物件所佔記憶體的大小,所以不能靜態的建立該類的物件,只能呼叫類提供的建立函式才能建立。這種方法的缺陷是不支援繼承,因為子類中得不到任何關於父類的資訊。

2.繼承

繼承性是子類自動共享父類之間資料和方法的機制。它由類的派生功能體現。一個類直接繼承其它類的全部描述,同時可修改和擴充。繼承具有傳遞性。繼承分為單繼承(一個子類只有一父類)和多重繼承(一個類有多個父類,當前RT-Thread的物件系統不能支援)。類的物件是各自封閉的,如果沒繼承性機制,則類物件中資料、方法就會出現大量重複。繼承不僅支援系統的可重用性,而且還促進系統的可擴充性。


在c語言中,可以利用“結構在記憶體中的佈局與結構的宣告具有一致的順序”這一事實實現繼承。

3.多型

物件根據所接收的訊息而做出動作。同一訊息為不同的物件接受時可產生完全不同的行動,這種現象稱為多型性。利用多型性使用者可傳送一個通用的資訊,而將所有的實現細節都留給接受訊息的物件自行決定,如是,同一訊息即可呼叫不同的方法。例如:抽象裝置具備介面統一的讀寫介面。串列埠是裝置的一種,也應支援裝置的讀寫。但串列埠的讀寫操作是串列埠所特有的,不應和其他裝置
操作完全相同,例如操作串列埠的操作不應應用於sd卡裝置中。多型性的實現受到繼承性的支援,利用類繼承的層次關係,把具有通用功能的協議存放在類層次中儘可能高的地方,而將實現這一功能的不同方法置於較低層次,這樣,在這些低層次上生成的物件就能給通用訊息以不同的響應。在c語言中我們可以用萬能指標void*來實現多型。