关于封装、继承和多态是面向对象编程的三大特征之批判
先说封装
封装是一种通行于世的理念,甚至不限于编程领域。我用来写这篇文章的电脑里面,就到处是封装。我所在的公司,每个职能部门其实也是一种封装。。。
然后,典型的面向过程编程语言C,难道就不能封装了吗?头文件这种设计就是封装理念的一种体现。
然后是继承
继承显然是一种语言特性,只需要编程语言和编译器支持就行。不就是代码复用的一种手段吗?面向对象何德何能,就敢篡为己有?
最后是多态
多态倒是只有面向对象有,但从严格意义上来说,并不是核心特征,而是对象本身特征衍生出来的一种设计模式而已。
面向对象编程真正的特征是什么?
我认为是:数据和逻辑的统一。在面向对象编程中,一个类型里面既包含了对象属性(数据),又包含了方法(逻辑)。强调的是通过公开的方法去操作私有的数据。而不是在对象外部直接操作对象的数据。而且,对于一个对象而言,属性(数据)才是主体,逻辑(方法)则是对象的能力的体现。
而面向过程编程则相反,虽然同样有方法或者叫函数(逻辑),但逻辑才是主体。虽然也有变量可以存储数据,但变量和属性完全不是一回事。变量只不过是数据的抓手,而属性则因为每个对象都是一个特定的实例,所以属性可以完全代表数据。在面向过程的编程中,逻辑就如同生产线,而数据只是生产线加工生产的产品而已。