OOP 解决了哪些问题
What kinds of concerns are addressed by OOP
我熟悉这个词:关注点分离。这几乎是在提倡代码中的模块化。
但是,当我阅读有关 AOP 的内容时,它特别指出它允许您分离横切关注点。
所以我的问题是,如果 AOP 分离横切关注点,那么 OOP 分离什么样的关注点?
OOP 分离了在 real-world 场景中会通过直接关联相互耦合的问题。
比如一个公司有很多员工,员工有工资。
AOP 关注的不是直接关联,而是更像是超越对象到对象关系的哨兵。
AOP 的典型示例场景是日志记录。日志记录仍然由一个名为 Logger 的对象表示,但实际上 logging action 就像一个观察者,它过滤掉正常的流量并提取拦截流量的信息幕后花絮
虽然可以在没有 AOP 的情况下实现日志记录,但实际上您最终会用与给定操作的目的无关的东西弄脏您的代码(例如:注册用户 与日志记录无关)。
因此,您应该了解 AOP 强制执行并改进了良好的关注点分离,甚至将一些需求从您的视线中移开,使代码更简单。
简短的回答:OOP 分离抽象层次。 Well-designed OOP 代码将在整个模块中使用一组一致的抽象。
长答案:OOP 建立在四个 'pillars':
之上
- 数据抽象
- 封装
- 继承
- 多态性
这些允许程序员轻松构建抽象层,每个级别使用较低的抽象来提供较高的抽象。
例如,您可以从帧、消息、路由和会话(抽象)构建一个 TCP/IP 堆栈。使用会话时,您不需要知道帧是如何重新发送的,以及碰撞检测(封装)。此外,您可以在不知道您使用的是 IP4 还是 IP6(多态性)的情况下发送消息。所有级别都可以使用相同的 CRC 检查,例如遗产。因此,这 4 个支柱共同提供了一种可以创建非常干净的抽象级别的编程方式。但很多时候,OOP 软件变得一团糟,抽象级别没有清楚地分开。
AOP 是 OOP 的补充。 OOP 专注于抽象层次和结构,AOP 专注于与 'concerns' 相关的行为。它们是查看代码的正交方式。
我熟悉这个词:关注点分离。这几乎是在提倡代码中的模块化。
但是,当我阅读有关 AOP 的内容时,它特别指出它允许您分离横切关注点。
所以我的问题是,如果 AOP 分离横切关注点,那么 OOP 分离什么样的关注点?
OOP 分离了在 real-world 场景中会通过直接关联相互耦合的问题。
比如一个公司有很多员工,员工有工资。
AOP 关注的不是直接关联,而是更像是超越对象到对象关系的哨兵。
AOP 的典型示例场景是日志记录。日志记录仍然由一个名为 Logger 的对象表示,但实际上 logging action 就像一个观察者,它过滤掉正常的流量并提取拦截流量的信息幕后花絮
虽然可以在没有 AOP 的情况下实现日志记录,但实际上您最终会用与给定操作的目的无关的东西弄脏您的代码(例如:注册用户 与日志记录无关)。
因此,您应该了解 AOP 强制执行并改进了良好的关注点分离,甚至将一些需求从您的视线中移开,使代码更简单。
简短的回答:OOP 分离抽象层次。 Well-designed OOP 代码将在整个模块中使用一组一致的抽象。
长答案:OOP 建立在四个 'pillars':
之上- 数据抽象
- 封装
- 继承
- 多态性
这些允许程序员轻松构建抽象层,每个级别使用较低的抽象来提供较高的抽象。
例如,您可以从帧、消息、路由和会话(抽象)构建一个 TCP/IP 堆栈。使用会话时,您不需要知道帧是如何重新发送的,以及碰撞检测(封装)。此外,您可以在不知道您使用的是 IP4 还是 IP6(多态性)的情况下发送消息。所有级别都可以使用相同的 CRC 检查,例如遗产。因此,这 4 个支柱共同提供了一种可以创建非常干净的抽象级别的编程方式。但很多时候,OOP 软件变得一团糟,抽象级别没有清楚地分开。
AOP 是 OOP 的补充。 OOP 专注于抽象层次和结构,AOP 专注于与 'concerns' 相关的行为。它们是查看代码的正交方式。