Linux 核心是 implicit of object-oriented 的典型实例。例如,在开发驱动程序的过程中,虽然不需要特别了解驱动程序的面向对象架构,但其架构则是依循严谨的面向对象观念。Linux 核心与驱动程序,都是以 C 语言实作。
另外一个例子,就是笔者在 Android Framework & HAL 课程中所提到的 HAL Stub 观念。HAL Stub 可采用 C 语言实作,编译后以 *.so 形式布署,但它不是链接库(Library),而是一个对象(Object)。
HAL 的模块称为 Stub,Stub 是一种对象。Stub 在软件工程领域代表「桩」的角色,也就是整体架构中的一小段基础程序代码,这段程序代码有着以下二个特色:
1. 符合架构的程序代码(打地基)
2. 一段程序代码模板,最终的实作 (final implementation) 是代理人 (proxy) 的角色
但是,Android 将上述的面向对象封装得非常好,不需要懂这些架构面的观念,也能依循「步骤」实作出基本的 HAL Stub。
在软件里加上自已的实作,最重要的第一门课就是练习写「桩」,也是打地基的程序代码。所以,我们要知道 Android 的整体架构,并依循其架构,设计并实作自已的 HAL Stub。由此可知,从事 Android 软件整合开发,重要的背景知识是面向对象、软件工程与 HAL 架构,而不是硬件的知识。另外,还有很重要的背景知识,就是如何以 C 语言实作面向对象设计。
步骤性的知识可以解决部份的工程(实作)问题,但因为缺乏系统性的观念,将会影响解决整体性问题的能力。这就是「隐性面向对象」的概念,大部份我们接触过的软件,都是严谨的面向对象设计,只是因为它被封装得很好,所以常常会忽略它,或是认为它不存在。
有一种误解,可以说明这个现象。有些工程师,会误以为使用 C 语法实作的软件,并不是面向对象的架构,实则不然。Linux 核心便是一个很好的例子。Axel-Tobias Schreiner 在 1993 年发表了著作「Object-oriented programming with ANSI-C」,解释了如何使用标准 C 语言 (ANSI C) 撰写面向对象程序代码;国外有些大学,甚致将这个科目列为必修课。
因此,C 语言是隐性的面向对象程序代码,因为它不像 C++ 或 Java,有着明显的面向对象语法特征。这点对于研究工作其实是个麻烦,因为 C 语言没有鲜明的面向对象语法,所以经常需要花费时间,来探索隐藏其中的面向对象设计。(文章来源:Jollen’s Blog、作者:Jollen Chen)
(本文经
仕橙部落同意转载到CTimes科技网)