[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的例子。

讀者留言 (1)

  • Hroid 於 May 14, 2012 16:05:

    Jollen老师,期待后续的连载。。。

留言功能維護中。將於近日重新開放。

連絡作者

Jollen Chen,Moko365(仕橙3G教室)講師,熱愛研究 Linux 與 Android 技術。曾為 Motorola、HTC、Foxconn、LG、OPPO、騰迅、廣達電腦、緯創、仁寶等超過 50 家企業講授課程。目前在 MokoVersity 擔任軟體工程師,撰寫 Node.js 程式,也在幾家科技廠兼任 Android Framework 研發顧問。您可透過電子郵件 <jollen (at) jollen (dot) org> 或這裡與我連絡。