谈谈面向对象编程和面向过程编程
一.两种编程思维孰优孰劣?
初学者在听到面向对象和面向过程编程一定会想,哪个更好一点,哪个好我就学哪个。其实任何编程方法,都没有所谓的好坏。就好比,交通工具,你说小轿车就一定比摩托车好用,摩托车就一定比自行车好用。我们要看场景,看实际用途。对于短途一两公里,我倒觉得骑自行车很是方便,健身还环保,而对于再稍微远点,我们可以选择摩托车,再有超过十公里,这时候,小轿车会更快更舒服。当然还要取决于你在什么路况上行驶。乡间小道,汽车无法通行,那就用不了了。所以我们不能说只要出门不管去哪都是开车好。抛开实际使用范围都是不切实际的。我们要做到根据不同路况,不同路程,甚至不同心情选择不同的交通工具。
所以呢,再回到上面说的面向对象编程和面向过程编程到底哪个好呢?答案是不能一概而论,对于项目大,功能复杂,需求灵活多变,我们就需要使用面向对象的编程方式会更合适。而对于功能不是很复杂,运行效率要求高,硬件资源比较敏感,我们就可以考虑面向过程编程。
二.两种编程思维的区别是什么?
简单点,以我前面一篇文章讲的信号灯为例,要实现闪烁的功能
面向过程的实现方式
面向对象的实现方式
当需要不同的闪烁频率,或者不同的闪烁方式,面向过程的就需要改变其整个流程,面向对象则需要添加或修改对应的方法,然后调用,整个框架不需要改变。
为啥初学者很难get到面向对象好的点?
在网上说的最多的就是面向对象如何如何好,比如可维护,可扩展,灵活性高,可重用,实际情况确实如此,但作为初学者,我们很难get到这个点。为什么会这样,以我自己的经历来看,主要原因可能如下:
有的同学或者听说过“‘面向对象’的设计能够降低复杂度”……但实际上,并没有。业务逻辑的复杂度永远是不可能降低的,除非你改需求;需求就是那样了,所以复杂度就在哪里了,你怎么降低?无论是面向对象,还是设计模式,和不面向对象编程(面向过程编程)相比,其本质是把复杂度转移到类的关系复杂度上。
所以经验不足的同学,体会不够深,该干的活一点没少干,然后做的项目也不是很大,发挥不出面向对象的威力。
再总结一句话:面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。
谈谈我的思考
我们不能把任何东西神话,觉得面向对象就是最好的,面向过程就是落后的。整个计算机的发展,编程语言的出现,都是为了解决问题,不断迭代出新的东西,之所以出现面向对象,就是为了解决面向过程不好处理的问题,但面向对象离不开面向过程,以后可能还会出现其他编程思维,解决现阶段无法解决的问题。这些都是工具,供我们使用,我们要做的就是灵活切换,不同场景使用不同工具,达到最优解。这里我也没有讲具体哪些编程语言,因为没必要,只讨论思维和方法层面的。语言更是工具类底层的东西。
本文章更多的是在讨论大家如何看待这两种编程思维的态度问题。重点没有去触及具体的技术层面的讲解。若大家对我的想法有异议,完全正常,不必纠结,这本来就是一家之言而已。倘若对初学者有所帮助,那便最好不过了。