已阅读5页,还剩56页未读, 继续免费阅读
(计算机应用技术专业论文)aop开发过程研究及应用.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 a o p 开发过程研究及应用 作者简介:幸俊,男,1 9 8 2 年7 月出生,2 0 0 4 年9 月师从于成都理工大学 洪志全教授,于2 0 0 7 年7 月获硕士学位。 摘要 当前,软件开发方法学中最为流行的无疑是面向对象方法。它能够有效地对 系统的业务关注进行模块化开发。但是,在应对系统中众多的横切关注时,面向 对象方法并没有很好地对其进行支持,而是直接将其代码与核心关注地代码混杂 在一起,导致了系统功能代码之间的纠结,加大了系统开发与维护的难度。 面向方面作为面向对象的补充,进一步将系统中的核心关注与横切关注进一 步分离。通过将其应用到实际系统中,可以提高代码的重用性,所丌发的系统更 加具有可扩展性。 本文首先分析介绍了面向对象方法,分析了它的优点及不足,引出了面向方 面编程。而后介绍了面向方面为软件开发方法带来的影响,对a o p 的思想与实 现机制做了详细介绍,并阐述了使用其进行软件开发的一般步骤,并对u m l 进 行了部分扩展,以支持系统开发前期面向方面的分析设计。最后使用扩展的 u m l ,将面向方面引入一个实际的系统开发过程,展示了面向方面开发的各项 优点。 关键词:面向方面编程;横切关注;软件开发方法 成都理工大学硕士学位论文 r e s e a r c ha n d a p p l i c a t i o no f a o p d e v e l o p m e n t a b s t r a c t c u r r e n t l y , t h em o s tp o p u l a rm e t h o do fs o f t w a r ed e v e l o p m e n ti so b j e c t - o r i e n t e d m e t h o d ,w h i c hc a r te f f e c t i v e l yw o r k si nm o d e l i n gb u s i n e s sc o d c e l t i s b u t ,o od o e s n o ts u p p o r tt h ec r o s s - c u tc o n c e r n si ns y s t e mv e r yw e l l ,i tp u t st h ec o d e so fc r o s s c u t c o n c e m sa n dt h ec o d e so fc o r ec o n c e r n st o g e t h e r , w h i c hr e s u l t si nt h et a n g l eo f d i f f e r e n tf u n c t i o n si ns y s t e m ,a n de n l a r g e st h ed i f f i c u l t yo fs y s t e md e v e l o p m e n ta n d m a i n t e n a n c e a sar e i n f o r c eo fo o ,a o ( a s p e c t o r i e n t e d ) s e p a r a t et h ec r o s s c u tc o n c e r n s f r o mt h ec o r ec o n c e r n si ns y s t e m s t h es y s t e m sd e v e l o p e db ya oh a v eb e t t e r e x t e n s i b i l i t ya n dm a i n t a i n a b i l i t y t h i sp a p e rf i r s ta n a l y s e st h ea d v a n t a g ea n dd i s a d v a n t a g eo f0 0 ,e l i c i t st h e c o n c e p to f a o p ( a s p e c t - o r i e n t e dp r o g r a m m i n g ) t h e ni n t r o d u c e st h ei n f l u e n c ea o p b r i n g s ,t h er e a l i z a t i o nm e c h a n i s mo fa o p , a n dt h ec o m i t l o nd e v e l o p m e n ts t e p so f a o rn e x t ,p a r t l ye x t e n d su m lt os u i tt h ea n a l y s i sa n dd e s i g no fa o f i n a l l y , w i t h t h ee x t e n d e du m l ,s h o w sa ne n t i r ed e v e l o p m e n tp r o c e d u r eo far e a ls y s t e m ,a n d c o n c l u d e st h ea d v a n t a g eo f a l la s p e c t sb yu s i n g a o k e y w o r d s :a s p e c t o r i e n t e dp r o g r a r m n i n g c r o s s - c u tc o n c e r n m e t h o do fs o f t w a r ed e v e l o p m e n t 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作及取得的 研究成果。据我所知,除了文中特别加以标注和致谢的地方外,论文中不包含其 他人已经发表或撰写过的研究成果,也不包含为获得盛壑堡王太堂或其他教 育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任何 贡献均已在论文中作了明确的说明并表示谢意。 学位论文作者导师签名:嘭移 学位论文作者签名:去友 1 旃年f 月? sf t 学位论文版权使用授权书 本学位论文作者完全了解盛壑堡王盍堂有关保留、使用学位论文的规定, 有权保留并向国家有关部门或机构送交论文的复印件和磁盘,允许论文被查阅和 借阅。本人授权盛壑堡兰盍堂可以将学位论文的全部或部分内容编入有关数 据库进行检索,可以采用影印、缩印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书) 学位论文作者签名:岳 k 弦d 7 年 r 月2 f日 第1 章引言 第1 章引言 1 1 面向对象方法的优点 在面向对象编程技术出现之前,面向过程编程是软件开发中的主流,也称为 结构化设计,这是一种以事件为核心的编程方法,以一个事件的具体流程为单位, 考虑它的实现办法。简单的说就是把一个问题分割为若干小问题,再对每个小问 题进行分解( 模块化) ,一层一层往下分解,直到所有问题都足够小、能够使用 函数解决为止,而后将所有的小问题组装起来,就解决了所有的问题。 从编码的角度来看,面向过程方法开发的系统是由函数及函数间的调用构造 起来的,解决问题的焦点集中于函数,而函数则关注如何根据规定条件完成指定 的任务。在这种系统结构当中,许多重要数据被置于全局数据区,这样可以被许 多函数所访问,同时每个函数拥有自己的局部数据。这种结构非常容易造成全局 数据被其他函数改动,程序的正确性不容易保证。 另外,用结构化方法开发的软件,其稳定性、可修改性和重用性都比较差, 这是因为结构化方法的本质是功能分解,围绕实现处理功能的“过程”来构造系 统的。但是用户需求的变化大部分是针对功能的,这种变化对于基于过程的设计 来说是灾难性的。用这种方法设计出来的系统结构常常是不稳定的,用户需求的 变化往往造成系统结构的较大变化,需要花费很大的代价才能实现这种变化。 针对面向过程编程的一些缺点,人们使用面向对象的思想对开发过程进行改 进,在面向对象开发中,对象是程序的基本元素,它将数据和操作紧密联系在一 起,保护数据不会被外界函数意外改变。面向对象开发方法对对象进行良好地建 模,以对象和对象之间地关系构建系统。通过对系统的分解、对象的划分,开发 者很容易将需求领域的各个“名词”映射为软件代码中的各个类,从而比较自然 地完成从需求到软件系统的转化。它达到了软件工程的三个主要目标:重用性、 灵活性、可扩展性。 以下是面向对象编程的一些具体优点: ( 1 1 数据抽象的概念可以在保持外部接口不变的情况下改变内部实现,从而 减少甚至避免对外界的干扰。 ( 2 ) 通过继承机制大幅减少冗余代码,而且方便地扩展现有代码,从而提高 编码效率,减少代码出错效率,降低软件维护地难度。 ( 3 1 结合面向对象地分析、设计,允许将问题域中的对象直接映射到程序中, 减少软件开发过程中中间环节的转换过程。 1 成都理工大学硕士学位论文 ( 4 ) 通过对对象的辨别、划分,可以将软件系统分割为较为独立的部分,在 一定程度上控制软件复杂度。 ( 5 ) 以对象为中心的设计可以帮助开发人员从静态属性和动态方法两个方 面把握问题,从而更好地实现系统。 ( 6 ) 通过对对象地聚合、联合,可以保证在封装与抽象的原则下实现对象结 构和功能上的扩充,实现对象功能由低级向高级的转变。 1 2 面向对象方法的不足 面向对象编程是软件开发方法学上的一大进步,极大地提高了软件生产率, 经过较长时间的发展,目前面向对象开发方法已经基本上取代了面向过程开发, 成为目前软件开发方法的主流,广泛并且成熟地应用于系统开发中,在编写复杂 程序以及源代码的可理解性方面,表现了强大的能力。 但是,面向对象编程也并非十全十美,它能够很好的解决系统中许多关注点 模块化的问题,并将细节问题封装在类中,但是系统中还有另一类的关注点,面 向对象编程并没有很好的解决。以下一段示意性代码,在使用传统的面向对象开 发方法的系统中非常常见: c l a s sb u s i n e s s a p u b l i cv o i db u s i n e s s a o p e r a t i o n 安全性检查 记录操作开始时间 f ”。 核心业务逻辑 记录操作完成时间 | | ) 可以将以上代码实现的功能划分为两类:首先需要关注的是系统中主要的核 心业务逻辑,例如一个生产管理系统的生产流程管理,一个库存管理系统中的仓 储功能及出库入库事务操作;除此之外,还存在一些全系统范围的共同关注点, 如同志记录、用户权限认证等横切关注,它们对于部分或全部核心关注来说是共 用的。 - 2 一 第1 章引言 当前流行的面向对象方法对于横切关注点的处理没有一个很好的解决方案, 最为常见的就是直接在核心关注的模块中直接编写本该属于横切关注的代码,这 样的处理方式毫无疑问会造成以下问题: ( 1 ) 代码混乱:软件系统中的模块可能要同时兼顾几个方面的需要。例如, 开发人员经常要同时考虑业务逻辑、性能、同步、日志和安全等问题, 兼顾各个方面的需要导致相应关注点的实现元素同时出现,引起代码混 乱。 ( 2 ) 代码分散:由于横切关注点本来就涉及多个模块,相关实现也就遍布在 这些模块中间。例如,在一个使用了数据库的系统里,性能和同步问题 会影响所有访问数据库的模块。 混乱和分散对于系统来说是致命的,它们会从多个方面影响系统的设计和开 发: ( 1 ) 可读性差:在同一个模块中,同时实现了几个关注点,降低了不同关注 点之间的独立性,使得关注点的需求与其实现之间的对应关系不明显。 ( 2 ) 效率低下:在同一模块中,同时实现几个关注点会使开发人员的注意力 分散,导致生产效率降低。 ( 3 ) 代码重用级别不高:由于一个模块实现多个关注点,因此其他需要类似 功能的系统不能马上使用该模块,重用级别差。 ( 4 ) 代码质量差:代码的混乱掩盖了代码中隐藏的问题,并且由于需要同时 处理多个关注点,应该特别注意的关注点得不到应有的关注。 ( 5 ) 难以维护和扩展:一个横切关注点可能在多个核心模块中实现,一旦某 项关注需要变动,便涉及到多个模块,给系统的维护带来很大的困难。 在这种情况下,出现了一种新的编程规范面向方面编程( a s p e c t o r i e n t e d p r o g r a m m i n g ,a o p ) ,用于解决软件系统中横切关注点的问题。 1 3 论文研究的目的、思路与结构 本文研究的主要目的是将面向方面的思想引入到实际的应用开发过程之中。 传统的对系统横切关注点的解决未能对其进行模块化,导致横切需求的实现代码 分散,不利于系统的开发与维护。采用面向方面编程的技术,将系统的核心关注 点与横切关注点分离,分别进行开发,使系统代码变得更加清晰,模块间的独立 性更强,代码重用率提高,系统更加便于维护与扩展。 本文将面向方面编程的思想引入到软件开发过程之中,考虑到兼顾已经被广 大软件开发人员熟悉掌握的面向对象的方法,本文从如下几个方面对面向方面编 程方法进行研究: 一 一 成都理工大学硕士学位论文 ( 1 ) 对面向对象软件开发方法进行改进,使用关注分离的方法对系统进行前 期分析。 ( 2 ) 需要对u m l 进行扩展,以支持面向方面的软件分析设计过程。 ( 3 ) 将扩展的u m l 与a o p 的实现为基础用于一个实际的应用系统开发过 程,在实践中体现这种新兴技术的优势。 本文分为六个部分:第一部分是引言,介绍目i i i 主流的面向对象编程的优点 及不足,引出面向方面编程;第二部分详细介绍了面向方面编程的思想与概念, 并介绍了面向方面编程的国内外发展现状,以及使用a o p 进行系统开发的过程; 第三部分介绍了u m l ,以及将u m l 进行扩展以适应面向方面编程对于前期分 析的需要;第四部分对面向方面各种实现的实现机制进行了深入研究,并介绍了 一个轻量级的系统框架w e b s h a r p 。特别详细介绍了其中a o p 的实现;第五部分 将面向方面的思想引入一个实际的系统,使用了之前扩展的u m l 与w e b s h a r p 框架,选取系统中一个示例功能,详细介绍了其从需求分析到最后代码实现的过 程;第六部分,对本文的工作进行了总结,归纳了本文的不足,分析了当豁a o p 遇到的问题,并提出了下一步工作的方向。 4 一 第2 章a o p 面向方面编程技术研究 第2 章a o p 面向方面编程技术研究 2 1a o p 的核心思想 在传统的软件开发方法中,并没有强调横切关注点这一概念,使得非核心的 横切关注被迫与核心关注混合在一起,无法更进一步地实现模块化,影响了软件 系统的开发与维护。 面向方面是一种新的技术,它的核心思想在于将应用程序中的业务逻辑与对 其提供支持的通用服务进行分离,即把软件系统中核心关注点与横切关注点分别 模块化。图2 1 是将方面从模块中分离出来的示意图 圈2 1 从模块中分离出方面 要达到以上目的,需要引入关注分离的方法,从需求中分离出核心关注与横 切关注。使用面向对象对核心关注进行编程,而使用另一种称为方面( a s p e c t ) 的机制对横切关注进行编程,最后将两种代码混合起来,形成完整的系统。 而实现a o p 的关键,是拦截正常的方法调用,将需要额外附加的功能( 不 同方面的代码) 透明地嵌入到这些方法中,以完成一些额外的要求。对于a o p 的具体实现机制,将在第4 章中具体介绍。 一c 一 成都理工大学硕士学位论文 2 2a o p 的一些概念 a o p 是一种新的思想,它对传统的软件开发过程进行了改进,以获得系统 模块间的更松的耦合度,在使用它的进行软件开发的过程中,需要涉及到一些新 的概念。 2 2 1 关注点( c o n c e r n ) 关注点是设计人员感兴趣的某一概念或区域,关注点是一个为了满足系统整 体目标而必须被处理的特定需求或考虑。面向方面的方法将软件系统看作是由一 系列核心关注点( c o r ec o n c e r n ) 与横切关注点( c r o s s c u t t i n gc o n c e r n ) 构成。 核心关注点是应用系统中的业务逻辑处理的主要流程,用于完成系统核心需 求,它们完成了系统需要的业务逻辑。而横切关注点可以认为是与核心业务逻辑 无关的部分,但常常出现在多个核心关注点周围,并且基本相似,主要用于对核 心业务逻辑提供支持。 以一个典型系统为例,核心关注点可能包括借贷、存入,而横切关注点则可 能包括事务处理和安全验证。图2 2 是软件系统中不同关注点的示意图。 核心关注点 软件模块 软件模块软件模块 栉 ; : : :自 r l j * : : j 切关注点 操作日志 权限认证 图2 2 软件系统的核心关注点与横切关注点 1 卜 事务处理 第2 章a o p 面向方面编程技术研究 2 2 2 方面( a s p e c t ) 方面是a o p 中最为重要的概念,它用于横切组件的模块化,进而支撑核心 业务功能。与面向对象中的类相似,拥有继承等特性,可以认为它是一种用来表 示横切关注点的实体类。 a o p 将一个横切关注在一个方面中单独实现,并不和核心业务模块中的代 码直接交织在一起。方面中定义了对业务模块的影响规则,在业务模块与横切模 块分别完成后,将二者合并到一起形成最终的系统。 2 2 3 织入( w e a v e ) 织入是把定义好的横切关注点的代码嵌入到切入点,织入规则说明了在程序 执行到某个点时,需要采取什么行动,使用织入规则可以将横切关注点的实现织 入到核心业务逻辑中。 织入包括静态织入与动态织入两种:静态织入指在业务功能代码中的适当位 置,比如某段代码执行前,或执行后,将方面中的编码插入,从而形成混合的编 码。一般需要扩展编译器的功能,将需要织入的代码,直接添加到相应的织入点; 或者,为原来语言添加新的语法结构,直接从语法上支持a o p 。使用静态织入 方式实现a o p ,其优点是代码执行效率高,缺点是对实现人员的要求很高。 使用动态织入实现的a o p ,可以在程序运行时,根据运行上下文动态地决 定调用各个方面地代码。动态织入易于实现,对实现人员要求较低,便于学习与 推广,但其程序执行效率较低。 本文将在第4 章中详细介绍两种织入方式,以及由其划分的不同的a o p 实 现方式。 2 3 a o p 的优点 考虑一个实际的应用场景:银行用户提取现金流程,很自然的,将其作为系 统的一个功能模块,其模块流程中包含多个操作。在传统的o o 设计方法中,其 大概流程如图2 3 。 在这个系统模块中,包含了多个操作,其中即含有业务核心操作,如“输入 金额”、“提供现金”,也含有完全可以独立出来作为横切操作的“检查用户合法 性”、“记录提款事件”。将这两类操作放在同一个模块中,无疑造成了代码的混 乱,一旦横切操作的需求发生了变化,比如用户合法性的检查方法发生变化,或 者取款事件的记录格式发生了变化,需要对整个模块进行重新编译与部署,加大 1 成都理1 = 大学硕士学位论文 了软件系统在开发与维护上的难度。 是 是 系统向用户提供现金 t 记录提款事件 0 提款事件结束 图2 3 面向对象设计的软件模块结构 而使用面向方面的方法,将其中横切功能分离出来,模块结构如图2 4 。 可以看到,这种结构下的软件模块间更加松耦合,横切操作与核心操作分离 开来,放入方面模块中进行开发与维护,这样,及时横切操作的需求发生变化, 核心操作模块也无需任何变动,只需要对横切操作的方面模块进行修改。 第2 章a o p 面向方面编程技术研究 核心操作横切操作( 方面) l 提款事件开始f i 检查用户权限 ;广一 输入提取金额 ,k 送 童 絮竺! ! 三多少添 毫 系统向用户提供现金 记录提款事件 提款事件结束 图2 4 面向方面的模块结构 实际上,a o p ( 面向方面编程) 作为o o p ( 面向对象编程) 的一种补充和 完善,它剖开封装的类的内部,将软件系统中的核心业务与非核心功能分开,对 两种关注分别模块化,降低系统模块之间的耦合,便于开发与维护。相对于传统 的o o p ,引入a o p 可以得到更好的软件结构及性能、稳定性方面的改进。具体 则表现在以下几个方面: ( 1 ) 横切关注点的模块化。在使用a o p 之后,系统中的横切关注点也是模 块化的,这样的系统中冗余代码较少,使得系统易于开发与维护。 ( 2 ) 便于系统扩展。通过设计与实现新的方面,可以很方便地加入新功能, 系统地可扩展性得到保证。 ( 3 ) 设计决定地迟绑定。使用a o p ,可以推迟为将来的需求做决定,因为可 以把这种需求作为独立的方面方便的设计实现。 ( 4 ) 更好的代码重用性。a o p 将每一个方面作为独立的模块,模块间是松耦 合的,而松耦合则代表了更好的重用性,可以很少修改便用于其他场景。 争 成都理t 大学硕士学位论文 2 4 面向方面的软件系统开发 2 4 1 多维关注分离 “关注分离”是软件工程中的一个核心概念,指的是针对软件的不同关注, 分别识别各个关注点的相关部分,并在后续的设计开发中分别进行封装。 当前主流的面向对象方法只是提供一维的关注分离,在系统分析设计时只是 根据业务功能不同而划分不同的模块,着重关注系统的核心关注点这一维度,而 忽视甚至无视其他维度上横切关注的存在。这样,开发的系统在核心关注之外的 其他维度上的关注并没有很好的设计与实现,反映在代码上就是过多的代码分散 与代码纠结。图2 5 描述了面向对象方法中的一维关注分离。 图2 5 一维关注分离 点) 一 面向对象的方法主要实现的是核心关注点的模块化,而面向方面的目的就是 要在面向对象的基础上,进一步实现横切关注点的模块化。因此,必须用另一种 方法将需求中的横切关注点更好的划分出来。 “多维关注分离”提供了更加自然的关注分离,注意到不同维度上需要分离 的关注点。对于一个待开发对象,开发者从多个角度对系统进行描述和理解,进 而分离出不同维度上的所有核心关注点与横切关注点,定义出需要进行开发的不 同的方面。 具体到方法上,在需求阶段使用用例( u s ec a s e ) 和观察点( v i e w p o i n t s ) 等 技术从不同的角度捕获关心的问题,建立起问题模型,识别出一些与其它关注交 叉的关注,让关注与实现阶段的类或者方面的映射变得容易。图2 6 是多维关注 分离的示意图。 一lo _ 一 第2 章a o p 面向方面编程技术研究 2 4 2a o p 开发一般步骤 图2 6 多维关注分离 注点) 一 关注点) 一 心关注点) 一 关注点) 一 ( 横切关注点) + a o p 用一种松散耦合的方式来实现独立的关注点,然后,组合这些实现来 建立最终系统。用它所建立的系统是使用松散耦合的,模块化实现的横切关注点 来搭建的。与之对照,用o o p 建立的系统则是用松散耦合的模块化实现的般 关注点来实现的。 引入a o p 进行系统开发时,系统需求使用多维关注分离的方法,将其中的 核心关注与非核心关注分离开来,对于核心关注,进行面向对象的分析,而对于 非核心关注,则形成各自独立的方面,而后对各个方面进行进一步分析、设计及 编码实现,最后将所有方面织入到核心业务逻辑之中,得到完整的系统。大概的 开发过程如下: ( 1 ) 使用多维关注分离的方法将需求分解为两类关注:核心关注点与横切关 注点。 ( 2 ) 核心关注点使用类实现,横切关注点用方面实现。 ( 3 ) 将核心类与横切方面代码整合,形成完整的系统。 图2 7 是以上过程的示意图。 图2 7 面向方面开发步骤 成都理1 = 大学硕士学位论文 2 4 3 基于用例分析的开发过程 目前面向对象开发方法主要使用基于用例驱动的开发方法,该方法已经大量 应用于现代软件工程中,是一种比较成熟的系统开发方法,在将a o p 思想引入 之后,其过程需要进行调整扩展,在与各个阶段均要考虑到方面的存在及其与核 心类之间的关系。 图2 8 描述了使用基于用例分析的方法,进行面向方面的开发在各个阶段需 要对横切方面所作的工作。 需求分析:对横切关注点进行建 模,并描述其与核心关注点之间 的关系 之乡 系统分析:分析横切关注与核心 关注问的联系与相互影响,将横 切关注分析为方面 之乡 系统设计:细化方面设计,确定 设计策略 之乡 系统实现:根据面向方面设计方 法与策略实现各个方面 图2 8 各个阶段对横切方面的工作 需求分析阶段,主要任务是把抽象的横切关注分解为横切用例。从核心关注 与横切关注之间的联系入手进行分析。考虑核心关注对于横切关注的使用情况, 确定系统为满足横切关注可能采取的操作。依据需求角色的不同逐一分解,将横 切关注总结为横切用例。 系统分析设计阶段,由于横切的关注对核心关注的横切特性,在同一个核心 关注点,可能有多个不同的横切关注对其施加影响,而这些横切关注点之间也可 能形成相互之间的影响。要求对需求分析获得的横切用例做进一步的分析,确定 其与核心用例的联系与相互影响,确定各个横切用例之间的优先权关系,并将横 切关注用例归结为方面,主要是将横切用例与其他用例的联系对应转换为方面内 的切入点和通知。而后确定方面对核心类的影响方式,即方面的设计策略,决定 - - 1 2 - - 第2 章a o p 面向方面编稃技术研究 核心类调用方面的时机,如a r o u n d 、b e f o r e 、a f t e r 等。 系统实现阶段。按照前阶段形成的方案与策略,对需求分析中关注分离所得 到的各个方面进行实现。这个阶段中,可以选择已有的a o p 实现以节省工作量, 或者根据系统实际需求自行对a o p 进行实现,在此基础上对各个方面进行独立 编码。例如在如j a v a 平台下可以选用a s p e c t j 、s p r i n g 、j b o s s 等等,独立地实现 各个横切关注,编写不同方面的代码。按照指明的横切规则,对已经实现好的各 个横切方面的代码织入到核心业务逻辑中,构建最终系统。实际上,在支持a o p 的大部分框架中,对方面的最终组合就已经实现了,对于开发者来说,只需要按 照规定进行织入规则的定义,织入的具体过程由具体的a o p 实现来负责,因此 选取现有的a o p 框架可以节省许多的工作量。 2 5 a o p 发展现状 2 5 1 各个平台的a o p 发展 业界普遍接受的说法是,面向方面编程是由g e r g o rjk i c z a l e s 等人在1 9 9 7 年的欧洲面向对象编程大会( e c o o p 9 7 ) 上提出的一种编程范式,它从编程方 法学的角度有效地解决了横切关注点的问题,是一种新兴的编程技术。 a o p 技术在j a v a 平台下是最先得到应用的。美国国防先进技术研究计划署 ( d e f e n s ea d v a n c e dr e s e a r c hp r o j e c t sa g e n c y ,d a r p a ) 提供了科研经费,定义 一套j a v a 语言的扩展系统,使开发者可以方便的进行面向方面的开发,这套扩 展系统被称为a s p e c t j 。之后,a s p e c t j 在2 0 0 2 年被转让给e c l i p s ef o u n d a t i o n , 从而成为在开源社区中a o p 技术的先锋,也是目前最为流行的a o p 工具。 a s p e c t w e r k z 是基于j a v a 的动态的、轻量级a o p 框架。2 0 0 5 年1 月,a s p e c t j 和a s p e e t w e r k z 达成协议,同意将二者的成果综合到一起。他们合作的第一个发 布版本为a s p e c t j5 ,a s p e c t j5 也为j a v a5 的语言特性提供完全的a o p 支持。 a s p e c t 通过对j a v a 语言的扩展,通过增加一些新的构造块支持对横切关注 点的模块化封装,通过对源代码级别的代码混合实现织入,是一种典型的静态织 入实现机制。 商用软件制造商j b o s s 在其2 0 0 4 年推出的j b o s s4 0 中,引入了a o p 框架 和组件。在j b o s s 4 0 中,用户可以在j b o s s 应用服务器外部单独使用j b o s s a o p 。 j b o s s a o p 框架新版本对加载期织入( w e a v e ) 和切点( p o i n t c u t ) 匹配的性能做 了很大的优化。j b o s s 通过类载入时对字节码操作,动态实现a o p 。 作为轻型的f r a m e w o r k 、s p r i n g 在开发轻量级的j 2 e e 时,应用是非常广泛 的。它通过i o c 模式( i n v e r s i o no fc o n t r o l ,控制反转模式) 来实现a o p ,通常 一1 3 成都理工大学硕十学位论文 被称为s p r i n ga o p ,被作为s p r i n g 框架的扩展而发布。s p r i n ga o p 作为一种非 侵略性的,轻型的a o p 框架,开发者无需使用预编译器或其他的元标签,在j a v a 程序中应用a o p 。目前,a o p 的功能完全集成到了s p r i n g 事务管理、日志和其 他各种特性的上下文中。 而在n e t 的阵营中,a o p 技术的应用远不如j a v a 阵营对a o p 的关注。事实 上,在n e t 平台下,推动a o p 技术发展的原动力并非微软,而是开源社区。 与j a v a 阵营中的a o p 技术不同,目前在n e t 平台下的各种a o p 工具,基 本上还停留在实验室阶段。但一些在技术上领先且逐渐成熟的a o p 产品,也在 开源社区中渐露峥嵘。这其中主要包括a s p e c t s h a r p ,a s p e c t d n g ,e o s a o p 等。 a s p e c t s h a r p 是基于c a s t l e 动态代理技术来实现的。c a s t l e 源于a p a c h e a v a l o n 项目,其目的在于实现一个轻量级的l o c 容器。a s p e c t s h a r p 于2 0 0 5 年6 月被收 录为c a s t l e 的其中一个子项目。它是针对c l i ( n e t 和m o n o ) 实现的a o p 框架, 利用了反射、代理等机制。 a s p e c t d n g 的实现技术是i l 级别下的代码织入,能够将原有的程序集拆散 成i l m l 格式,以便于对静态程序集进行修改和扩展,从而达到静态织入的目的。 因为a s p e c t d n g 是属于i l 级别下的代码织入,因此在n e t 平台下,并不受具体 的编程语言限制。 e o s a o p 与a s p e c t d n g 一样,仍然采用静态织入的方式,但从语法定义上, 它更近似于a s p e c t j 关于a o p 的实现。它扩展了c 拌语法,引入了a s p e c t 、i n t r o d u c e 、 b e f o r e 、a f t e r 等关键字,并且提供了专用的e o s 编译器。 目前为止,对于a o p 的研究集中于其在各个平台上的实现,取得了很大的 进展,各种主流语言平台基本上都有a o p 的实现。本文将在第4 章种对部分a o p 的具体实现技术进行阐述。 2 5 2a o p 的实际应用 目前,国外的许多大学与和研究机构都投入人员对面向方面编程技术进行研 究,投入实际应用,取得了一定的成果。 加拿大大不列颠哥伦比亚大学的a - k e r n e l 项目组将a o p 的思想运用到操作 系统设计中,使用a s p e c t c 对f r e e b s dv 3 3 操作系统内核进行了修改,将内存 缺页处理作为一个a s p e c t 进行处理,取得了很好的效果;比利时k a t h o l i e k e 大 学研发了一种基于a s p e c t 的中间件l a s a g n e ,主要用于分布式系统中的服务定制, 在不改变代码的情况下,实现动态程序扩充;华盛顿大学f a c e t 项目组利用a o p 1 4 一 第2 章a o p 面向方面编程技术研究 方法实现可定制中间件,使用a s p e c t j 开发了一个具有更好模块性、更少的代码 以及易于扩充的实时事件信道。 a o p 可应用的范围非常广泛,作为一种思想,跨越多个语言平台,用于各 种各样的实际应用。以下是部分已经经过实践检验的应用场景: ( 1 ) 应用系统中的日志功能、权限认证、事务处理、缓存管理等关注; ( 2 ) 实时操作系统中将实时关注作为一个方面提取出来,形成一个独立于系 统的时间方面,实现时间方面的并发设计和系统时间特性的统一管理; ( 3 ) 对工作流系统进行改造,将影响所有业务模块的流程管理功能分离出 来,形成一个流程方面,各个业务模块都会被这个方面“监视”,文献 2 9 1 对这方面的工作做了研究; ( 4 ) 在c + + 程序开发之中,将内存管理作为一个关注点,形成内存管理方面, 用于帮助检查内存泄漏及其他内存管理; 改进已有的各种面向对象的设计模式,实现关注点的分离,使模式具有更好 的模块化结构。文献 2 3 1 给出了一种使用面向方面思想改进观察者模式的方法。 2 6a o p 当前的研究热点 与其它的编程思想发展过程一样,面向方面作为一个后来者,其理论研究与 实践应用的事件都还不长,仍然有许多问题需要进一步的研究与探讨。主要集中 在以下几个方面: ( 1 ) 如何有效的判断和识别一个系统中的横切关注点: ( 2 ) 如何准确把握a s p e c t 之间及其与核心类之间的相互关系: ( 3 ) 如何进一步开发和丰富支持a o p 的语言并保证其正确性: ( 4 ) 如何利用现有的c a s e 工具为a o p 系统建模; ( 5 ) 如何开发有效的工具来满足从软件设计到维护各个阶段的需要。 2 7 小结 a o p 的出现是为了解决一些传统方法中不能很好解决的横切关注的问题, 它不是一种取代传统编程方法的方法,而是对于这些方法的补充,它将软件系统 中不同维度的关注点分离,避免将横切方面的关注分散在核心的业务代码中。 目前,a o p 仍然处在迅速发展的阶段,但已经出现在众多的实际应用与学 术研究中,特别是些流行的应用开发框架已经集成了对于a o p 的支持,在开 发人员中广为流传。但是,在软件系统前期的需求分析及设计阶段,并没有很好 的方法对a o p 进行支持。随着a o p 的思想更深地融入软件工程,进一步影响到 - - 1 5 - - 成都理t 大学硕士学位论文 软件的前期分析与设计阶段,可以预见,它给软件开发方法学带来的是全方位的 变革,而不是仅仅停留在实现层面。 本章介绍了面向方面的优点、核心思想与一些基本的概念,以及使用a o p 进行软件系统开发的一般步骤,在当前流行的面向对象的基于用例的方法上进行 扩展,并详细介绍了开发过程中扩展的部分,最后大概介绍了a o p 在主流的企 业开发平台上的发展情况,目前为止a o p 的部分实用场景。 一1 6 一 第3 章u m l 面向方面建模研究 第3 章u m l 面向方面建模研究 3 1u m l 概述 3 1 1u m l 的产生 随着面向对象方法的迅速发展,建模语言也随之发展起来。公认的面向对象 建模语言出现于7 0 年代中期。从1 9 8 9 年到1 9 9 4 年,其数量从不到十种增加到 了五十多种。在众多的建模语言中,语言的创造者努力推崇自己的产品,并在实 践中不断完善。但是,面向对象方法的用户并不了解不同建模语言的优缺点及相 互之间的差异,因而很难根据应用特点选择合适的建模语言。 面对众多的建模语言,用户由于没有能力区别不同语言之间的差别,因此很 难找到一种比较适合其应用特点的语言;其次,众多的建模语言实际上各有千秋; 第三,虽然不同的建模语言大多类同,但仍存在某些细微的差别,极大地妨碍了 用户之间的交流。因此在客观上,极有必要在精心比较不同的建模语言优缺点及 总结面向对象技术应用实践的基础上,根据应用需求,取其精华,去其糟粕,求 同存异,统一建模语言。 世界著名的面向对象技术专家g b o o c h 、j r u m b a u g h 和i j a c o b s o n 发起, 在b o o t h 方法,o m t 方法和o o s e 方法的基础上,广泛征求意见,集众家之长, 几经修改,完成了u m l 。 u m l 是一种定义良好、易于表达、功能强大且普遍适用的建模语言。它溶 入了软件工程领域的新思想、新方法和新技术。它的作用域不限于支持面向对象 的分析与设计,还支持从需求分析开始的软件开发的全过程,它是软件工程领域 中具有划时代意义的研究成果。它代表了面向对象方法的软件开发技术的发展方 向,锝到了如i b m 、h p 、o r a c l e 、m i c r o s o f t 等大公司的支持,目前已经成为面 向对象技术领域内占主导地位的标准建模语言。 3 1 2u m l 的特点 标准建模语言u m l 的主要特点如下: ( 1 ) u m l 在b o o c h 、o m t 和o o s e 等方法中的基础上,吸取了面向对象技 术领域中其他流派的长处,统一了标准。 ( 2 ) 可视化,表示能力非常强大。u m l 符号表示考虑了各种方法的图形表 一1 7 成都理1 = 大学硕士学位论文 示,删掉了大量易引起混乱的、多余的和极少使用的符号,也添加了一 些新符号。因此,在u m l 中汇入了面向对象领域中很多人的思想。这 些思想并不是u m l 的开发者们发明的,而是开发者们依据最优秀的0 0 方法和丰富的计算机科学实践经验综合提炼而成的。 ( 3 ) u m l 在演变过程中还提出了一些新的概念。在u m l 标准中新加了模板 ( s t e r e o t y p e s ) 、职责( r e s p o n s i b i l i t i e s ) 、扩展机制( e x t e n s i b i l i t y m e c h a n i s m s ) 、线程( n 鹏a d s ) 、过程( p r o c e s s e s ) 、分布式( d i s t r i b u t i o n ) 、 并发( c o n c u r r e n c y ) 、模式( p a t t e r n s ) 、合作( c o l l a b o r a t i o n s ) 、活动 图( a c t i v i t yd i a g r a m ) 等新概念,并清晰地区分类型( t y p e ) 、类( c l a s s ) 和实例( i n s t a n c e ) 、细化( r e f i n e m e n t ) 、接口( i n t e r f a c e s ) 和组件 ( c o m p o n e n t s ) 等概念。 因此可以认为,u m l 是一种先进实用的标准建模语言,被用来为系统建模, 具有很宽的应用领域,其中最常用的是为软件系统创建模型,但u m l 也可用来 描述其它非计算机软件的系统,如一个企业的机构或过程等。 3 1 3u m l 的内容 u m l 是面向对象分析与设计方法的后继工作,是一种图形化的表示法,用 于以图形化方式描述软件概念。凭借它,人们可以以图形化方式描述某个问题域, 描述一个构思中的软件设计,或者描述已经完成的软件实现。它包含下列五类图 形: ( 1 ) 用例图。从用户角度描述系统功能,并指出各功能的操作者。 ( 2 ) 静态图( s t a t i cd i a g r a m ) 。包括类图、对象图和包图。其中类图描述系统 中类的静态结构。对象图是类图的实例,几乎使用与类图完全相同的标 识。包图用于描述系统的分层结构。 ( 3 ) 行为图( b e h a v i o rd i a g r a m ) 。描述系统的动态模型和组成对象间的交互 关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的 转移条件;而活动图描述满足用例要求所要进行的活动以及活动间的约 束关系,有利于识别并行活动。 ( 4 ) 交互图( i n t e r a c t i v ed i a g r a m ) 。描述对象间的交互关系。其中顺序图显示 对象之间的动态合作关系,它强调对象之间消息发送的时间顺序,同时 显示对象之间的交互;合作图描述对象间的协作关系,强调对象间的上 下级关系。 ( 5 ) 实现图( i m p l e m e n t a t i o nd i a g r a m ) 。其中构件图描述代码部件的物理结 构及各部件之间的依赖关系。配置图定义系统中软硬件的物理体系结 一1 8 第3 章u m l 面向方面建模研究 构。它可以显示实际的计算机和设备( 用节点表示) 以及它们之间的连 接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置 可执行部件和对象以显示节点跟可执行软件单元的对应关系。 需要指出的是,u m l 是标准的建模语言,而不是标准的开发过程。尽管u m l 的应用必然以系统的开发过程为背景,但由于不同的组织和不同的应用领域,需 要采取不同的开发过程。实际上,u m l 中所提供标准的图符,相当于音乐五线 谱里的乐符,学会看乐符才能看得懂乐谱,才能进一步创造音乐。同样,懂得 u m l 中的图符才能进行系统分析和设计。 3 1 4u m l 在软件开发中的应用 u m l 的目标是以面向对象图的方式来描述任何类型的系统,具有很宽的应 用领域。其中最常用的是建立软件系统的模型,但它同样可以用于描述非软件领 域的系统,如机械系统、企业机构或业务过程,以及处理复杂数据的信息系统、 具有实时要求的工业系统或工业过程等。总之,u m l 是一个通用的标准建模语 言,可以对任何具有静态结构和动态行为的系统进行建模。此外,u m l 适用于 系统开发过程中从需求规格描述到系统完成
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学《能源化学工程-能源化工工艺设计》考试参考题库及答案解析
- 2025年大学《数字出版-数字内容制作》考试参考题库及答案解析
- 2025年大学《纳米材料与技术-纳米材料实验技术》考试参考题库及答案解析
- 2025年大学《冶金工程-冶金工程实验与实践》考试参考题库及答案解析
- 2025年大学《汉语国际教育-古代汉语基础》考试备考题库及答案解析
- 2025年大学《质量管理工程-质量管理体系》考试模拟试题及答案解析
- 2025年大学《旅游地学与规划工程-旅游地学与规划工程概论》考试模拟试题及答案解析
- 2025信息安全顾问招聘笔试题及答案
- 房地产经理考试题及答案
- 东方希望集团招聘试题及答案
- 潜水作业事故分类与统计方法 征求意见稿
- 大学生职业生涯规划课件教学
- GB/T 10069.3-2024旋转电机噪声测定方法及限值第3部分:噪声限值
- 2024年全国职业院校技能大赛中职(数字产品检测与维护赛项)考试题库(含答案)
- 海水的温度 教学课件
- (高清版)JTGT 3365-01-2020 公路斜拉桥设计规范
- 养老机构消防演练脚本
- 洁净钢与连铸技术
- T CACM 老年人中医体质治未病干预指南
- 野菊花种植可行性方案
- 甜品行业网红产品分析
评论
0/150
提交评论