没有合适的资源?快使用搜索试试~ 我知道了~
©2013 Xie Gang et al. Published by B.V.信息工程研究院负责评选和同行评议可在www.sciencedirect.comwww.sciencedirect.com上在线获取ScienceDirectIERI Procedia 4(2013)323 - 3302013年电子工程与计算机科学点割在体J@中的语义谢刚a,b,杨波c,张明义d,e *a贵州大学计算机科学与信息学院,贵阳550001 b贵州师范大学数学与计算机科学学院,贵阳550001 c贵阳学院物理与电子信息科学系,贵阳550001 d重庆文理学院,重庆400715贵州省科学院,贵阳550001摘要近年来,一些研究者为面向方面语言定义了许多形式语义。然而,只有几篇论文描述了切入点管道的语义。不幸的是,这些语义是不完整的,独立于软件工程和不容易被理解的软件设计人员和开发人员。本文提出了一种更简单、更完整的源代码级形式语义,并给出了描述语义的函数的一些性质,以支持增量式软件设计过程。我们的语义也可以处理十七种poincuts。© 2013作者。由Elsevier B. V.在CC BY-NC-ND许可下开放获取。信息工程研究院负责评选和同行评议关键词语义学,体,体定向。本工作是贵州省科技厅资助项目的一部分。国家自然科学基金项目(项目编号:61262029* 通讯作者。联系电话:159 -8512-3377 - 2019 - 05 - 18电子邮件地址:zhangmingyi045@yahoo.com.cn(张明义)。2212-6678 © 2013作者由Elsevier B. V.在CC BY-NC-ND许可下开放获取。信息工程研究所负责的选择和同行评审doi:10.1016/j.ieri.2013.11.046324Gang Xie等/ IERI Procedia 4(2013)3231. 介绍G. Kiczales等人[1]开发了面向对象编程(AOP)。AOP可以对软件的横切关注点进行建模。它一直在软件工程和语言社区以及许多其他领域引起很大的兴趣。与此同时,各种各样的AOP语言也相继出现,如ANOJ [2]、ANOC ++[3]等,其中ANOJ是最流行的一种。显然,定义描述ANOSJ的语义很重要。它不仅是程序员表达需求的基础,而且对编译器也有很大的帮助。目前,一些研究者已经为面向方面语言定义了许多形式化模型[4-11]。然而,只有几篇论文描述了切入点管道的语义[4,9,10,11]。Ohad Barzilay等人[10]只研究了在ANOSJ中调用和执行poincut的语义。Nadia Belblidia .et al[11]提出了在AjaxJ后端编译器中静态poincut管道过程的语义。Wand等人[4]给出了处理通知和动态连接点的指称语义。在语义学上,他们只处理了十一种类型的标点符号。Avgustinovand[9]将静态切入点的语义定义为一组重写规则,从ANOSJ到Datasheet,一种类似于prolog的语言。这些语义是不完整的,独立于软件工程,不容易被软件设计人员和开发人员理解。因此,它们不能用于软件开发。为了给软件开发提供指导,需要一个更简单、更完整的源代码级形式语义。在本文中,我们提出了这样的语义,并给出了一些性质的功能,描述我们的语义,以支持增量式软件设计过程。我们的语义学可以处理17种poincuts。本文的其余部分组织如下:第2节给出了ANOJ的语法。第3节定义语义。第4节讨论相关工作。最后,在第5节中报告了未来的工作和一些结论。2. 一种面向对象的语言该语言类似于aspectJ,我们使用BNF定义了它的语法。语法如图1所示。它支持大多数基本的面向方面的特性,包括方面、建议、切入点、连接点和。在图1中,x和y是变量,而终端T是一个类型名称,如int和Boolean,并表示变量x在声明时的类型,由detype(x)表示。终端a是属性的名称,m是方法的名称,b是值为布尔值的表达式,cn是原始类型常量,f是对原始数据类型的操作。出现在一对方括号中的任何文本都是可选的。加下划线的文本v表示元素v1、v2、. vk.在Apache J中,程序prog由一个类声明序列cdecls,一个方面声明序列adecls和一个main方法Main组成。一个类C是用可见性注释(public、private、protected)、它的属性和方法声明的,并且可以选择作为另一个类D的直接子类。关于更多的细节,我们请读者参考[12]。一个方面A是用一个可见性注释、它的属性和方法、它的切入点和建议声明的,并且可选地作为另一个类或方面B的直接子类或子方面。方法声明mdef,属性声明adef和命令c在[12]中解释。一个切入点pc是用形式参数T y和它的pcd声明的。pcd是切入点指示符的原语。ANOJ定义了一些基本的切入点指示符。例如,pcd,call(MethodPattern),用于挑选其签名与MethodPattern相关的每个方法调用连接点。其他PCD在[1]中解释。用户可以通过组合基本切入点来定义命名或匿名切入点指示符Gang Xie等/ IERI Procedia 4(2013)323325代号根据空间的限制,将字符串运算符(“*"和“..”)和子类型模式(advice声明addef包括advice的类型(before,after,around),它决定了它如何与它所定义的连接点交互,一个与切入点pc相同的形式参数列表,一个已经声明的切入点pc和一个advice body(c),它是一个命令指定。程序类声明类声明属性定义可见性方法定义命令表达方面声明prog::mcdecls; adecls;Main cdels::mcdel |cdel;cdeclscdecl::扩展class C[extendsD]{adef;mdec}adef::扩展可见Tvisible::防病毒保护|公共|privatemdec::String((T y);(T z)*){c}c::var T y[e]|结束Y |e.me(e,el)|c; ccc |c |B * C |skip|电子邮件:C.new|el:zhe::zhx |El |C(e)|L |f(e)el::blog|莱阿|自我联系我们|nulladecls::adecl|去甲肾上腺素方面说明adecl::pcdef::aspect A [extends B]{adef; mdef;pcdef;addef}切入点pc(T y):pcd原始切入点指示符pcd::call(MethodPattern)|执行(MethodPattern)| get(FieldPattern)|set(FieldPattern)|call(构造器模式)| 执行(构造器模式)|初始化(构造器模式)| preinitialization(构造器模式)|| 内部代码(MethodPattern)|代码内(构造器模式)|这个(T)|这个(x)|目标(T)|目标(x)|| PCD&&|PCD||!|! PCD| cflow(pcd)|cflowbelow(pcd)MethodPattern::cflowTC. m(T)构造器模式 C.new(T)FieldPatternC.C.一通知声明addef::插件advicetype((T y)):pc(y){c}advicetype::安装之前|后|周围图1.aspectJ的示例326Gang Xie等/ IERI Procedia 4(2013)3233. 语义3.1. 连接点,尖头众所周知,连接点、点割和建议是重要的构造。所以我们需要为它们定义一些数学结构。定义如下。定义1.连接点jop是一个结构,其中: jpt{fpcall,pexecution,fset,fget,init,fpreinit,aexecution,pwithin,pwithincode} o(selfU),其中self表示当前活动对象[12],而表示到目前为止创建的对象集。 idnumb(OPUATTRU {new}),其中OP表示程序中的方法名称集合,ATTR是程序中所有属性名称的集合,new表示程序中的构造函数。 vs. returntypee((UCNAMEE)*U{),其中表示在主要类型中构建的设置,CNAME表示在程序中声明的类的名称集合,并且该值表示类型为void。举例来说表示命令a:=new C(2)是方法调用构造函数连接点。同时,我们使用变量JoinPoint表示连接点的集合,JoinPointSeq表示连接点的序列。JoinPointSeq定义如下:定义2. 连接点JoinPointSeq的序列是满足以下条件的n元组jop1,jop2, n ≠ 0,如果n=0,我们将其记为 JoinPoint的最新动态 如果ij,则jopi在jopj之前到达 head(JoinPointSeq)=jop1 tail(JoinPointSeq)=jop2定义3. 切入点p是结构A,pc,PVT,PV,pccd>,其中: ASNAME,其中ASNAME表示程序中声明的方面名称集 pc的PNAME,其中PNAME表示程序中声明的切入点名称的集合。 PVT函数((UCNAME)*U{\displaystyle U {\mathbb {}),其中该函数表示的点对于大多数参数都不存在。 PVVNAME*U{},其中VNAME表示在对象中声明的各种名称的集合,并且对象表示切入点没有形式参数。 pcdPCD,其中PCD是所有pcd的集合。例如表示(切入点pc():call(C.m()在方面A中声明同时,定义变量Pointcu来表示切入点的集合。定义4[12]。假设U和V是类。 VsuU当且仅当V是U的直超类或V = U。3.2. pcd的语义由于APCBJ必须首先完成切入点匹配过程,以便将通知编织到基本代码中,因此需要定义pcd的语义来表示切入点管道化过程。语义由函数pipei定义5.设pipei为从PCD和{JoinPointSeq}到{0,1}的函数,其中:Gang Xie等/ IERI Procedia 4(2013)323327返回式如果是jop的话,jptjupcalljupdtype(jop.(o)苏丙N(mop(N)Cpipei(call(T C. m(T)),jop)诺乔普伊代姆jop. vs)0.000否则我是泰乔普。返回类型(T)如果是jop的话,jpt执行类型(jop.(o)苏丙pipei(execution(T C. m(T)),jop)op(C)jop. id_type(jop.vs)阿苏T0.000否则如果是jop的话,jptjumfgetjumpertype(jop.(o)苏·C乔普。idpipei(get(T C. a),jop)类型(jop.id)TBT否则如果是jop的话,jptfsettype(jop.(o)苏·C乔普。idpipei(set(T C. a),jop)类型(jop.id)TBT否则如果是jop的话,jpt有限类型(jop.(o)苏丙pipei(初始化(C. new(T)),新的) jop。idnewidtype(jop.vs)阿苏T否则如果是jop的话,jpt初始化类型(jop.(o)苏丙pipei(preinitialization(C. new(T)),新的) jop。id_new_idtype(jop. vs)阿苏T如果(jop. 日本石油公司否则完成任务。jpt执行jop。日本石油公司 fgetpipei(target(C),pipei(targ et(C),pipeijopjop. 日本石油公司否则fset)jumptype(jop. (o)苏丙如果(jop. 日本石油公司完成任务。jpt执行jop。日本石油公司 fgetpipei(target(id),jopjop. 日本石油公司否则fset)type(jop.(o)苏dtype(id)pipei(this(C),1jop)如果(jop.日本石油公司完成任务。jptjumpexecution)jumptype(jop. (o)苏丙0.00否则pipei(this(id),1jop)如果(jop.日本石油公司完成任务。jptjumpexecution)jumptype(jop.(o)苏dtype(id)0.00否则苏328Gang Xie等/ IERI Procedia 4(2013)323如果jopbodies(m)jop. jpt手机pipei(withincode(T C. m(T)),njopn)njopn.jptjapanjapan.jptfget)否则body(m)是方法m的body命令[12]。得双曲余切值.如果 jopbodies(new)jop. jpt手机你好idnew)jop. 日本石油公司你好jptjumfgetjumper(jop.jpt执行管道(代码内(T C. new(T)),jop)jop. idnew)jop. 日本石油公司你好jptfpreinit)否则pipei(cflow(pcd),)pipei(cflow(pccd),JoinPointSeq)pipei(pccd,head(JoinPointSeq))pipei(pccd,tail(JoinPointSeq))pipei(pccd1&& pccd2,jop)pipei(pccd1,jop)pipei(pccd2,jop)pipei(pccd1||pccd2,jop)pipei(pccd1,jop)pipei(pccd2,jop)pipei(!pccd,pccd jop)日本pipei(pccd,pccdjop)函数pipei具有以下属性。属性1(交换性)pipei(pccd1pccd2,pjop)pipei(pccd2pccd1,pjcppipei(pccd1||pccd2,pccd2,pccd2||pccd1,2000年)证明:pipei(pccd1pccd2,pjop)pipei(pccd1,pjop)pipei(pccd2,pjop)(pccd2,pcjop)(pccd1,pcjcp)(pccd2,pccd1,pcjop)同样地, pipei(pccd1||pccd2,pccd2,pccd2||pccd1,2000年)由于篇幅所限,以下性质的证明将省略。性质2(结合性)pipei((pccd1pccd2)pccd3,pjop)pipei((pccd1(pccd2pccd3),pjop)和pipei((pccd1||(pccd2)||pcd3,pcd1,pcd2,pcd3,pcd3,pcd||(pccd2||pccd3),属性3(分布性)pipei((pccd1||(pccd2&&pccd3),pajop)pajpei((pccd1||(pccd2)& &(pccd1||pccd3)、pccd2)和pipei((pccd&&1||pccd3),pepei((pccd1&&pccd2)||(pccd1&&pccd3),性质4(幂等)pipei(pccd||pccd,pccd,pccd,pccd,pccd中国(pccd,中国)&pccd,pccdjp)Gang Xie等/ IERI Procedia 4(2013)323329物业5(德摩根)pipei(!(pccd1pccd2),jop)pipei(! PCCD1||!pccd2,pjop)和pipei((!(pccd1||pccd2),pjoppipei(!pccd1!pccd2,2000年)性质6(排中律)pipei(pccd||!pccd,,pccd)矛盾律(Law ofpipei(pccd!pccd,,pccd)房产6如果pipei(pccd1,jop)1,则pipei(pccd1pccd2,jop)pipei(pccd2,jop)房产7如果 pipei(pccd1,jop)= 0,则 pipei(pccd1||pccd2,jop)第六章.对于任何pcd,如果pipei(pccd≠pccd 1,)= pipei(pccd,)或pipei(pccd||pccd1,)=pipei(pccd,)=1,则pccd1是(pipei(PCD ×{JoinPointSeq})的单位元素&&,||,!).举例来说upcd是{pccd}的元素||!PCCD|pccdPCD},也是(pipei(PCD ×{JoinPointSeq})的单位元素&&,||,!)第六章.对于任何pcd,如果pipei(pcd1,)= pipei(pcd1,)或pipei(pcd1||pccd2,)=pipei(pccd1,),则pccd1是(pipei(PCD ×{JoinPointSeq})&&,||)。举例来说zpcd是{pccd}的一个元素!PCCD|pccdPCD}并且也是(pipei(PCD ×{JoinPointSeq})&&,||,!)4. 相关工作与我们的工作最相关的工作在[4,9,11]中定义它们定义了一些poincut的语义其他的框架提供了AOP范例的形式化,如下所示:Wand等人[4]给出了一种处理通知和动态连接点的指称语义。语义是一个基于事件的模型。Lämmel[5]通过扩展面向对象语言提供了一种操作语义,定义了方法调用拦截,语义是一个大步骤。Tucker等人[6]使用高阶语言Scheme定义了建议和poincut的形式模型。Jagadeesan等人。[7]已经提出了一个语义的子集的AJ。但是由于模型的复杂性,使得系统的性质证明和模型的理解都比较困难。Walker等人。[8]定义了一个使用lambda演算更简单的语义。语义需要将ANOSJ中的源代码级构造转换为演算。因此,对于程序员来说,这是不容易理解的。330Gang Xie等/ IERI Procedia 4(2013)323为了支持软件的增量式设计过程,本文提出了一种简单而完整的源代码级形式语义,并给出了语义函数的一些性质。我们的语义也可以处理十七种poincuts。5. 结论和今后的工作本 文 描 述 了 以 下 切 入 点 的 语 义 : call, execution , get , set , initialization , preinitialization ,withincode,this,target,cflow,cflowbelow及其组合。我们认为,这项工作是开始定义一个正式的语义的ANOJ。我们正在扩展本文中描述的语义,以形式化其他切入点,如within、args等确认我们要感谢裁判的彻底审查。详细和建设性的意见帮助我们使文件达到目前的形式。引用[1] Kiczales G,Lamping J,Mendhekar A,et al. ECOOP'97-面向对象编程,1997; 220-242。[2] Kiczales G,Hilsdale E,Hugunin J,et al. An overview of Aesthetic J.计算机科学讲义,2001;2072:327-355.[3] Spinczyk O,Gal A,Schröder-Preikschat W. Apache C++:C++编程语言的面向方面扩展。第四十届太平洋工具国际会议:互联网、移动和嵌入式应用对象。澳大利亚计算机协会,2002; 53-60.[4] M. Wand,G. Kiczales和C.杜琴面向方面编程中通知和动态连接点的语义。ACM Transactions onProgramming Languages and Systems,2004; 26(5):890-910.[5] 莱梅尔河方法调用拦截的语义方法。第一届面向软件开发国际会议论文集。ACM,2002;41-55.[6] 放大图片作者:Tucker D B,Krishnamurthi S.高级语言中的切入点和建议。面向对象软件开发:第二届面向对象软件开发国际会议论文集,2003; 17(21):158-167.[7] Jagadeesan R,Jeffrey A,Riely J. A calculus of untyped aspect-oriented programs.面向对象程序设计,2003[8] Walker D,Zdancewic S,Ligatti J. A theory of aspects. ACM SIGPLAN通知。ACM,2003; 38(9):127- 139.[9] Avgustinov P,Hajiyev E,Ongkingco N,et al. ACM SIGPLAN通知。ACM,2007; 42(1):11-23.[10] Barzilay O,Feldman Y A,Tyszberowicz S,et al.方面语言基础(FOAL),2004; 19-24。[11] Debbabi N B M.一个在AECHAN J中的切入式管道加工的语义。http://users.encs.concordia.ca/~debbabi/pdf/AaspectJ.pdf中切入点管道化过程的语义[12] 何继峰,李晓山,刘志明,rCOS:一种对象系统的精化演算理论计算机科学,2006;365(1):109-142.
下载后可阅读完整内容,剩余1页未读,立即下载
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- VMP技术解析:Handle块优化与壳模板初始化
- C++ Primer 第四版更新:现代编程风格与标准库
- 计算机系统基础实验:缓冲区溢出攻击(Lab3)
- 中国结算网上业务平台:证券登记操作详解与常见问题
- FPGA驱动的五子棋博弈系统:加速与创新娱乐体验
- 多旋翼飞行器定点位置控制器设计实验
- 基于流量预测与潮汐效应的动态载频优化策略
- SQL练习:查询分析与高级操作
- 海底数据中心散热优化:从MATLAB到动态模拟
- 移动应用作业:MyDiaryBook - Google Material Design 日记APP
- Linux提权技术详解:从内核漏洞到Sudo配置错误
- 93分钟快速入门 LaTeX:从入门到实践
- 5G测试新挑战与罗德与施瓦茨解决方案
- EAS系统性能优化与故障诊断指南
- Java并发编程:JUC核心概念解析与应用
- 数据结构实验报告:基于不同存储结构的线性表和树实现
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)