(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf_第1页
(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf_第2页
(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf_第3页
(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf_第4页
(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf_第5页
已阅读5页,还剩81页未读 继续免费阅读

(计算机软件与理论专业论文)基于aop的契约式开发方法研究及其语言与工具支持.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

华东师范大学硕上学位论文 摘要 程序的正确性是软件开发中的核心问题,也是软件质量的基础,为了能够解 决该问题,开发出无错的软件,人们提出了许多方法。形式化方法是其中的一种, 它试图用严格的数学理论来规范和指导程序设计,从而保证软件的正确性。但是, 形式化方法有着严格的数学理论,对开发者的要求比较高,因而,在实践中的应 用并不是非常普遍。契约式开发方法( d e s i g nb yc o n 仃a c t ,d b c ) 【1 是一种借 鉴了形式化方法优点而又易于实践的开发方法学,它引入了形式化方法中的不变 式、前置谓词和后置谓词等概念,来精确刻画程序模块的语义。契约式方法提供 了方便的定义规约和检查规约的手段,使得开发者在实际开发过程中能够真正利 用形式化方法的优点。在面向对象开发领域中,契约式开发已经是一种被普遍接 受的用于提高软件可靠性的系统化方法。但是,契约式开发也有其不利的方面, 比如编写程序时的“额外负担”、不同关注点的代码纠缠等等,因此,主流的面 向对象语言并未提供对它的支持。 面向方面编程 2 1 ( a s p e c t - o r i e n t e dp r o g r a m m i n g ,a o p ) 是一种新兴的编程技 术,近年来己逐渐成为程序设计领域的热点。它强调关注点的分离和横切关注点 的封装,被人们认为是解决面向对象系统固有问题的“灵丹妙药”。a o p 的语言 构造与契约式开发之间存在着天然的对应关系,这一特点恰好可以弥补契约式开 发方法的不利方面,因此,利用a o p 技术在面向对象系统中支持契约式开发是 提高软件系统可靠性的途径。 目前存在的将a o p 实现应用于契约式开发的方法主要分为两类:一类是使 用a o p 的具体实现语言( 如a s p e c t j ) 来支持主流的面向对象语言的契约式开发。 在这种情况下,与契约相关的代码从业务逻辑代码中彻底分离出来了,节省了大 量重复的契约检查代码。但是,这类方法依赖于语言的具体实现细节,要求程序 员掌握a o p 实现语言的复杂语法,对程序员而言是一种挑战和负担;再则,这 种方法只能用于实现阶段,而无法在设计阶段对契约进行精确的定义和描述。第 二类方法则借助于相对比较成熟和完善的规范语言( 如o c l ) 进行契约约束, 然后通过一定的转换规则将其转换成a s p e c o 等a o p 实现语言。这类方法可以 在设计阶段精确地描述各种谓词和不变式条件,但是,鉴于大多数规范语言都是 建立在形式语言的基础之上的,因此其表达式一般比较冗长,理解起来不直观; 而且,因为o c l 等规范语言和a s p e c t j 等a o p 实现语言在抽象程度上有着很大 的差异,从而导致两者在转换的实现上存在着一定的困难。 在本文中,作者分别深入研究了面向方面编程技术和契约式开发,发现了两 者之间的联系,结合目前a o p 在契约式开发中暴露出来的问题,提出了一种改 华东师范大学硕十学位论文 善和提高基于a o p 的契约式开发方法的方案。该方案集成了基于a o p 的契约式 软件开发流程的整个过程,填补了基于a o p 的契约式开发中上层设计和下层实 现之间的鸿沟,将两者融会贯通。 本文首先给出了a o p 和d b c 之间的对应关系,在此基础上,提出了一种基 于a o p 的契约描述语言( a c d l ) ,该语言以a o p 的方式表示契约,可以在设 计阶段就精确而直观地描述类不变式、方法的前置、后置条件,而不依赖于任何 a o 的语言细节;另一方面,由于其在语言的表达风格上接近于a o ,因此,可 以很容易地向a s p c c o 等a o p 实现语言转换。同时,本文对a c d l 语言与上层 设计和下层实现之间的联系进行了阐述,分析了他们之间转换的可行性,并探讨 了a c d l 语言在实际软件开发过程中的作用和意义。最后,本文给出了a c d l 语言辅助工具a j m a k c r 的实现框架,该工具可以根据用户给出的不变式和谓词 信息自动生成a c d l 代码,也可将a c d l 代码解析成a s p c c t j 代码。 关键字l面向方面编程,契约式开发,a s p e c t ,a c d l ,a j m a k c r ,谓词断言 v 华东师范大学硕十学位论文 a b s t r a c t p r o g r a mc o r r e c t n e s si sn o to n l yac o r ei s s u ei ns o f t w a r ed e v e l o p m e n t ,b u ta l s ot h e f o u n d a t i o no fs o f t w a r eq u a l i t y i no r d e rt os o l v et h i sp r o b l e m ,m a n ys o l u t i o n sh a v e b e e np r o p o s e d f o r m a l i z a t i o nm e t h o di so n eo ft h e m i tr e l i e so ns t r i c t m a t h e m a t i c a lt h e o r yt og u i d ep r o g r a m m i n g t h u sf f f l s u r e st h ev a l i d i t yo fs o f t w a r e h o w e v e r , f o r m a l i z a t i o nm e t h o di sb a s e do np r o f o u n dm a t h e m a t i c a lt h e o r yw h i c h s e e m st ob ea c h a l l e n g ef o r m o s td e v e l o p e r s h e n c e ,i ti sn o tw i d e l ya c c e p t e di nt h e p r a c t i c a la p p l i c a t i o n s d e s i g nb yc o n t r a c t ,o rd b c i ns h o r t ,i sam e t h o d o l o g yo f d e v e l o p m e n tw h i c hh o l d st h ea d v a n t a g eo f f o r m a l i z a t i o nm e t h o da n d i se a s yt ob ep u t i n t op r a c t i c ea sw e l l i tc a nb eu s e dt od e s c r i b es e m a n t i co fp r o g r a mm o d u l e s p r e c i s e l yb yi n t r o d u c i n gs u c hc o n c e p ta si n v a r i a n t s 、p r e c o n d i t i o n sa n dp o s t c o n d i t i o n s d b c p r o v i d e sc o n v e n i e n tw a y st od e f i n ea n dc h e c kc o n s t r a i n t s ,w h i c hd o e se n a b l e d e v e l o p e r s t ot a k e a d v a n t a g eo ff o r m a l i z a t i o nm e t h o di nt h e i rp r a c t i c a l w o r k a c t u a l l y , i nt h ef i e l do fo b j e c t - o r i e n t e dd e v e l o p m e n t ,d b ch a sb e c o m eap o p u l a r m e t h o di ni m p r o v i n gs o f t w a r er e l i a b i l i t y h o w e v e r , d b ca l s oh a si t sd i s a d v a n t a g e s f o re x a m p l e ,i tb r i n g se x t r ab u r d e nt oc o d i n g ;r e s u l t si nc o d et a n g l i n go fd i f f e r e n t c o n c e r n se t c d u et ot h e s e d i s a d v a n t a g e s ,m a n yp o p u l a ro b j e c t - o r i e n t e d p r o g r a m m i n gl a n g u a g e sd o n ts u p p o r td b c m e c h a n i s m a s p e c t - o r i e n t e dp r o g r a m m i n gi s an e wp r o g r a m m i n gt e c h n o l o g ya n dh a s g r a d u a l l yb e c o m eah o t s p o t i te m p h a s i z e so l ls e p a r a t i o no fc o n c e r n sa sw e l la s e n c a p s u l a t i o no fc r o s s c u t t i n gc o n c e r n sa n di sc o n s i d e r e dt ob et h eb e s ts o l u t i o nt o s o l v eav a r i e t yo fs o p h i s t i c a t e dp r o b l e m si no b j e c t - o r i e n t a ds y s t e m s t h e r ee x i s t s n a t u r a lm a p p i n gr e l a t i o n s h i pb e t w e e nt h el a n g u a g ec o n s t r u c t i o no fa o pa n dd b c , w h i c hc a ne x a c t l yc o m p l e m e n tt h ed i s a d v a n t a g e so f d b cd e v e l o p m e n t m a k i n gu s e o f a o pt e c h n o l o g yt os u p p o r td b ci no b j e c t - o r i e n t e ds y s t e m si sb e l i e v e dt ob ean e w w a y t oe n h a n c et h er e l i a b i l i t yo f s o f t w a r es y s t e m s c u r r e n t l yt w om e t h o d se x i s ti na p p l y i n ga o pt od b cd e v e l o p m e n t o n ei s u s i n gt h ed e t a i l e da o pi m p l e m e n t a t i o nl a n g u a g e ( s u c ha sa s p e c t j ) t os u p p o r tt h e d b co fo o p l a n g u a g e i ns u c hc i r c u m s t a n c e s ,t h ec o d e sr e l a t e dt oc o n t r a c t sc a nb e t o t a l l ys e p a r a t e df r o m t h eb u s i n e s s l o g i cc o d e s ,s ot h a t al a r g ea m o u n to f c o n t r a c t c h e c k i n gc o d ec a nb es a v e d b u tt h i sk i n do fm e t h o dr e l i e sh e a v i l yo nt h e l a n g u a g ei m p l e m e n t a t i o nd e t a i l s ,t h u s i t r e q u i r e sp r o g r a m m e r s t oh a v eag o o d u n d e r s t a n d i n go ft h ec o m p l e xs y n t a xo fa o pl a n g u a g e ,w h i c ha p p e a r st ob ea c h a l l e n g ea n da l le x t r a b u r d e nt od e v e l o p e r s w h a t sm o r e ,t h i sk i n do fm e t h o dc a n v i 华东师范大学硕上学位论文 o n l yb eu s e di nt h ei m p l e m e n t a t i o np h a s ew h i l ei th a sn oa b i l i t yi na c c u r a t e l y d e s c r i b i n gc o n t r a c t s a td e s i g nt i m e t h es e c o n dm e t h o di s m a k i n gu s eo ft h e r e l a t i v e l ym a t u r es p e c i f i c a t i o nl a n g u a g e ss u c ha so c l t od e s c r i b ec o n s t r a i n t s ,a n d t h e nt r a n s l a t et h e mi n t oa o p i m p l e m e n t a t i o nl a n g u a g e sa c c o r d i n gt oc e r t a i nm a p p i n g r u l e s t h i sk i n do fm e t h o dc a nb eu s e dt od e s c r i b ev a r i o u sp r e p o s tc o n d i t i o n sa n d i n v a r i a n t sp r e c i s e l ya td e s i g nt i m e h o w e v e r , a sm o s to ft h es p e c i f i c a t i o nl a n g u a g e s h o l df o r m a ll a n g u a g e sa st h e i rf o u n d a t i o n , t h ee x p r e s s i o n s & r eu s u a l l yt o ov e r b o s et o u n d e r s t a n d b e s i d e s ,t h eb i gd i f f e r e n c eo fa b s t r a c td e g r e eb e t w e e ns p e c i f i c a t i o n l a n g u a g e sa n di m p l e m e n t a t i o nl a n g u a g e sl e a d s 幻d i f f i c u l t yi ni m p l e m e n t i n gt h e t r a n s l a t i o n i nt h i sp a p e r , a f t e rt h ed e t a i l e dr e s e a r c hi na o pa n dd b cr e s p e c t i v e l y , t h e r e l a t i o n s h i pb e t w e e nt h e mi sf o u n do u t ,a n dan e w s o l u t i o nt oi m p r o v et h ea o p b a s e d d b cd e v e l o p m e n ti sp r o p o s e d t l l i ss o l u t i o ni n t e g r a t e st h ew h o l ed e v e l o p m e n t p r o c e s so ft h ea o p b a s e dd b cd e v e l o p m e n t a tt h es a m et i m e ,i tf i l l si nt h eg a p b e t w e e nh i g hl e v e ld e s i g na n dl o wl e v e li m p l e m e n t a t i o n t h i sp a p e rf i r s t l yg i v e st h em a p p i n g r e l a t i o n s h i pb e t w e e na o pa n dd b c a f t e r t h a t ,a na o p - b a s e dc o n t r a c td e s c r i p t i o nl a n g u a g e ( a c d l ) i sp r e s e n t e d t h e l a n g u a g ec a nb eu s e dt od e s c r i b ec o n t r a c t sa td e s i g np h a s ew i t h o u tr e l y i n go na n y d e t a i l so f a ol a n g u a g e s o nt h eo t h e rh a n d ,a si t se x p r e s s i n gs t y l ei sc l o s et oa o ,i t c a nb et r a n s l a t e di n t os u c ha o p i m p l e m e n t a t i o nl a n g u a g e sa sa s p e c t je a s i l y a tt h e s a m et i m e , t h i sp a p e ra l s oe x p o u n d st h ea s s o c i a t i o n sa m o n ga c d l 、h i 曲l e v e ld e s i g n a n dl o wl e v e li m p l e m e n t a t i o n , a n a l y z i n gt h et r a n s l a t i o nf e a s i b i l i t yb e t w e e nt h e m ,a n d d i s c u s s e st h eu s a g ea n dm e a n i n go fa c d li nt h ep r a c t i c a ls o f t w a r ed e v e l o p m e n t l a s t l y , t h et o o lc a l la j m a k e rs u p p o r tf o ra c d l i sp r e s e n t e d ,w i t hw h i c hu s e r sc a n s i m p l yo n l yg i v et h ei n f o r m a t i o na b o u tp r e p o s tc o n d i t i o n sa n di n v a r i a n t s ,l e a v i n gt h e c o m p l i c a t e dc o d e g e n e r a t i o nw o r kt oa j m a k e r , a n da l s ot h et o o lc a nh e l pt op a r s et h e a c d lc o d et oa s p e c t jc o d e k e y w o r d s :a s p e c to r i e n t e dp r o g r a m m i n g ( a o p ) ,d e s i g nb yc o n t r a c t ( d b c ) , a s p e c t j ,a c d l ,a j m a k e r , f o r m a lp r e d i c a t e s v l i 学位论文独创性声明 本人所呈交的学位论文是我在导师的指导下进行的研究工 作及取得的研究成果。据我所知,除文中已经注明引用的内容外, 本论文不包含其他个人已经发表或撰写过的研究成果。对本文的 研究做出重要贡献的个人和集体,均已在文中作了明确说明并表 示谢意。 作者签名:盗竭题日期:亟埤;垡:苎 学位论文授权使用声明 本人完全了解华东师范大学有关保留、使用学位论文的规定,学 校有权保留学位论文并向国家主管部门或其指定机构送交论文的电 子版和纸质版。有权将学位论文用于非赢利目的的少量复制并允许论 文进入学校图书馆被查阅。有权将学位论文的内容编入有关数据库进 行检索。有权将学位论文的标题和摘要汇编出版。保密的学位论文在 解密后适用本规定。 学位论文作者签名:镰哺颢 日期:逝扛f 进 导师签名:器蠹溻、 日期:盘z :竺:苎 n 华东师范大学硕十学位论文 1 1 研究背景 第一章引言 目前的计算机软件领域中,随着软件开发的规模越来越大,系统越来越复杂, 程序的正确性已经成为软件从业人员孜孜以求的目标。作为程序最重要的属性之 一,长期以来,如何保证程序的正确性、提高软件的可信度一直是计算机科学界 高度关注的一个重要问题,也是推动计算机科学发展的主要动力之一。尽管如此, 对我们常见的绝大多数程序而言,实现完全的正确性验证目前还是很困难的。软 件产品中的b u g 层出不穷,有些还导致了严重后果。美国国家标准技术研究所 ( n a t i o n a li n s t i t u t eo f s t a n d a r d sa n dt e c h n o l o g y , n i s t ) 2 0 0 2 年的一份报告中指 出:“由于缺陷软件而在美国造成的损失每年为几百亿美元,大约是国内生产总 值的百分之一”。 为了尽快改变这种状况,人们提出了许多方法来提高程序的正确性,这些方 法包括:以霍尔( h o a r e ) 逻辑为代表的基于逻辑推理的验证、测试、模型检验( m o d e l c h e c k i n g ) 、对程序进行静态分析等等。这些方法各有利弊,有些方法对问题的解 决不失一般性,但由于形式化程度较高,所以不便于使用;而另一些方法则各有 各的局限性。 1 1 1 契约式开发 契约式开发方法也是一种用于保证程序正确性,提高程序可靠性的系统化方 法,它是以h o a r e 公理化证明的方法为基础发展起来的一种设计思想。 简单地说,契约式开发主要是为程序模块添加前置谓词、后置谓词和不变式 作为模块间的契约。前置谓词描述该模块对调用者提出的要求,只有满足了该模 块的前置谓词,才能调用该模块。后置谓词描述的是该模块向调用者承诺所完成 的任务。一个正确实现的模块在调用返回后,必然满足后置谓词。不变式则针对 整个模块,它表示了该程序模块所应满足的特性,所以在模块执行前后都需要对 不变式进行检查。 契约式开发的思想被用于面向对象的设计中,形成了e i f f e l 语言【3 】,l a r c h 规范 4 】,j m l 5 ,6 ,7 】以及微软n e t 平台上的s p e c # 8 等支持契约式的语言。 e i f f e l 是最著名的直接支持契约式开发的语言,它是一门纯粹的面向对象语言, 也是最早实现契约机制的语言。 华东师范大学硕上学位论文 尽管契约式开发已经是一种被普遍接受的开发方法,但由于在实现时,契约 代码的编写对于系统功能代码的编写者而言是一种“额外的负担”,同时,契约 代码和业务逻辑的代码这两种不同的关注点代码会纠缠在一起。诸如此类的不利 方面导致许多主流的面向对象语言并不提供对契约式开发的内置机制,无法在语 言内部给契约一个一致的感观。 以j a v a 为例,j a v a 语言没有提供对契约的天然支持,a s s e r t 语句是在版本1 4 中加入的。这就使得在日常编码中使用d b c 会是一种挑战。事实上,大多数常 用的方法在应用程序代码中直接加入前置和后置谓词在代码模块化和 可重用性方面都有严重的缺点。这种方法是代码纠缠的一个活生生的例子:它混 合了业务逻辑代码和契约所需的非功能代码。这种代码是不灵活的,因为不能在 不改变应用程序代码的情况下改变或者删除断言。因此,对这个问题的理想解决 方案要满足以下几点要求: 透明性:前置条件和后置条件代码不与业务逻辑混合。 可重用性:大多数组件是可重用的。 灵活性:可以用简单的方式增加、删除和修改断言模块。 简单性:可以用简单的语法指定断言。 面向方面编程的出现为解决这些问题提供了一种有效的途径。 1 1 2 面向方面编程 面向方面编程概念最初是1 9 9 7 年由施乐p a l o a l t o 研究中心的g r e g o r k i c z a l e s 等人在欧洲面向对象程序设计大会上提出的,它最主要的设计原则是模块化系统 的横切关注点,将业务代码与其它代码解耦,在更高的抽象和分解层次上,进一 步提高软件的可维护性、可复用性和可扩展性。 使用面向方面编程方法,无论在需求设计阶段还是代码实现阶段,都可以 将横切关注点模块化实现,单独处理。其实现技术主要包括三个部分:组件语言、 方面语言和编织器,其中组件语言负责系统的核心关注点,方面语言负责系统的 横切关注点,两种语言通过编织器进行无缝的编织实现,这样程序员可以在两个 维度上对软件进行设计和实现,解决了横切关注点的模块化问题。 a o p 封装横切关注点的思想为解决契约式开发中代码纠缠问题提供了良好 的契机,a o p 的语言构造与契约之间也存在着天然的对应关系,如果将前置条 件,后置条件和不变式看成是横切关注点,那么,a o p 就可以做到将它们从功 能模块中分离出来,使开发人员在单独的模块中编写这些功能,并以灵活和声明 2 华东师范大学硕士学位论文 的方式使用它们。a o p 的这些特点恰好可以弥补契约式方法的不利方面,因此, 利用a o p 技术在面向对象系统中支持契约式设计是提高软件系统可靠性的新途 径。 1 1 3 在契约式开发中应用a o p 技术 目前存在的基于a o p 的契约式开发方法在具体实现和处理方式上主要可以 分为两大类:第一类方法将a o p 的具体实现语言用来为主流的面向对象程序设 计语言提供契约式扩展机制。前置条件,后置条件和不变式作为横切关注点从核 心逻辑代码中分离出来,单独封装成a o p 语言中的方面,然后使用a o p 机制提 供的语言结构( 连接点、切入点、通知) 指定需要检查契约的具体位置。以j a v a 语言为例,可以使用a s p e c t j 支持契约,b e f o r e 通知在某个切入点确定的方法执 行之前检查前置条件,a f t e r 通知在方法执行之后检查后置条件,同时使用b e f o r e 和a f t e r 通知或使用a r o u n d 通知在方法执行的之前和之后检查不变式。这种方法 将契约相关的代码从业务逻辑代码中彻底分离出来,提高了代码的灵活性和模块 化,并且节省了大量重复的契约检查代码。但是,使用这种方法需要程序员在懂 得j a v a 语言的同时也要掌握a s p e c t j 的语法,这带来了代码书写和调试上的困难, 对程序员而言是一种额外的负担和挑战,程序员可能会因为a s p e e o 的复杂语言 构造和语法规范而放弃使用,结果使得d b c 带来的优势丧失殆尽。此外,这种 方法着眼于语言细节,因此只有在具体的编码阶段才会被使用,而无法引入到设 计阶段规范契约约束。 第二类方法则借助于o c l ( o b j e c tc o n s t r a i n sl a n g u a g e ) 9 等规范语言对契 约的内容做出精确的描述,然后通过一定的转换规则将规范语言转换成a o p 的 实现语言,最后再将契约代码插入源程序。在所有规范语言中,o c l ( 即对象约 束语言) 可能是目前为止最为成熟、应用最为广泛的,它提供的形式化表示方法, 使得u m l 的使用者可以向他们的软件规格说明中加入更精确的内容。使用这种 方法进行契约式开发,系统的开发者可以在设计阶段就对每一个约束的内容进行 精准的定义和规范。作为u m l 的一个子规范,尽管o c l 具有种种优点,但事 实上它却很少在契约式开发的场合被使用,原因之一在于人们对形式化元素的偏 见,形式化的东西总给人以讳莫如深的感觉,对开发者要求较高,因此很少有人 愿意使用。另一方面原因是由于o c l 语言目前尚缺乏足够的辅助契约式开发的 工具,要使o c l 在契约式领域发挥优势,就需要保证有丰富的支撑工具实现从 o c l 约束中生成相应的代码,插入目标程序代码中。然而,因为o c l 语言和 3 华东师范大学硕士学位论文 a s p e c t j 等a o p 实现语言的抽象程度之间存在着很大的鸿沟,导致两者间的转换 并不那么简单自然,所以,这一类方法虽然可行,却也不是尽如人意的。 1 1 4 问题总结 综上所述,契约式开发在当今软件开发范型中具有相当重要的地位,a o p 的出现进一步弥补了传统契约式开发手段的不足之处,但是目前在基于a o p 的 契约式开发方法中,存在着下述问题: 开发方法的研究过于两级分化,上层分析设计和下层编码实现之间的联 系没有得到充分的重视,这主要体现在:侧重于具体语言细节的方法无 法用于分析设计阶段,且在契约的表述上不够精确;基于相对比较成熟 和完善的规范语言之上的方法又不能很好地对下层编码实现进行指导 和支持。 缺乏一种机制来集成基于a o p 的契约式开发的整个过程,导致开发过 程不能融会贯通,处于脱节状态。 1 2 解决方案 通过上述章节的分析,作者得出这样的结论:目前基于a o p 的契约式开发 方法中,上层分析设计和下层编码实现的研究之间存在着脱节现象,不能很好地 贯穿整个开发流程。鉴于此,本文研究了面向方面编程技术和契约式开发之间的 联系,给出了两者的对应关系,并在此基础上提出了一种基于a o p 的契约描述 语言( a s p e c t o r i e n t e dc o n t r a c td e s c r i p t i o nl a n g u a g e ,a c d l ) ,该语言可以在设 计阶段就用a o p 的方式精确而直观地描述契约内容,也易于向a s p e c t j 等实现 语言转换。这种方法保留了原有的契约式开发方法的优势,同时,作为高层设计 和低层实现之间的纽带,a c d l 可以将基于a o p 的契约式开发方法的整个开发 过程融会贯通,可以视为对其的一种改善和提高。 1 2 1a o p d b c 对应关系 a o p 机制提供的语言结构( 连接点、切入点、通知) 与d b c 之间存在着天 然的对应关系,如:b e f o r e 通知在某个切入点确定的方法执行之前检查前置条件, a f t e r 通知在方法执行之后检查后置条件,同时使用b e f o r e 和a f t e r 通知或使用 a r o u n d 通知在方法执行的之前和之后检查不变式等等。目前的研究领域要么侧重 于底层的编码细节,要么关注于并非为a o p 量身定制的o c l 等规范语言,因此, 并没有一个完整或权威的a o p d b c 对应关系的总结。本文试图在研究两者联系 4 华东师范大学硕士学位论文 的基础上,总结出a o p 和d b c 的对应关系。 1 2 2a c d l 语言 在理清了a o p 和d b c 的对应关系之后,本文作者设计了一种基于a o p 的 契约描述语言,a c d l 语言。该语言结合了a o p 的封装性和灵活性,以及形式 化语言的精准性等优点,以面向方面的风格直观、精确地描述契约规范。a c d l 语言不依赖于任何a o 语言的细节,可用于分析设计阶段的描述;另一方面,由 于a c d l 在表达风格上接近于a o ,因此可以很容易地实现向特定a o p 语言的 转换。同时,a c d l 语言在抽象程度上介于形式化抽象层和具体实现层之间,当 其与两者建立起联系之后,便可以合理而有效地将形式化方法真正引入软件开发 过程中,借助于已有的形式化语言的成熟性及其丰富的支撑工具,实现从形式化 模型到规范约束再到代码实现的平滑过渡。本文将在第四章中详细地介绍a c d l 的设计目的、语言特征以及语法规则等等。 1 2 3a j m a k e r 工具 为了使a c d l 语言具有实际意义,作者开发了a c d l 语言的辅助工具 a j m a k e r 。该工具提供了良好的用户接口,可以根据用户给出的不变式和谓词信 息,自动生成a c d l 代码;同时,本文也尝试给出了a c d l a s p e c t j 的转换规则, 该工具按照这种映射机制,可以将a c d l 语言解析成a s p e c t j 代码。有了辅助工 具的支持,a c d l 语言就可以更加方便地被应用到实际的开发过程中去,将基于 a o p 的契约式开发的高层设计和低层实现融会贯通。 1 3 本文的主要贡献 提出了一种改善和提高基于a o p 的契约式开发的方法,将契约式开发中的 高层设计和低层实现融会贯通。 分别深入研究了a o p 和d b c ,总结了两者之间的对应关系。 设计了a c d l 语言,分析了a c d l 与上层设计和下层实现之间转换的可行 性及意义,并提出了一种统一基于a o p 的契约式软件开发流程的整个过程 的方案,从而填补了基于a o p 的契约式开发中上层设计和下层实现之间的 鸿沟。 给出了a c d l - - a s p e c t j 的转换规则,对a c d l 语言在实际应用上的意义进 行了尝试性的探索。 实现了a c d l 语言的辅助工具a j m a k e r ,为a c d l 语言的应用给出了支持。 华东师范大学硕士学位论文 1 4 本文的组织结构 本文的具体组织结构安排如下: 第二章详细介绍了面向方面编程技术。 第三章介绍了契约式开发的概念,分析了基于a o p 的契约式开发的优势, 总结了a o p 和d b c 之间的对应关系,并介绍了国内外在相关领域的研究现 状。 第四章介绍了a c d l 语言的设计目的、语言特征及语法规则等,同时分析了 a c d l 与上层设计和下层实现之间转换的意义及可行性,并提出了一种统一 基于a o p 的契约式软件开发流程的整个过程的方案。 第五章给出了a c d l - a s p e c t j 的映射规则,并介绍了a j m a k e r 工具的实现框 架。 第六章对全文做出了总结,并对未来的工作做了展望。 6 华东师范大学硕上学位论文 第二章面向方面编程 程序设计是- - 1 7 有着扎实基础的学科,随着软件开发规模的扩大和开发方法 的变化,各种各样的程序设计方法应运而生。从最初的结构化程序设计方法,到 模块化程序设计方法,再到目前如日中天的面向对象方法,每一种新技术的出现 都对软件开发方法的发展起着推波助澜的作用。目前编程领域中最热门的新概念 莫过于面向方面编程,a o p 概念自从1 9 9 7 年第一次被提出以来,已经引起了学 术界乃至工业界越来越多人的关注,并被m i t 技术评论杂志评为2 1 世纪十 种对经济和人类生活工作方式最具影响力的技术之- - 1 0 。本章将从a o p 的产 生背景、基本思想、实现原理及最新研究领域等方面对该技术做一个详细的介绍。 2 1a o p 产生背景 随着软件系统规模的日益庞大和应用领域的不断扩展,软件变得越来越复 杂,如何控制这种复杂性一直是软件研究人员关注的重点,控制和减少软件复杂 度的过程也促进了软件技术本身的巨大发展。 d i j k s t r a 认为控制复杂性的技巧在于分解和规则 1 1 】,在设计一个复杂的软件 系统的时候,将其“分而治之”是一种基本方法。2 0 世纪6 0 年代末出现了面向 过程的开发方法,这是一种自顶向下,逐步求精的方法,其实质是对软件进行功 能性分解,这种方法在面对一些小型的软件系统时可以较好地解决问题,但在应 对大型应用系统的时候就显得有些势单力薄了,软件开发人员经常感觉在重复劳 动,程序的可重用性差,维护代价高。 与面向过程的程序设计方法相比,面向对象编程具有良好的封装性、多态性 和继承性,已经发展成为当今软件开发的主流方法。o o 的开发方法不仅在一定 范围内支持软件复用,而且能够将现实世界问题领域的“名词”解析成由数据和 抽象行为组成的各种“对象”,很好地解决了软件系统中角色划分的问题,自然 地完成从问题到软件的转换。然而,在实际的问题领域中,软件系统有着纵横交 错的结构( 图2 1 ) ,有一些需求不是用“名词”可以描述的,o o 的方法只能通 过继承表达纵向的联系,而忽略了类与类之间横向的联系,结果导致这些需求被 很多类所共享,造成系统模块封装不严密,划分的角色也不清晰,这显然与面向 对象思想相违背,给维护和复用带来了沉重的负担。o o p 开发中存在的问题可 以总结为以下两类【1 2 】: 1 ) 代码混乱 软件系统中的模块可能要同时兼顾几个方面的需要。譬如,开发者经常要同 7 华东师范大学硕士学位论文 时考虑业务逻辑、性能、同步、日志和安全等方面,兼顾各方面的需要导致相应 关注点的实现元素同时出现,引起代码混乱。 2 ) 代码分散 由于横切关注点本来就涉及到多个模块,相关实现也就分散在这些模块中。 如在一个使用了数据库的系统里,性能问题就会影响所有访问数据库的模块。这 导致代码分散在各处。 瓤向j 泼意 啦 i肇 黼 1 女; l 缓 ; ll ; ; | 山l i 坍美篷点 图2 1 软件系统的纵向和横向结构 混乱和分散的代码会从多个方面影响系统的设计和开发,造成代码的可读性 差,重用率低,代码质量差,难以扩展等问题。引起这些问题的根本原因在于: o o p 技术倾向于使用一维的方法学来处理分散的横切需求。把对应需求的实现 强制在一维的空间里。这就导致了n 维的问题空间到一维的解空间的糟糕映射, 图2 2 说明了这个问题。 商务逻辑 日志记录 关注点空阿 持久化 日毒记录 瞽久化 群空阎 图2 2n 维问题空间与一维解空间的映射 为了解决这些问题,研究人员认为,需要一种新的程序设计方法从另一个角 华东师范大学硕士学位论文 度对软件系统进行抽象,将传统的按功能或按对象划分程序模块的方法转化为按 系统特征划分程序模块。1 9 9 7 年,在欧洲面向对象编程大会( e c o o p ) 上,施 乐公司帕洛阿尔托研究中心( x e r o xp a l oa i mr e s e a r c hc e n t e r ) 的g r e g o rk i c z a l e s 等人在实践的基础上第一次提出了a o p 概念。之后,各大公司及研究机构都纷 纷投入了人员进行研究,a o p 的概念由此诞生。 需要强调的是,就像面向对象方法没有完全抛弃面向过程方法一样,a o p 也不是一种取代性的技术,它是在o o 方法的基础上发展起来的,是对o o p 的 扩展和延续。 2 2 面向方面编程概述 2 2 1a o p 核心思想 在面向对象的程序设计中,人们把系统看作是由一个个从现实问题中的“名 词”转化而来的对象所组成,而在面向方面的程序设计中,则可以把一个复杂的 系统看作是由多个关注点所组合实现的。一个关注点就是一个为了满足系统整体 目标而必须被处理的特定需求或考虑 1 2 】。a o p 的核心思想就是实现关注点的分 离,图2 3 从面向方面技术的角度展示了一个典型应用系统的构成情况。 图2 3 关注点的分离 9 华东师范大学硕士学位论文 可以将一个软件系统的关注点分为核心关注点和系统级关注点,其中核心关 注点指的是系统要满足的业务逻辑需求,而系统级关注点则没有相关业务逻辑, 但却是各个业务子系统都可能涉及的一些公共行为,也就是所谓的“横切关注点 ( c r o s s c u tc o n c e r n ) ”。例如,一个信用卡处理系统的核心关注点是借贷存入处理, 而系统级的关注点则是日志、事务完整性、授权、安全及性能问题等。使用传统 的编程方法,这些横切关注点会横越多个模块,使系统难以设计、实现、理解和 升级,而a o p 就能对横切关注点进行分离,另外,它还提供了一种可以明确捕 获横切关注点的语言机制,将横切关注点以模块化的形式来实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论