OOP 解决了哪些问题

What kinds of concerns are addressed by OOP

我熟悉这个词:关注点分离。这几乎是在提倡代码中的模块化。

但是,当我阅读有关 AOP 的内容时,它特别指出它允许您分离横切关注点。

所以我的问题是,如果 AOP 分离横切关注点,那么 OOP 分离什么样的关注点?

OOP 分离了在 real-world 场景中会通过直接关联相互耦合的问题。

比如一个公司有很多员工,员工有工资。

A​​OP 关注的不是直接关联,而是更像是超越对象到对象关系的哨兵

A​​OP 的典型示例场景是日志记录。日志记录仍然由一个名为 Logger 的对象表示,但实际上 logging action 就像一个观察者,它过滤掉正常的流量并提取拦截流量的信息幕后花絮

虽然可以在没有 AOP 的情况下实现日志记录,但实际上您最终会用与给定操作的目的无关的东西弄脏您的代码(例如:注册用户 与日志记录无关)。

因此,您应该了解 AOP 强制执行并改进了良好的关注点分离,甚至将一些需求从您的视线中移开,使代码更简单。

简短的回答:OOP 分离抽象层次。 Well-designed OOP 代码将在整个模块中使用一组一致的抽象。

长答案:OOP 建立在四个 'pillars':

之上
  • 数据抽象
  • 封装
  • 继承
  • 多态性

这些允许程序员轻松构建抽象层,每个级别使用较低的抽象来提供较高的抽象。

例如,您可以从帧、消息、路由和会话(抽象)构建一个 TCP/IP 堆栈。使用会话时,您不需要知道帧是如何重新发送的,以及碰撞检测(封装)。此外,您可以在不知道您使用的是 IP4 还是 IP6(多态性)的情况下发送消息。所有级别都可以使用相同的 CRC 检查,例如遗产。因此,这 4 个支柱共同提供了一种可以创建非常干净的抽象级别的编程方式。但很多时候,OOP 软件变得一团糟,抽象级别没有清楚地分开。

AOP 是 OOP 的补充。 OOP 专注于抽象层次和结构,AOP 专注于与 'concerns' 相关的行为。它们是查看代码的正交方式。