当前位置: 首页 > article >正文

谈谈面向对象编程和面向过程编程

一.两种编程思维孰优孰劣?

初学者在听到面向对象和面向过程编程一定会想,哪个更好一点,哪个好我就学哪个。其实任何编程方法,都没有所谓的好坏。就好比,交通工具,你说小轿车就一定比摩托车好用,摩托车就一定比自行车好用。我们要看场景,看实际用途。对于短途一两公里,我倒觉得骑自行车很是方便,健身还环保,而对于再稍微远点,我们可以选择摩托车,再有超过十公里,这时候,小轿车会更快更舒服。当然还要取决于你在什么路况上行驶。乡间小道,汽车无法通行,那就用不了了。所以我们不能说只要出门不管去哪都是开车好。抛开实际使用范围都是不切实际的。我们要做到根据不同路况,不同路程,甚至不同心情选择不同的交通工具。

所以呢,再回到上面说的面向对象编程和面向过程编程到底哪个好呢?答案是不能一概而论,对于项目大,功能复杂,需求灵活多变,我们就需要使用面向对象的编程方式会更合适。而对于功能不是很复杂,运行效率要求高,硬件资源比较敏感,我们就可以考虑面向过程编程。

二.两种编程思维的区别是什么?

简单点,以我前面一篇文章讲的信号灯为例,要实现闪烁的功能

面向过程的实现方式

面向对象的实现方式

当需要不同的闪烁频率,或者不同的闪烁方式,面向过程的就需要改变其整个流程,面向对象则需要添加或修改对应的方法,然后调用,整个框架不需要改变。

为啥初学者很难get到面向对象好的点?

在网上说的最多的就是面向对象如何如何好,比如可维护,可扩展,灵活性高,可重用,实际情况确实如此,但作为初学者,我们很难get到这个点。为什么会这样,以我自己的经历来看,主要原因可能如下:

有的同学或者听说过“‘面向对象’的设计能够降低复杂度”……但实际上,并没有。业务逻辑的复杂度永远是不可能降低的,除非你改需求;需求就是那样了,所以复杂度就在哪里了,你怎么降低?无论是面向对象,还是设计模式,和不面向对象编程(面向过程编程)相比,其本质是把复杂度转移到类的关系复杂度上。

所以经验不足的同学,体会不够深,该干的活一点没少干,然后做的项目也不是很大,发挥不出面向对象的威力。

再总结一句话:面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

谈谈我的思考

我们不能把任何东西神话,觉得面向对象就是最好的,面向过程就是落后的。整个计算机的发展,编程语言的出现,都是为了解决问题,不断迭代出新的东西,之所以出现面向对象,就是为了解决面向过程不好处理的问题,但面向对象离不开面向过程,以后可能还会出现其他编程思维,解决现阶段无法解决的问题。这些都是工具,供我们使用,我们要做的就是灵活切换,不同场景使用不同工具,达到最优解。这里我也没有讲具体哪些编程语言,因为没必要,只讨论思维和方法层面的。语言更是工具类底层的东西。

本文章更多的是在讨论大家如何看待这两种编程思维的态度问题。重点没有去触及具体的技术层面的讲解。若大家对我的想法有异议,完全正常,不必纠结,这本来就是一家之言而已。倘若对初学者有所帮助,那便最好不过了。


http://www.kler.cn/a/5790.html

相关文章:

  • [大模型]本地离线运行openwebui+ollama容器化部署
  • 新时期下k8s 网络插件calico 安装
  • CTFshow—文件包含
  • 【算法刷题】leetcode hot 100 滑动窗口
  • springmvc前端传参,后端接收
  • 日语IT用语笔记
  • 容器、虚拟机和 Docker
  • 基于PHP的英语四六级在线模拟考试平台(论文+源码)_kaic
  • Python3 File flush() 方法、 Python3 File write() 方法
  • Chapter9.1:线性系统状态空间基础(上)
  • Java 8 中需要知道的4个函数式接口-Function、Consumer、Supplier、Predicate
  • 吉时利源表出现数据不准怎么办?
  • 通道流量设计
  • 自动驾驶路径规划与控制:讨论自动驾驶车辆的路径规划算法,如A*、Dijkstra等,以及控制策略,如PID控制等
  • 【数据结构与算法】线性表--数组
  • 利用json-server快速在本地搭建一个JSON服务
  • leetcode125:验证回文串
  • JavaScript函数及面向对象
  • GPT-4报告解读
  • 【HDR图像处理】HDR图像,HDRI技术的一些基础概念 | GPT对话记录
  • Appium - 自动化测试框架 - 工作原理、环境搭建
  • SpringBoot整合SpringSecurity权限控制(动态拦截url+单点登录)
  • 多机器人集群网络通信协议分析
  • 设计模式-结构型模式-适配器模式
  • Python字符串常用方法
  • 初赛-图的概念