jollen.org

Jollen 的 Blog
Jollen's email: jollen # jollen.org
more:  Jollen's Training

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

Tags:

純手工打造說明:技術專欄文章為 Jollen 原創,內容皆為人工撰寫,無 AI 生成。轉載請註明出處與作者,並全文引用。轉載時請在文章開頭或結尾明顯處註明「本文出處:https://www.jollen.org,已取得原作者同意並授權使用。」
訂閱電子報:不定期 Jollen's Blog 精選文章隨 Moko365 電子報寄送;請透過 Moko365 電子報訂閱(可隨時取消)。

Copyright(c) 2001–2012 www.jollen.org. All rights reserved.
Last update: 2026-07-22