[Jollen's AFC] 1. Implicit of Object-oriented

jollen 發表於 April 3, 2012 12:47 PM

自從完成「Jollen 的 Android Framework Complete (框架大全) 課程」後,對於軟體設計領域有了更深一層的認識,並且發現許多軟體設計的美麗之處。接下來的工作,除了過去近十年的系統程式領域,也打算在軟體設計領域繼續提升。系統程式(systems software)的技術工作,除了需要大量的經驗累積外,還需要「手感」;這點相信有經驗的系統程式高手,都有同感,所以必須保持不斷的接觸程式碼。系統程式領域廣大,包含:kernel、device drvier等,這些都是筆者過去相當有興趣的主題;所謂的「手感」就像是寫文章,需要偶而一點靈感才行。

系統程式領域,主題與範圍一般都較為明確,例如:kernel。軟體設計領域,範圍更大,所涉及的知識也更多,例如:網路、使用者。無論是系統程式,或是軟體設計,都會有共同的背景知識,例如:物件導向(Object-oriented, OO)。

初學 kernel 或 device driver 的開發者,或許不會知道 kernel 本身就是物件導向的設計;實務上,如果專注在工程面(Engineering),其實也不太需要深入了解 kernel 與物件導向的關係。所以在 kernel 與 device driver 領域,物件導向是 implicit,隱性的。

在軟體設計方面,例如:Android framework,如果不了解 subsystem 的物件導向設計,以及設計模式(Design pattern),並不太容易看懂其程式碼(Source code),並且幾乎影響了後續工程工作的進行。所以在 Android framework 領域,物件導向是 explicit,顯性的。

這就是過去幾年為企業進行相關教育訓練時,有些主題我會特別強調 Object-oriented 與 design pattern,有些主題僅介紹機制與作法(practice)的原因。這是老師的責任,評斷並決定主題的切入點以及重心。例如,最近在介紹 Android 的 graphics system 時,我就會特別說明 Surface 與 SurfaceHolder.Callback 的 MVC 模式。

Implicit of Object-oriented

所以,並不是作業系統不需要用到物件導向觀念,也不是物件導向觀念是用在大型軟體開發上(有些教科書的說法)。而是,在某些時候,它是相當 implicit 的。原創者(Creator)將物件導向的觀念封裝到非常好,好到使用者(Users/coders)只需要照圖施工,就可以保證成功。最好的例子,就是 Linux kernel。

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

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