AOP OOP概念问题

AOP是什么?
Aspect 方面
oriented 面向
programming 程序
  AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。


oop是什么?
object 对象
oritented 面向
programming 程序




OOP: Object Oriented Programming,面向对象的程序设计。所谓“对象”就是一个或一组数据以及处理这些数据的方法和过程的集合。面向对象的程序设计完全不同于传统的面向过程程序设计,它大大地降低了软件开发的难度,使编程就像搭积木一样简单,是当今电脑编程的一股势不可挡的潮流。
  面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。OOP 主要有以下的概念和组件:
  组件 - 数据和功能一起在运行着的计算机程序中形成的单元,组件在 OOP 计算机程序中是模块和结构化的基础。
  抽象性 - 程序有能力忽略正在处理中信息的某些方面,即对信息主要方面关注的能力。
  封装 - 也叫做信息封装:确保组件不会以不可预期的方式改变其它组件的内部状态;只有在那些提供了内部状态改变方法的组件中,才可以访问其内部状态。每类组件都提供了一个与其它组件联系的接口,并规定了其它组件进行调用的方法。
  多态性 - 组件的引用和类集会涉及到其它许多不同类型的组件,而且引用组件所产生的结果得依据实际调用的类型。
  继承性 - 允许在现存的组件基础上创建子类组件,这统一并增强了多态性和封装性。典型地来说就是用类来对组件进行分组,而且还可以定义新类为现存的类的扩展,这样就可以将类组织成树形或网状结构,这体现了动作的通用性。
  由于抽象性、封装性、重用性以及便于使用等方面的原因,以组件为基础的编程在脚本语言中已经变得特别流行。Python 和 Ruby 是最近才出现的语言,在开发时完全采用了 OOP 的思想,而流行的 Perl 脚本语言从版本5开始也慢慢地加入了新的面向对象的功能组件。用组件代替“现实”上的实体成为 JavaScript(ECMAScript)得以流行的原因,有论证表明对组件进行适当的组合就可以在英特网上代替 HTML 和 XML 的文档对象模型(DOM)。
### Java 中 AOPOOP概念及区别 #### 概念介绍 在 Java 编程中,面向对象编程OOP)是一种通过类和对象来构建应用程序的范式。其核心特性包括封装、继承和多态,这些特性使得复杂的应用程序可以被拆解成更易于管理和维护的小单元[^1]。 另一方面,面向切面编程AOP)则专注于将横切关注点从业务逻辑中分离出来。所谓横切关注点是指那些影响多个模块的功能,比如日志记录、事务管理或安全性验证。AOP 提供了一种方法,能够把这些功能集中到一个地方进行处理,而不是散布在整个代码库中[^2]。 #### 区别分析 两者的差异可以从以下几个方面来看: - **目标不同** - OOP 主要用于建模现实世界中的实体及其交互关系,强调的是如何将系统划分为独立的对象。 - 而 AOP 则侧重于解决跨越多个对象的操作问题,它试图找到一种途径去统一管理这类操作而不破坏原有设计[^3]。 - **实现方式** - 在 OOP 中,我们通常会定义接口或者基类,并让具体子类继承并扩展行为;而 AOP 使用了诸如通知(advice)、连接点(join point)以及切入点(pointcut)这样的术语和技术手段来描述何时何地执行特定的行为。 - **适用场景** - 当我们需要表达事物的状态变化规律时,往往会选择采用基于 OOP 的解决方案; - 如果遇到像性能监控、异常追踪之类的全局性需求,则更适合运用 AOP 技术加以应对。 #### 联系探讨 尽管存在上述诸多差别之处,但实际上这两种编程理念并非对立而是互补的关系。在一个完整的软件项目里,既可以利用 OOP 来搭建主体框架结构,也可以引入 AOP 对某些特殊的需求作出灵活调整。例如,在 Spring Framework 这样的现代 Java 开发平台当中,就很好地融合了这两方面的优势:一方面提供了强大的依赖注入(Dependency Injection)支持以促进组件间的松散耦合度;另一方面也内置有完善的 AOP 功能以便简化跨层调用过程中的重复劳动。 ```java // 示例代码展示简单的 AOP 应用 @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logBefore(JoinPoint joinPoint){ System.out.println("Method Name: "+joinPoint.getSignature().getName()); } } ``` 以上例子展示了如何借助 AspectJ 注解创建一个前置增强器(pre-execution advice),每当任何服务层的方法被执行前都会触发相应的日志输出动作。 #### 结论总结 综上所述,虽然 AOPOOP 各自解决了不同类型的问题,但它们共同致力于提升软件质量这一终极目的之上。合理搭配使用二者可以使我们的应用既具备良好的结构性又不失灵活性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值