文档详情

《面向方面编程(AOP)》-公开课件.ppt

发布:2019-12-16约4.47千字共22页下载文档
文本预览下载声明
AOP(面向方面的编程)技术 本讲的简要回顾 * 在本讲您能了解如下内容 AOP技术概述 AOP中的关注点 AOP是OOP的扩展技术 AOP的具体用途 为什么要提供AOP 利用AOP能够更好地满足OCP原则 1、面向方面的编程(AOP---Aspect-Oriented Programming) (1)什么是Aspect? 中文直译通常是“方面”(更准确的应该为“切面”),但这个名词容易使人混淆或者太抽象。 它其实是一种编程技术 (2)应用AOP的主要目的----尽量分离“技术问题实现”和“业务问题实现” 它允许开发者能够对横切关注点进行模块化设计----“切面”的意义在于将业务逻辑中复杂问题分离成不同层面,使其实现统一集中的管理。 能够实现分散关注,将通用需求功能从不相关类之中分离出来。这样将能够更好地遵守“单一职责”原则; 同时,能够实现代码重用。一旦行为发生变化,不必修改很多类,只要修改共享的类。 您理解其内涵吗? 您觉得抽象难懂吗?请继续… 2、AOP技术起源 (1)OOP技术的简要回顾 开发者可以用一组对象以及这些对象之间的关系将软件系统形象地表示出来----利用OOP能够更好地对系统进行抽象和描述,在设计规模大、逻辑复杂的系统时,开发周期反而能变的更短 请见文档中的说明 (2)面向对象设计的主要问题是,它本质是静态和封闭的 静态的----很难达到动态地添加新的功能方法 封闭的----任何需求的细微变化都可能需要对原有的类继续修改,从而对开发进度造成重大影响。 (3)利用设计模式进一步完善OOP 解决OOP所面临的问题一个常用的方法是应用设计模式 应用设计模式所体现出的优点---设计出灵活、可扩展、可重用的类库、组件,乃至于整个系统的架构 比如在GOF中提供“装饰器模式”来达到动态地添加新的功能方法 希望大家有时间系统地掌握“GOF”设计模式和J2EE核心设计模式! (4)应用设计模式同样所面临的问题 然而鉴于对象封装的特殊性,“设计模式”的触角始终在接口与抽象中大做文章,而对于对象内部则无能为力。 比如在GOF中强调“面向接口”编程也就是希望我们的系统能够有更好的灵活性和可扩展性---分离“变化”和“不变”部分,这样在一定的程度上能够“适应变化”。 因为,我们希望能够动态地调整对象的内部结构!同时也能够对对象中的方法执行过程能够控制---比如,能够拦截某方法,从而允许在方法执行之前或者执行以后,能够做点其它的事情! OOP的“静态”特性很难达到此目的! (5)AOP技术的产生 早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析 随着研究的逐渐深入,AOP也逐渐发展成一套完整的程序设计思想,各种应用AOP的技术也应运而生。 3、AOP是什么样的编程方法 (1)首先了解什么是“分离关注” 所谓的分离关注就是将某一通用的需求功能从不相关的类中分离出来 同时能够使得很多类共享该通用的需求实现----- 一旦该实现发生变化,只要修改这个“实现”就可以而不影响其它主功能实现。 (2)AOP就是这种实现分散关注的编程方法 它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题 (3)横切问题主要是指 系统中的下面的各个方面的技术实现:事务、安全、日志、并发锁等横切关注。 当未来系统变得越来越复杂,横切关注点就成为一个大问题的时候,AOP就可以很轻松的解决横切关注点这个问题。 (4)AOP实际是GoF设计模式的一种扩展 设计模式所追求的是降低代码之间的耦合度-----设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,增加程序的灵活性和可重用性 AOP实际上就是设计模式所追求的目标的一种实现或者说AOP实际是GoF设计模式的延续----分离“系统核心”和“外围功能”的各自实现。 您了解GOF及J2EE核心模式吗 4、AOP主要是把系统作为一批关注点来实现 (1)应用系统是由大量的关注点所构成的 比如,持久化、系统安全、日志记录、应用的业务逻辑通常被认为是应用需要解决的问题。因此,他们通常作为各自的关注点被看待和被处理。 而从整个系统角度考虑,一个系统往往是由大量的关注点构成的。 (2)我们需要整理和分离系统的各个关注点 (3)应用系统中的常见的各个关注点---通过分层能够更好地隔离各个关注点 您了解为什么要这样吗 5、AOP是OOP的一种扩展技术 OOP与AOP相互配合---它们应该相互配合,而不是相互排斥 (1)AOP和OOP在应用上的不同点 AOP是针对具体业务领域中的“技术逻辑”的实现; 而OOP针对业务对象及其关系、业务逻辑的处理。 (2)OOP擅长解决纵向方面的问题
显示全部
相似文档