是什么让每个人从顺序语言转向对象语言?
根据Wikipedia,面向对象编程的特征是数据抽象,封装,消息传递,模块化,多态和继承.对我来说,数据抽象,封装,消息传递,模块化也存在于顺序语言中.只有多态和继承特定于面向对象的编程.它是否正确 ?
许多非OOP语言当然可以构建这些功能.从C与C++区域看,您可以通过使用不透明指针,使用一组函数来获取/返回这些不透明对象,以及一组内部函数,这些函数都是文件静态的,从而在C中提供封装.您甚至可以使用函数指针和封装对象进行多态和继承.
然后,我们还可以使用汇编语言或机器语言进行编程.将任何功能引入语言的原因是为了更容易使用该功能.
再一次,看看C与C++,处理不透明指针之类是烦人的,重复的和半难的.使用C++,您可以用更少的代码实现相同的效果.对每个人来说,显而易见的事情是显而易见的.破解要困难得多(虽然并非不可能).另外,如果需要,可以轻松打破封装,因为您可以定义语言结构friend,以便在必要时提供异常.
如果没有直接的语言支持,有些东西真的难以实现.当然,运算符重载是不可能的,但如果没有语言支持,函数重载确实很难实现.
最重要的是,如果它是在语言中,那么每个人都以同样的方式做到这一点.在C中有多种实现继承和多态的方法.所有这些方法都彼此不兼容.虽然C++用户可以使用这些方法中的任何一种,但他们选择使用99.9%的实际语言功能.这意味着更容易阅读其他人的代码并知道发生了什么.你不必猜测什么是不透明的,什么不是.你不必猜测从什么中得到什么.你知道,因为每个人都以同样的方式做到这一点.
在任何情况下,如果你愿意,大多数OOP-lite语言(C++,Java,C#)可以或多或少地像程序一样使用.你只需忽略这些对象.所以在很多方面,他们都是两全其美的.