面向对象编程 (OOP) 中的抽象:隐藏复杂性

你通过踩踏板和转动方向盘来驾驶汽车。你不需要了解燃油喷射或活塞运动。汽车向你隐藏了这些细节。你只需要使用一个简单的接口。

软件的工作原理也是如此。

想想发送电子邮件。你的代码可能看起来像这样:

emailService.send(email);

它看起来很简单。但在幕后,系统执行了许多任务:

你不需要看到这些步骤。你只关心电子邮件是否发送成功。

如果你暴露每一个步骤,就会产生问题。想象一下,如果每个开发者都必须手动调用:

这会让你的代码变得脆弱。如果你更换了电子邮件服务商,你必须更新应用中的每一个地方。你的代码会与具体实现紧密耦合。

抽象解决了这个问题。

抽象展示了对象“做什么”,而隐藏了它是“怎么做”的。你只向用户展示他们需要的内容。

用户通过一个稳定的接口进行交互。他们不在乎你的身份验证逻辑或你的重试策略。这些细节都被隐藏了起来。

许多人会将“抽象”与“封装”混淆。它们的区别在于:

封装问的是:谁可以改变这个对象的状态?它保护的是数据。

抽象问的是:用户应该看到哪些细节?它隐藏的是复杂性。

它们协同工作,以构建更好的系统。

接下来,我们将讨论继承。我们将研究如何在不重复编写相同代码的情况下处理共享行为。

Source: https://dev.to/ashay_tiwari_3658168ad5db/abstraction-in-oop-hiding-complexity-without-hiding-capability-1111