面向对象语言的缺点
刚开始接触java时,首先了解到的就是面向对象语言的四个基本特征 抽象 继承 封装 多态 以及一大堆面向对象语言的优点包括代码重用,权限控制,易扩展,开发效率高之类的,其实面向对象语言从诞生之日起就一直伴随着许多的缺陷,包括并不限于以下几点:
一、大大增加了代码量,包括非常多的冗余代码
对于面向过程语言来说,编程时需要哪些变量和方法就只编写这些变量和方法,而对于面向对象语言来说,每次无论你要使用什么都要先写一个类,并且每一个类都要有独立的变量和方法,这样就会造成可能很简单的问题也要很多的类代码,为了解决这个缺点,继承便出现了,继承可以让类与类可以共享代码,一定程度上降低了代码量。
二、对象与对象之间相互依赖,耦合性太高
由于面向对象语言中一切都是对象,我们必须使用一个对象去创建另外一个对象,才能使用其内部方法,这样就造成了这些对象之间相互依赖,为了消除这些依赖,我们可以把创建对象的代码全部集中到一个对象之中,其他的对象都通过调用该对象的方法来动态的获取所需要的对象,这也就是我们所说的工厂模式。进一步地,我们可以不使用工厂,而是编写一个插件,该插件可以把我们所需要的对象在运行时动态地“塞”给我们,这就是依赖注入,也就是控制反转。这个插件就相当于Spring IOC。
三、运行速度慢
java中所有的对象都是存在于堆中,生成对象访问对象时速度都很慢,java把对象放在堆里,把对象的引用放在栈中,通过引用调用对象这样访问速度会稍快一些,jvm中的GC垃圾回收机制,会自动清理垃圾对象,并把有效的对象在堆中全部集中在一起,这样创建对象时,寻找空白的堆内存也会快一点。相当于windows的磁盘碎片整理。
四、失去了灵活性
面向对象语言代码都很死板,继承也没有运行时动态,但是java的多态机制,其不同于面向过程语言的方法后期绑定,在运行时才能确定具体调用的是哪个方法一定程度上增加了其灵活性。面向对象语言一直提倡的组合大于继承的思想诞生了许许多多的设计模式,这些设计模式通过对组合和多态的奇妙运用大大的增加了面向对象语言的灵活性。
综上所述,其实在我们的学习过程中可以看到面向对象语言有许多优秀的地方,但也有一些缺陷,而我们一直都在努力地想尽各种办法去弥补这些缺陷,通过一些机制让面向对象语言越来越来趋于完善。