首先要了解为什么会出现面对对象。面对对象成为流行是从C++开始。C++是在C的基础上创建起来的。优秀的程序员已经形成了一整套如何用C设计出良好的程序结构的原则,使得C程序能够具备良好的可移植性,可维护性,可测试性,可伸缩性。但这套原则对于初出茅庐的程序员难以理解,沟通的成本过高。所以,创建一套内嵌这套原则的语言应该是个好主意。这套原则被起了个名字"面对对象",语言需要兼容C看起来也是个不错的主意。但“理想很丰满,现实很骨感”,C++太自由了,导致程序员仍然面临和C一样的面对对象学习曲线。
实际上,面对对象本身根本就不是一门语言的事,它需要面对对象的操作系统库,网络API库,图形处理库,媒体压缩库等等等等,只有这些齐备了,才可能让程序员一开始就处于纯粹的面对对象环境,并从环境例程中学习及锻炼,再为这个面对对象的体系添砖加瓦,逐步成为面对对象的专家,有效缩短学习曲线。但学习曲线仍然需要一个不算短的时间。
中国高校的教育也是巨大的问题,未来的程序员本应在学校里完成面对对象的学习,但当前这一过程基本是在公司里赶鸭子上架完成的。从而导致中国公司很少有良好的,令人心悦诚服的面对对象架构。
回到问题本身,面对对象最大的弊端实际上就是需要有一个耗尽脑筋学习,实践过程,经历过这个过程后,仍然还是只有少部分人能够真正的,彻底的将之掌握。
实际上,函数式编程和面对对象在本质上没什么区别,都是将做出好的程序架构设计的原则的一种语言固化,但如果不能将这些原则掌握,那函数也好,对象也罢,都是然并卵