找回密码
 欢迎注册
搜索
热搜: 活动 交友 discuz
查看: 1665|回复: 0

[介绍]再次关注面向方面编程-----AOP

[复制链接]
发表于 2003-12-25 20:07:39 | 显示全部楼层 |阅读模式
[这个贴子最后由dreamaster在 2003/12/25 08:33pm 第 4 次编辑]

Aspect Orient Programming ,简称 AOP ,即面向方面编程,再次成为程序员们关注的焦点,《Dr.Dobb\'s 软件研发》杂志第四辑对AOP做了专题介绍。
何为AOP呢?就我个人理解,简单说就是将一些散布于各处(类)的重复的功能,比如安全性、身份验证、数据服务等(术语横切),集中定义,原来的类中则不必重复编写相似的编码,在程序编译后,由编译器将各横切业务嵌入到预先定义的各个“连接点”。
这听起来好像很难理解,但看过一段具体代码后就真相大白了,目前支持AOP的语言比较少,AspectJ是其中一种,它是对Java语言的扩充,Jboss等一批优秀的系统都已经支持AspectJ,以下代码来自《Dr.Dobb\'s 软件研发》,限于篇幅只截取了一部分且作了修改,语言环境AspectJ:

class A
{
   int a(int x)
     {
        System.out.println("Call method \'A.a()\'")"
     }
}
以上是一个普通的java类,下面请看方面代码Showcase.java:
public aspect Showcase   //声明Showcase 是一个方面(aspect)
{
   pointcut int_A_a_int():  call(int A.a(int))  //声明一个切入点,其入口为类A的方法 a()
   before():int_A_a_int()          //在切入点int_A_a_int()之前会执行的语句
    {
       System.out.println("Before:Call A.a()")"
    }
   after():int_A_a_int()          //在切入点int_A_a_int()之后会执行的语句
     {
       System.out.println("After:Call A.a()")
     }
}
以上代码中:关键字aspect,before(),pointcut,after()都是aspectJ对java的扩展
以上代码在运行时会产生如下输出:

Before:Call A.a()
Call method \'A.a()\'
After:Call A.a()
通过以上代码大家可以略微了解一点AOP的特性了吧?
AOP并不是一种新的东西,它只是OOP的有益补充,我们仍然使用OOP来完成我们的大部分设计,AOP只关注其中15%的内容。
AOP也不是刚刚出现的概念、方法,追朔其历史至少在7、8年前就已经得到应用了,只不过当时不叫AOP。微软早在设计MTS,com+等技术的时候就大量使用了AOP的概念,当然,那时候也还没有现在这个正式名称-----AOP(Aspect Orient Programming)
当然,AOP目前还没有形成完整强大的体系结构,也仅有可陈的几种开发工具、语言支持这一概念。但各大软件巨头包括微软对此已技术的关注,使我们有理由相信:AOP必将成为继面向对象技术产生以来最值得等待的一次革新。
最后,希望论坛中热衷软件设计的朋友们一起来关注这一“新兴”事物,相信它不久就会进入我们所熟悉的开发工具、语言中的。。。
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

快速回复 返回顶部 返回列表