欢迎来到论文网! 识人者智,自知者明,通过生日认识自己! 生日公历:
网站地图 | Tags标签 | RSS
论文网 论文网8200余万篇毕业论文、各种论文格式和论文范文以及9千多种期刊杂志的论文征稿及论文投稿信息,是论文写作、论文投稿和论文发表的论文参考网站,也是科研人员论文检测和发表论文的理想平台。lunwenf@yeah.net。
您当前的位置:首页 > 科技论文 > 计算机论文

面向切面编程之研究与探讨

时间:2011-04-23  作者:秩名

论文导读:当前,软件开发方法学中最为流行的无疑是面向对象方法。OOP只用于表示对象之间的泛化特化关系,而对象之间的横向关联则完全用AOP来表现。面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能,比如一个完整的系统中,记录平时系统运行时抛出的异常,需要我们去记录,以便我们对系统尽快的修复。
关键词:面向切面编程,OOP,对象
 

当前,软件开发方法学中最为流行的无疑是面向对象方法。它能够有效地对系统的业务关注进行模块化开发。但是,在应对系统中众多的横切关注时,面向对象方法并没有很好地对其进行支持,而是直接将其代码与核心关注地代码混杂在一起,导致了系统功能代码之间的纠结,加大了系统开发与维护的难度。面向方面作为面向对象的补充,进一步将系统中的核心关注与横切关注进一步分离。通过将其应用到实际系统中,可以提高代码的重用性,所开发的系统更加具有可扩展性。免费论文。本文首先分析介绍了面向对象方法,分析了它的优点及不足,引出了面向方面编程。而后介绍了面向方面为软件开发方法带来的影响,对AOP的思想与实现机制做了详细介绍,并阐述了使用其进行软件开发的一般步骤。

一、AOP思想的提出

传统的程序经常表现出一些不能自然地适合单个程序模块或者几个紧密相关的程序模块的行为 例如日志记录对上下文敏感的错误处理性能优化以及设计模式等等我们将这种行为称为横切关注点因为它跨越了给定编程模型中的典型职责界限。因为横切行为的实现是分散的开发人员发现这种行为难以作逻辑思维实现和更改,因此面向方面的编程(Asepect-OrientedProgramming,AOP)应运而生,AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向对象的软件系统中,从而实现了横切关注点的模块化。通过划分Aspect代码,横切关注点变得容易处理,开发者可以在编译时更改插入或除去系统的Aspect,甚至重用系统的Aspect,更重要的是,AOP可能对软件开发过程造成根本性的影响。OOP只用于表示对象之间的泛化特化关系,而对象之间的横向关联则完全用AOP 来表现。

开发者通过对关注点的分离,将横切的功能以模块化的形式来表现,使得代码更易于维护和重用。AOP并不想替代OOP或者其他基于对象的方法。相反AOP作为OOP的补充,通过支持一种新的从组件分离出方面的方式,用来弥补OOP的缺陷。

二、 AOP结构模式

面向方面编程是一个崭新的程序结构模式,作为面向对象程序设计的补充,它影响力是深远而悠长的,作为一种新的技术,它提出许多全新的概念。下面先介绍一下AOP中各个重要概念的定义:

1、关注点(concern):一个关注点可以是一个特定的问题、概念、或是应用程序的应用域——总而言之,应用程序必须达到的一个目标。

2、横切关注点(crosscutting concern):如果一个关注点的实现代码散落在很多个类或方法之中,就像前面那个“安全检查”的例子那样,我们就称之为“横切关注点”。

3、连接点(joint point):连接点是代码中一个明确定义的位置,关注点将在这里横切应用程序。连接点可以是方法调用、构造函数调用、异常处理程序、或者程序执行中的其他点。

4、切入点(pointcut):一组连接点的总称,用于指定某个增强何时应该被调用。切入点可以用正则表达式或通配符来描述。有些AOP实现技术还支持切入点的组合。

5、方面(aspect):方面是AOP的模块单元,其地位就相当于面向对象程序设计中的类,它将连接点、通知以及类型间声明封装在一起。同类相似,方面也可以有自己的成员函数和变量,从其他类或者方面扩展以及实现接口等。与类不同的是方面的构造(construct)是由AOP框架来构造的,不能像类一样使用new关键字来显式生成实例。

6、编织(weaving):当方面模块被编写完毕之后,AOP语言编译器负责将方面模块中代码织入到被连接点标记的宿主代码中去,这个过程称作为编织。根据编织时机的不同有编译时编织和运行时编织的不同。

三、 基于AOP的开发步骤

AOP从其本质上来讲,就是用一种松散耦合的方式来实现各个独立的关注点,然后在组合这些实现来建立最终的系统,用它所建立的系统是松散耦合的。面向方面程序的开发分三个清晰的开发步骤,如图所示:

n关注点分解:分解需求提取出各个横切关注点,并识别和记录方面所在连接点。在这一步里,需要把核心关注点同系统级的横切关注点分开。横切关注点的划分通常满足以下几个条件:

u关注点所实现的功能横跨了多个模块

u关注点与核心业务相对独立,不属于同一问题域

u关注点不属于系统的业务功能范畴

n关注点实现:根据AOP程序的结构将各自的关注点独立进行实现,完成功能实现。

进行代码编织:通过织入器,将各个关注点同原有程序连接重组在一起。

四、AOP原理的应用

面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能,比如一个完整的系统中,记录平时系统运行时抛出的异常,需要我们去记录,以便我们对系统尽快的修复。这就是我们常用的日志。免费论文。如果对一些要求比较重要的数据操作,事务是不可少的,如金融系统,这样的数据很重要,每步操作都很重要,我们就应该用到事务处理。这就是我们常用的事务处理。可根据你的系统数据的重要性,有选择的应用。还有一个常用的就是安全验证了,它也是常用的,对于不同的页面,访问的身份也不一样。这就是我们常用的身份验证。以上这些不是针对特定那个业务模块的,可能针对所有的模块。它们只是一些附加的功能,相对模块的主功能而言。如果在每个模块中都夹杂着这些不是核心业务的代码,看起来与核心业务有点关系,但这样处理,会对以后的维护比较头疼。免费论文。同时也违背了面向对象的一条原则,自己对自己负责。本不属于这个方法的业务也放在了其中。这样的代码不仅难维护,重用性也不好,耦合度也比较大,内聚性也比较低。这样的代码眼前可能不会有什么麻烦,但给后期的维护人员带来了麻烦。由于AOP技术本身的插件式特点,采用这种机制进行系统设计和程序开发能够为软件带来极大的灵活性和扩展性。

目前,运用AOP对系统进行功能扩展主要关注的方面是:1、Transactions事务,2、logging日志,3、性能分析和监控,4、权限,包括鉴权,安全控制等,5、缓存,6、错误处理,7、性能优化等等。比如我们最常见的就是日志记录了,举个例子,我们现在提供一个服务查询学生信息的,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但是背后日志记录对这些行为进行记录,但是查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。我们直接从代码入手,要实现以上的目标,我们可以使用一个动态代理类(Proxy),通过拦截一个对象的行为并添加我们需要的功能来完成。

结束语:

总之,AOP作为一个全新的领域,对现代软件开发和设计进行了有益的结合和补充,面向方面作为面向对象的补充,进一步将系统中的核心关注与横切关注进一步分离,解决面向对象的开发模式中所存在的一些缺陷和不足,实现代码的简洁,充分体现了“高层分离,低层耦合”的原则。


参考文献:
[1] 何丽莉,金淳兆,冯铁,张家晨. 关注分离问题研究综述[J]计算机科学, 2005,(02) .
[2]金望正, 李莹, 徐江浩, 李赣生. 面向方面编程技术研究[J]. 计算机应用与软件, 2005,(08)
[3]牛文峰. 面向方面编程的研究[J]. 电脑知识与技术, 2008,(24)
 

 

查看相关论文专题
加入收藏  打印本文
上一篇论文:论行业应用软件系统的开发规划
下一篇论文:某发射机构测试系统软件设计
科技论文分类
科技小论文 数学建模论文
数学论文 节能减排论文
数学小论文 低碳生活论文
物理论文 建筑工程论文
网站设计论文 农业论文
图书情报 环境保护论文
计算机论文 化学论文
机电一体化论文 生物论文
网络安全论文 机械论文
水利论文 地质论文
交通论文
相关计算机论文
最新计算机论文
读者推荐的计算机论文