[Jollen's AFC] 1.3 C & Object-oriented

jollen 發表於 April 15, 2012 1:18 PM

最經常使用的物件導向觀念就是繼承(Inherit),使用C語言如何實作繼承?最實用的例子就是 Android HAL。以下圖為例,這是一個標準的 HAL Stub 設計。這個例子試圖在原有的 Android 作業系統裡加入一個「LED Stub」,透過 LED Stub 來控制底層的 LED 硬體。

圖1.3是一個標準的繼承設計,也就是說,在設計 HAL Stub 時,需要重用 hw_module_t 設計。從架構設計的角度來看,我們進行設計重用的工作,以擴充出 LED Stub;錯誤做法是,直接修改原有的 hw_module_t 設計,以達到原本的要求。上述觀念,就為設計重用(Design reuse),這是軟體工程領域相當重要的知識。

figure-1-3.png
圖1.3 HAL Stub設計重用

在開發 Android 系統時,會不斷地 reuse 原有的設計,以擴充出想要的功能。

以標準 C 語言實作圖1.3的方式如下:

1. 以資料結構(Data structure)來描述類別(Class)
2. 以資料結構的第一個欄位(First field),來表示繼承

所以圖1.3的意思是 led_module_t 繼承 hw_module_t,用 C 語言來實作,結果如下:

struct led_module_t {
   struct hw_module_t parent;
};

C語言沒有明顯的物件導向語法,因此以C語言實作物件導向的繼承,又是另一個Implicit of object-oriented的例子。

Jollen's Blog 使用 Github issues 與讀者交流討論。請點擊上方的文章專屬 issue,或 open a new issue

您可透過電子郵件 jollen@jollen.org,或是 Linkedin 與我連絡。更歡迎使用微信,請搜尋 WeChat ID:jollentw