被错误估计的面向对象

    技术2022-05-11  57

    最近在《Art of Unix Programming》 中读到这样一个观点:Unix文化中对面向对象技术有一种深深的怀疑。尽管Unix本身注重Modularity,但是并不普遍的使用OO。OO最初在Graphics系统方面被证明是一种成功的设计方法。但是从此以后,很少在其他方面能够体现出OO是一种有效的方法。

    我在很大程度上赞同这种说法。在流行的语言中,使用OO语言确实在设计表述上比non-OO更直观,更有表现力。但是到了产品开发后期,或者进入维护阶段,那些管理的比较好,易于维护的系统往往是那些在使用OO特性方面比较克制的系统——浅层次(或者说平坦)的封装往往就足够了。

    这里谈到的OO,是一个整体的组合概念。包括封装、继承、多态等要素;以及一个人们经常忽略的,下文中要提到的要素。

    另外,不能不提的是OO的一个不可缺少的要素——managed enviornment。“Managed”这个词是从微软的.net中借用过来的。不过相对于Sun Java的某些术语来说,这个词更加独立于具体的技术,也更能体现OO这个要素的含义。JVM和.net环境终于让大多数的开发者看到了OO中被长久以来遗漏的要素。这些要素早在OO概念建立的初期就成为OO不可分割的一部分,但是人们很大程度上忽略了这些要素的“不可分割性”。这里面不能不提到C++的影响。C++没有阻止开发者利用这些要素(就像很多人经常为C++辩护的那样,C++也有很多可用的GC方案),但是没有在语言层次上集成这些要素,让很多开发者误认为这些要素对OO来说是可有可无的。

    判断一个系统能否用OO方法来实现,managed enviornment成为了一条非充分、但是必要的条件。如果一个系统有非常强的理由拒绝managed enviornment,那么OO也不再适用这类系统。

    从相反的角度说,当OO不能被作为一个整体概念被使用的时候,他的某些要素——最普遍的就是封装性——是可以,而且经常是必须单独使用,增强系统的可维护性。


    最新回复(0)