面对对象语言的设计哲学通常分为以下两种。
- 第一种思路是基类的作者定下一系列的规则,规定使用该基类的人(派生类的作者)可以干什么事,不能干什么事。
C++,和 Java 就是这一阵营的主要代表。比如说,C++中类定义中的 public, protected, private, virtual 等关键字就是
所谓的规则,规定了类的用户可以使用的成员,必须继承接口,或者实现等等。
这些规则强制类的用户调用或使用基类作者所允许的成员。
这样的好处在于,当错误使用发生的时候,编译器会发出牢骚,进而阻止错误的发生。
然后在保证正确性的前提下,付出的代价呢? 这些规则必然带来一定的开销。就比如在马路上的交警,并不是所有人都需要交警来确保我们不会超速。
- 第二种思路如下:以 Python 和 Perl 为例,利用别处的 base class / package / module 的程序员被认为能够正确地使用基类(不会超速)。
因此,基类的作者也就不许要规定那些成员是 public, private or protected 等。
好处当然是 开发更快,更加有效。但是这有一个前提,基类的作者必须对用户有足够的信任。
Note: 保证正确性的任务从 基类作者,编译器 转移到了用户
对于编程来说,绝大部分使用别人的代码的程序员都会自觉地遵守规矩,即便如果他们想犯错,编译器并不会组织他们。
因此,Python 和 Perl 的面向对象哲学能够导致 类的原作者和类的使用者更快,更短的编码(前提——他们都是理性的人,不想犯错)
当然,在一些错误的代价极高的领域(银行,核,国防应用等),应该采用 C++, Java 那样的警察巡逻哲学。
Reference:
http://www.wellho.net/mouth/831_Comparison-of-Object-Oriented-Philosophy-Python-Java-C-Perl.html