[Jollen's AFC] 1. Implicit of Object-oriented
自從完成「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。