面向对象的编程中常用的概念是:继承、封装、多态。在面向方面的编程中常使用的概念是:advices/interceptors, introductions, metadata, and pointcuts。

AOP 面向方面编程的介绍----基本概念(3)

面向方面的编程思路很简单。从面向过程、函数的编程到面向对象的编程到面向接口的编程到面向组件、模块编程的发展历史我们可以知道,编程方法学的演进是一步一步的扩大了编程考虑的“边界”。到目前为止我们的编程世界里的宇宙边界是“类、接口,或者组件”,在这个边界里,我们认为,一个类实现一个接口,那就不能动态的实现另一个接口,已有类的行为在编译以前就基本固定,要么是类内部定义的方法,要么是要么是继承和实现接口继承过来的方法。但是实际的编程工作中我们碰到了“跨边界的情况”,需要多个类,接口,组件合作才能完成的工作,比如:多线程并发访问,程序流集中控制,序列化和程序状态保持,以及需要多个“类、接口、组件边界”共同参于才能完成的工作。为了更好的处理多个边界共同完成同一方面的工作,面向方面的编程出现了。这里的方面,我们可以指:为完成同一任务而需要多个类、接口、组件一起协作工作的综合。你可以认为方面其实就是一个更大的类,这个类主要由我们OOP中的类、接口组成,当然这些类和接口是如此的亲密,以至于他们行为(方法)可以相互转换。其实这没什么大不了的,接口的出现不是实现了动态的改变类的行为的吗?面向方面的编程只是做了一个延伸,把这个改变提升到了接口这个层次上。写到这里,我感到:耳朵清静了,但是世界还没有清静,因为到实际的运用这种思路编程,还需要很长的时间,和更多工具开发商的支持。

在我以后的文章中我想统一下面的概念:

1、inter-type declarations  边界内部类型声明:Inter-type 声明在AspectJ中有很多种形式,使用他来描述类之间的关系、类本身成员和结构信息。

2、join point 连接点:连接点是在程序流程中定义的一个点。

4、crosscutting concerns  :考虑边界交叉

5、Pointcuts 连接点集:程序运行中持有对多个连接点状态的集合。

5、advice 通知点行为:连接点集如同一个包括多个的“结构”,本身不具有行为,其行为靠通知点行为来实现。

以上的名词主要用于:AspectJ的介绍中。

Advices/Interceptors(消息传达/消息拦截)

一个“传达的消息”是一个被特定事件触发发的逻辑(代码)。这个“传达的消息”可以被插入到一个调用者和被调用者队列之间。可以说:传达消息是面向方面的编程的一个关键组成部份。

Introductions(成员推荐)

Introductions 是用来向已有的类增加方法和属性的一个方法。使用成员推荐你可以把一个现有类实现的接口“介绍”到另一个新的接口中。大家知道,接口的出现就是为了把定义和实现分开,现在使用面向方面的编程,可以做到动态改变既有类的接口,太不可思议了。在java编程中使用“成员推荐”你可以做到让一个java类实现多重继承。也就是说,使用“成员推荐”你可以在程序运行的时候来动态改变类的接口,实现不同的行为。就像孙悟空可以不断变换自己的行为,但是这个孙悟空必须有三个毫毛(被“成员推荐”)。看下面的例子:

Apple apple        = new Apple();

LoggingAPI logging = (LoggingAPI)apple;

Apple.setLoggingLevel(VERBOSE);

使用“成员推荐”:Apple 可以动态的拥有log的功能了。

Metadata(元数据)

元数据是用来描述类本身的一些附加信息和其描述类捆绑在一起,可以静态的或者再运行的时刻获得这些类的描述信息。例子参见我的另一片文章(使用反射机制实现动态工厂模式)。EJB中就使用了大量的Metadata。

Pointcuts

如果说:interceptors, introductions, and metadata 是面向方面编程的特点的话,那么 pointcuts are 就是连接他们在一起的“胶水”。 Pointcuts 是运行在AOP框架,比如:告诉框架如何确认消息传达、元数据是如何在类中定义的、那些类、接口被“成员推荐”了等等。

后面我们说说:Jboss 4.0中的AOP框架。

java面向方面编程_面向方面编程的介绍----基本概念相关推荐

  1. 面向表开发 面向服务开发_面向繁忙开发人员的计算机视觉

    面向表开发 面向服务开发 This article is part of a series introducing developers to Computer Vision. Check out o ...

  2. 函数式编程和面向对象式编程_比较函数式编程,命令式编程和面向对象的编程

    函数式编程和面向对象式编程 As Oracle Corporation has introduced some Functional constructs in Java SE 8, now-a-da ...

  3. java函数式编程_说说函数式编程的那些事

    今天这篇文章我们主要来聊聊函数式编程的思想. 函数式编程有用吗? 什么是函数式编程? 函数式编程的优点. 总所周知 JavaScript 是一种拥有很多共享状态的动态语言,慢慢的,代码就会积累足够的复 ...

  4. python最简单的图形编程_图形化编程、Python、Java、C++到底哪个适合你?

    近两年,学习编程的热潮一波接一波,编程语言也是五花八门.盒子姐姐找到了一份2019年编程语言热度排行榜,其中,Java.C语言和Python高居榜首. 有些小伙伴就要问啦,编程语言这么多,区别在哪里呢 ...

  5. 概率编程编程_概率编程语言的温和介绍

    概率编程编程 I recently started a new newsletter focus on AI education. TheSequence is a no-BS( meaning no ...

  6. libevent c++高并发网络编程_高并发编程学习(2)——线程通信详解

    前序文章 高并发编程学习(1)--并发基础 - https://www.wmyskxz.com/2019/11/26/gao-bing-fa-bian-cheng-xue-xi-1-bing-fa-j ...

  7. python编程狮的在线编程_‎「Python编程狮-零基础学Python」をApp Storeで

    Python编程狮是W3Cschool编程狮旗下专门为零基础Python编程爱好者打造的一款入门工具App,致力于帮助初学者入门,轻松迈入编程世界.学Python,从这里开始! [零基础也能学]初学者 ...

  8. 常州儿童学机器人编程_常州幼儿编程机器人

    常州幼儿编程机器人 来源:教育联展网    编辑:佚名    发布时间:2019-07-08 少儿编程的发展前景 18年4月28日,全球首部人工智能普教教材--<人工智能基础>(高中版)在 ...

  9. abb机器人半圆编程_机器人示教编程1——教你快速示教ABB机器人

    一.机器人安全操作守则 由于机器人系统复杂而且危险性大,在练习期间,对机器人进行任何操作都必须注意安全.无论什么时候进入机器人工作范围都可能导致严重的伤害,只有经过培训认证的人员才可以进入该区域. 以 ...

最新文章

  1. visual studio intergration
  2. c语言扫雷游戏代码_C语言游戏详解---扫雷游戏
  3. cocos2d menu菜单类
  4. vue从入门到精通之基础篇(二)组件
  5. 4列变成5列 datatable_云南美食界“5巨头”,谁才是NO.1?你家乡的那道菜也在列...
  6. java 中class相关的问题
  7. android layout 渲染,java – 渲染android.support.design.widget.CoordinatorLayout的问题
  8. 自己制作的ORMap框架终于完成的差不多了。
  9. Bitwise AND of Numbers Range
  10. bootstrap EF_Bootstrap优秀模板INSPINIA.2.9.2
  11. 深入解读5G关键技术
  12. reporting services报表部署错误:运行配置文件中指定的扩展时出现异常。 ---> 超过了最大请求长度。
  13. Android Remote Administrator Tool ——SpyNote 6.5 Released
  14. python猜随机数代码_猜随机数游戏Python
  15. linux 登陆 历史,linux记录每次登陆的历史命令
  16. 【读论文】Self-supervised feature adaption for infrared and visible image fusion
  17. Flume采集数据利器
  18. hdu 1205 吃糖果 抽屉原理
  19. iOS开发 ☞ emoji表情大全
  20. 阶乘末尾 0 的个数.c

热门文章

  1. 关于C/C++中函数参数传递的规则
  2. vue(el-button的五种类型,三种css格式)
  3. mysql配置文件结构_MariaDB/MySQL配置文件my.cnf解读
  4. 对代理商的评价怎么写_简历中的自我评价怎么写才能更吸引人?
  5. VS2017编译UE4.19.2报错
  6. Linux环境中Qt程序的手工发布
  7. VxWorks下几种定时延时方法的小结
  8. 【转】刨根究底字符编码之十——Unicode字符集的字符编码方式
  9. EasyUI学习总结(一)——EasyUI入门
  10. sharepoint当流程流转到某个节点对文档进行水印操作