编程|面向对象编程的时代会不会走到尽头?它的问题是什么?


编程|面向对象编程的时代会不会走到尽头?它的问题是什么?
文章图片
编程|面向对象编程的时代会不会走到尽头?它的问题是什么?
文章图片
面向对象程序设计 , 其本质是以建立模型体现出来的抽象思维过程和面向对象的方法 。 模型是用来反映现实世界中事物特征的 。
任何一个模型都不可能反映客观事物的一切具体特征 , 只能对事物特征和变化规律的一种抽象 , 且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征 。 通过建立模型而达到的抽象是人们对客体认识的深化 。
面向对象程序设计方法是尽可能模拟人类的思维方式 , 使得软件的开发方法与过程尽可能接近人类认识世界、解决现实问题的方法和过程 , 也即使得描述问题的问题空间与问题的解决方案空间在结构上尽可能一致 , 把客观世界中的实体抽象为问题域中的对象 。
面向对象编程一经问世 , 他就改变了开发人员看待代码的方式 , 在 20 世纪 80 年代以前盛行的过程式编程 , 是非常面向机器的 。 开发人员需要对计算机如何工作有相当多的了解 , 才能写出好代码 。
通过封装数据和方法 , 面向对象编程使软件开发更加以人为本 。 它符合人类的直觉 , 方法drive()属于数据组car , 但不属于组teddybear 。
继承出现的时候 , 那也是直观的 。 汽车是car的一个子群 , 有着相同的属性 , 这是完全合理的 。
然后问题来了 , 假设你正在设置一个新程序 , 并且你正在考虑设计一个新的类 。 你回想起为另一个项目创建的一个简洁的小类 , 你意识到它对你目前正在尝试做的事情来说是非常完美的 。
没问题!你可以在新项目中重用旧项目中的类 。
除了这个类实际上可能是另一个类的子类外 , 所以现在还需要包含父类 。 然后 , 你意识到父类也依赖于其他类 , 如此一来 , 最终会包含大量的代码 。
这几乎说明了一切 。 重用类是很好的做法 。 事实上 , 它可以成为面向对象编程的一个主要优点 。
但是 , 为了避免 DRY(don’t repeat yourself 不要重复自己) , 你最好编写一个新的类 , 而不是包含大量的依赖项 。
假如你已经成功地为新代码重用了来自另一个项目的一个类 。 如果基类发生变化 , 会发生什么情况?
它有可能会破坏你的整个代码 。 甚至你可能连碰都没有碰过 。 但是 , 有一天你的项目工作得很顺利 , 但第二天就不这样了 , 因为有人更改了基类中的一个小细节 , 而这个细节最终对你的项目非常重要 。
使用继承的次数越多 , 可能需要进行的维护就越多 。 因此 , 尽管重用代码在短期内看起来非常有效 , 但从长远来看 , 它可能会付出高昂的代价 。
由于继承没有包含在面向对象编程的原始形式中 , 这个问题不能称为面向对象的固有问题 , 这只是一个教条走得太远的例子 。
不仅仅是面向对象编程可能做过头了 。 在函数式编程中 , 在屏幕上处理用户输入或打印消息是极其困难的 。 对于这些目的 , 面向对象或过程化编程要更好一些 。
尽管如此 , 仍有一些开发人员试图将这些东西作为纯函数来实现 , 并将他们的代码扩展到几十行 , 以至于没有人能够理解 。 使用另一种范式 , 他们可以轻松地将代码简化为几行可读的代码 。
毫无疑问 , 函数式编程 , 而面向对象编程在过去几年来受到了一些 。
了解新的编程范式并在适当的时候使用它们是有意义的 。 如果说 , 面向对象编程是让开发人员无论走到哪里都能看到钉子和锤子 , 那这是不是将锤子扔出窗外的理由呢?不是的 。 你可以在工具箱中添加一把螺丝刀 , 或者一把小刀、一把剪刀 , 然后根据手头的问题来选择工具 。