面向对象编程会被抛弃吗?这五大问题不容忽视
选自towardsdatascience
作者:Rhea Moutafis
机器之心编译
机器之心编辑部
今天来讲讲面向对象编程中比较棘手的问题 。
文章插图
20 世纪 60 年代 , 编程遇到了一个大问题:计算机还没有那么强大 , 需要以某种方式平衡数据结构和程序之间的能力 。
这意味着 , 如果你有大量数据 , 那么不将计算机推向极限就无法充分利用这些数据 。 另外 , 如果你需要做很多事情 , 那么你就不能使用过多的数据 , 否则计算机将会一直运行下去 。
接下来到了 1966、1967 年 , Alan Kay 从理论上证明可以使用封装的微型计算机 。 这些微型计算机不共享数据 , 而是通过消息传递进行通信 。 这样就可以更加经济地使用计算资源 。
尽管这个想法很巧妙 , 但直到 1981 年 , 面向对象编程才成为主流 。 在那之后 , 它就没有停止过吸引新的和经验丰富的软件开发者 。 面向对象的程序员市场一如既往地忙碌 。
但是在最近几年中 , 这种已有几十年历史的编程范式受到越来越多的批评 。 难道是在面向对象编程大行其道 40 年之后 , 技术已经超越了这种范式?
文章插图
上图文章链接:
函数和数据耦合
面向对象编程的主要思想非常简单:尝试将一个功能强大的程序整体分解为功能同样强大的多个部分 。 这样就可以将一些数据和那些只在相关数据上使用的函数耦合起来 。
注意 , 这仅涵盖封装的概念 。 也就是说 , 位于对象内部的数据和函数对于外部是不可见的 。 我们只能通过消息(通常通过 getter 和 setter 函数)与对象的内容进行交互 。
继承性和多态性并没有包含在最初的设计想法中 , 但是对于现在的面向对象编程而言是必需的 。 继承基本上意味着开发者可以定义具有其父类所有属性的子类 。 直到 1976 年 , 即面向对象的程序设计的概念问世十年之后 , 继承性才被引入 。
又过了十年 , 多态性才进入面向对象的编程 。 简单来讲 , 这意味着某种方法或对象可以用做其他方法或对象的模板 。 从某种意义上说 , 多态性是继承性的泛化 , 因为并不是原始方法或对象的所有属性都需要传输到新实体 。 相反 , 你还可以选择重写一些属性 。
多态性的特殊之处在于 , 即使两个实体在源代码中互相依赖 , 被调用实体的工作方式也更像插件 。 这使得开发人员的工作变得轻松 , 因为他们不必担心运行时的依赖关系 。
值得一提的是 , 继承性和多态性并不是面向对象编程所特有的 。 真正的区别在于封装数据及其包含的方法 。 在计算资源比今天稀缺得多的时代 , 这是一个天才的想法 。
文章插图
面向对象编程中的 5 大问题
面向对象的编程一经问世 , 便改变了开发人员看待代码的方式 。 20 世纪 80 年代以前 , 过程式编程非常面向机器 。 开发人员需要非常了解计算机的工作原理才能编写好的代码 。
通过封装数据和其他方法 , 面向对象的编程使软件开发更加以人为中心 , 符合人类的直觉 。 比如 , 方法 drive() 属于 car 数据组 , 而不是 teddybear 组 。 之后出现的继承性也很直观 。 比如 , 现代汽车(Hyundai)是汽车的一个子类 , 并且具有相同的属性 , 但 PooTheBear 不是 , 这样很好理解 。
香蕉猴子丛林问题
想象一下 , 你正在设置一个新程序 , 并且正在考虑设计一个新类 。 然后 , 你回想起为另一个项目创建的简洁的小类 , 发现其对正在进行的工作很合适 。
没问题 , 你可以将以前项目中的类在新项目中复用 。
- 机器人|万州区举办“中国梦科技梦”机器人编程大赛
- 小米11评测:首发骁龙888 面向新10年的启航之作
- 英特尔推出可检测代码错误的ControlFlag机器编程工具
- 可编程3D打印耗材可帮助普通3D打印机轻松实现多材料物品的制作
- F2FS面向Linux 5.11继续加强其加密及文件数据压缩功能
- 微信推出收费服务,面向12亿用户!看完你还想更新微信吗?
- 面向普通用户!冷门品牌逆袭之路,性能和续航哪个更重要?
- 菜鸟学编程,不懂C++ this指针?还不赶快来学一学
- 大学生如何提升Java编程能力
- 对于一个编程小白来说,该学习Java还是Python