




已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向侧面的程序设计Aspect Oriented Programming什么是面向侧面程序设计面向侧面的程序设计(aspect-oriented programming,AOP,又称作面向方面的程序设计、观点导向编程)是计算机科学中的一个术语,指一种程序设计范型。该范型以一种称为侧面(aspect,又译作方面)的语言构造为基础 ,侧面是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。面向侧面程序设计起源Xerox(施乐)公司PARC研究中心在1997年的欧洲面向对象编程大会(ECOOP97)上首次提出Aspect-oriented programming(AOP)。自2002年起,每年分别在欧洲和美国轮流召开专门的面向侧面软件开发(AOSD)国际会议。与会者包括美国、加拿大、荷兰、英国、法国、丹麦、日本、以色列等。我国一些学校也对AOP给以关注并开展了一些研究工作。从AOP概念提出经过了近十年的时间,这种技术现在已经开始被工业界采用。 AOP产生的背景计算机软件设计的一个重要原则,就是要清晰分离各种关注点(separation of concerns),然后分而治之,各个击破,最后形成统一的解决方案例如:信用卡处理系统核心关注点是处理付款;系统级关注点包括日志、事务、认证、安全和性能等等。 软件系统中,某个行为,例如操作日志的记录,存在于软件的各个部分中,这个行为可以看作是横向存在于软件之中,他所关注的是软件的各个部分的一些共有的行为。在很多情况下,这种行为不属于业务逻辑的一部分。这种操作并不是业务逻辑调用的必须部分,但是,我们却往往不得在代码中显式进行调用,并承担由此带来的后果。在目前的技术框架下,通常系统级关注点在逻辑上相互之间彼此正交(相互独立),同时在实现上趋向于和若干核心模块交织。 例如:信用卡管理系统的每个核心业务关注点都和安全、日志等系统关注点相联系。纵切关注点 软件模块 软件模块 软件模块 软件模块 业务逻辑 业务逻辑 业务逻辑 业务逻辑 操作日志 横切关注点安全检测事务处理现有软件技术的不足目前的实现技术只提供了一维方法学实现系统的关注点,该单一维度一般是核心需求和关注点的模块化实现,其他类型的需求也被迫和该主导维度一致。问题空间是n维的,而解空间是一维的。这种失配必然导致需求和实现之间的失配。缠结现象是现有软件系统中许多不必要的复杂性的核心。源程序就会变成一些为不同关注目的而编制的,指令的缠结混乱物 它增加了功能构件之间的依赖性,分散了构件原来假定要做的事情,提供了许多程序设计出错的机会,使得一些功能构件难以复用,源代码难以开发、理解和发展。某一应用的领域专家,不太可能对分布、认证、访问控制、同步、加密、冗余等问题的复杂实现机制很熟悉,所以就不能保证他们在程序中进行正确的调用。开发人员很难正确预见到未来对程序的新需求相关概念关注点(concern):是指一个特定的目标、概念或者兴趣域。关注点对软件工程有意义的小的、可管理的、可描述的软件组成部分,一个关注点通常只同一个特定概念或目标相关联。从技术的角度,软件系统分别包括核心级和系统级的关注点。核心级关注点(业务)多数情况下可以被很好地分解,并通过编程语言模块化实现(子模块或软构件)。核心级关注点是系统要完成的业务功能。系统级关注点(横向关注点),使用当前的程序设计方法导致在许多构件中要重复包含(扩散)这些代码。关注点分离(separation of concerns,SOC):标识、封装和操纵只与特定概念、目标相关联的软件组成部分的能力,即标识、封装和操纵关注点的能力。方法(method):用来描述、设计、实现一个给定关注点的软件构造单位。系统级关注点是完成核心级关注点所必须的配套设施,这些配套设施通常被认为是整个系统的系统特性,或者是业务功能的功能约束。横切(crosscut):两个关注点相互横切,如果实现它们的方法存在交集。横切关注点(crosscutting concerns):在传统的程序设计语言中,除了主关注点可以被支配性分解方式捕捉以外,还有许多没有被支配性分解方式捕捉到的关注点,这些关注点的实现会弥散在整个软件内部,这时这些关注点同主关注点是横切的。支配性分解(dominant decomposition):将软件分解成模块的主要方式。传统的程序设计语言是以一种线性的文本来描述软件的,只采用一种方式(比如:类)将软件分解成模块;这导致某些关注点比较好的被捕捉,容易进一步组合、扩展;但还有一些关注点没有被捕捉,弥散在整个软件内部。支配性分解一般是按主关注点进行模块分解的。侧面(aspect):在支配性分解的基础上,提供的一种辅助的模块化机制,这种新的模块化机制可以捕捉横切关注点。从主关注点中分离出横切关注点是面向侧面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题代码的调用,业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在在整个应用程序中的变动就可以很好的管理起来。AOP的基本思想通过分别描述系统的不同关注点及其关系,以一种松耦合的方式实现单个关注点,然后依靠AOP环境的支撑机制,将这些关注点组织或编排成最终的可运行程序。j 普通关注点可以使用传统的结构化方法和面向对象方法体统的机制。k 系统关注点使用Aspect机制。AOP程序设计的一般步骤一、对需求规约进行Aspect分解。确定哪些功能是组件必须实现的,即提取出核心关注点。哪些功能可以以aspect的形式动态加入到系统组件中去,即提取出系统级的横切关注点。二、对标识出的Aspect分别通过程序机制实现。j 构造系统的组件。利用组件语言实现系统的组件。对于OOP语言,这些组件可以是类;对于过程化程序设计语言,这些组件可以是各种函数和API。k 构造系统的aspect。利用一种或多种aspect语言实现aspect。aspect语言必须提供声明aspect的机制。aspect如何声明,连接点如何定义,aspect代码如何定义,aspect的参数化程度等三、用aspect编织器将所有的单元编排重组在一起,形成最终的可运行系统。j 为组件语言和aspect语言构造相应的语法树;依据aspect中的连接点定义对语法树进行联结;在连接的语法树上生成中间文件或目标代码。k aspect语言必须提供将aspect代码和基础代码组合编排(weaving)在一起的机制。定义编排语言和规则。解决aspect之间潜在的冲突。为组装和执行建立外部约束。laspect语言必须提供生成可运行系统的实现机制。系统的组合是在编译时静态组装还是运行时动态进行。对程序单元分别进行编译的模块化编译机制。对组装结果的验证机制等。AOP与OOP比较OOP是AOP的技术基础,AOP是对OOP的继承和发展l 可扩展性:j 指软件系统在需求更改时程序的易更改能力。k OOP主要通过提供继承和重载机制来提高软件的可扩展性。l AOP通过扩展Aspect或增加Aspect,系统相关的各个部分都随之产生变化。l 可重用性:j 指某个应用系统中的元素被应用到其他应用系统的能力。k OOP以类机制作为一种抽象的数据类型,提供了比过程化更好的重用性。OOP的重用性对非特定于系统的功能模块有很好的支持,如堆栈的操作和窗口机制的实现。对于不能封装成类的元素,如异常处理等,很难实现重用。lAOP使不能封装成类的元素的重用成为可能。 l 易理解性和易维护性代码缠结问题的存在,使OOP技术在易理解性和易维护性方面都难有很大的提高。对于AOP,对一个Aspect修改可以通过联结器影响到系统相关的各个部分,从而大大提高系统的易维护性。Aspect的实现和传统开发方法中模块的实现不同j Aspect的开发彼此独立,是一种松耦合关系。k 主代码的开发者甚至可能没有意识到aspect的存在。只是在最后系统组装时,才将各aspect代码和主代码编排融合在一起。主代码和Aspect之间采用“隐式调用”。某一应用的领域专家,不太可能对分布、认证、访问控制、同步、加密、冗余等问题的复杂实现机制很熟悉,所以就不能保证他们在程序中进行正确的调用。开发人员很难正确预见到未来对程序的新需求语言实现AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.AspectJ(也就是AOP)的动机是发现那些使用传统的编程方法无法很好处理的问题。考虑一个要在某些应用中实施安全策略的问题。安全性是贯穿于系统所有模块间的问题,每个模块都需要应用安全机制才能保证整个系统的安全性,很明显这里的安全策略的实施问题就是一个横切关注点,使用传统的编程解决此问题非常的困难而且容易产生差错,这就正是AOP发挥作用的时候了。面向侧面编程的出现正好给处于黑暗中的我们带来了光明,它针对于这些横切关注点进行处理,就好像面向对象编程处理一般的关注点一样。而作为AOP的具体实现之一的AspectJ,它向Java中加入了连接点(Join Point)这个新概念,其实它也只是现存的一个Java概念的名称而已。它向Java语言中加入少许新结构:切点(pointcut)、通知(Advice)、类型间声明(Inter-type declaration)和方面(Aspect)。切点和通知动态地影响程序流程,类型间声明则是静态的影响程序的类等级结构,而侧面则是对所有这些新结构的封装。总结AOP起源于程序设计中“横切”引发的“代码散布”和“代码交织”问题。在目前的程序设计技术下,程序中的横切无法避免,其实现代码相互纠缠在一起,是软件复杂度的来源之一。AOP就是要能分离出那些隐含的、相互交织纠缠的系统关注点,并使之明确。使用AOP为程序员提供的新的模块化武器,横切的代码就可以局部化,程序的结构很明白,代码也常常很简短。AOP的概念也就是面向侧面的软件开发(AOSD)将会使我们可以完美的继承已经存在的软件,在系统的整个生命周期中,可以不断的进行开发迭代和不断的发布更新版本。 我们今天叫做面向侧面的技术将把软件生命周期成本降低至少20。它与“子程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 复合合成纤维生产建设项目招商引资报告
- 甲乙丙三方国有企业股权转让及员工持股计划协议
- 物业管理权移交与社区公共设施维修服务合同
- 离婚协议中子女户口迁移及监护权共享协议
- 珠海住房公积金贷款违约责任及合同赔偿细则
- 离婚协议执行受阻起诉范本与维权策略分析
- 汽车美容店租赁合同(含行业规范与政策支持)
- 医药研发机构科研人员聘用与成果转化合同
- 活化酯生产线建设项目规划设计方案
- 体育中心改建项目商业计划书
- 仓库盘点盈亏分析报告
- 小学音乐人音版三年级上册维也纳的音乐钟教案
- DB36-T 2098-2024 电动汽车充电站防雷技术规范
- 向上级招反诈技术人员的申请
- 指南解读肾癌治疗方案
- 《电气基础知识培训》课件
- 职业技术学院《财务大数据分析》课程标准
- 2024公安机关人民警察高级执法资格考试题(解析版)
- 放射科诊断报告改进措施
- 医疗健康人工智能辅助诊疗与护理技术培训
- 《工程建设标准强制性条文电力工程部分2023年版》
评论
0/150
提交评论