虽然,面向对象到底是什么很难说清楚。 面向对象编程的三原则:基于消息传递机制,对象分离和多态。这和我们常说的面向对象三原则不太一样,没有提到继承,是的,现在我们都知道继承并不面向对象,继承是一种代码复用的方式而已。而且用好很不容易,经常把系统搞的很乱。而且,对设计的帮助不大。设计的目的是提供一种工具去解决问题,而不是直接的解决问题,工具是从问题的场景中提炼出来的。好处是可以复用,坏处是仅能应用于特定的场景。
目前,我们所熟知的面向对象语言是类型抽象语言(Abstract data type)比如java。构造一个更好的类型系统,是这种面向对象技术所要解决的问题。与其说是面向对象,不如说是面向类或面向类型的。从计算语义上说,这类对象技术仍然是装置的操作语义,和面向过程的没有实质上的区别。这种语言,通过引入类来提供新的类型;提供继承机制来处理类型之间的层次关系;提供泛型机制提高处理类型的效率。通过设计模式提供一些匪夷所思的手段来解决类型和类型层次所引起的问题,并称之为设计。最终的系统有着浩如星海的类型,错综复杂的关系,鬼斧神工的模式,偷天换日的泛型,神出鬼没的反射。总之,复杂的一塌糊涂。不过还好,我们最终可以封装一个不错的接口,来掩盖系统内部的复杂。当然这个接口也是通过一个新的类型来提供的。