已阅读1页,还剩87页未读, 继续免费阅读
(计算机软件与理论专业论文)面向方面建模技术的研究.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工程大学硕士学位论文 摘要 关注点分离和建立模型是软件工程中降低软件系统复杂度的两个重要手 段。面向对象技术在关注点分离与面惫对象建模领域取得了重大的进震,但 仍然存在不足,尤其是在横切关注点的模块化及软件生命周期中软件制晶的 可遭溯牲方面。面向方面技术在面向对象技术的基础上提出了一种新的横切 关注点的模块化单元:a s p e c t ,很好的解决了横切关注点的模块化。然而,目 嚣面向方面技术没鸯提出正式的建模技术和工具。面向方面建模已经成为面 向方面技术进一步发展的瓶颈。 本文首先在讨论传统关注点分离技术的基础上,遥过对一种薪兴的蘧向 方面程序设计语言a s p e 种c + + 的研究,分析了a o p 的核心思想和基本概 念,并讨论了与传统关注点分离技术比较,a o p 技术的优势。 其次本文分析了当前国内外各种面向方面建模技术的研究现状,总结了 目前国内外面向方面建模语言研究的蟋种趋势,探讨了基于u m l 可扩展机 制进行面向方面建模语言研究的可行性。其中重点讨论了两种面向方面建模 方法拍e m e 方法和基于髑例面向方面建模方法。 最后本文对t h e m e 方法进行了改进,在t h e m e 方法中引入了用例技术, 称为t h e m e u c 方法。t h e m e u c 方法通过建立用例模型对需求建模,识别 软件系统中的关注点,识别的关注点使用t h e m e 这种模块化单元表示:基于 u m l 扩展机制提出了一个丽向方面的u m l 特性描述,结合现有的建模工具 对识别的t h e m e 分别设计。通过一个a t m 系统实际应用了t h e m e u c 方法。 关键谲:面向方面程序设计;面向方面建模;关注点分离;u m l 特性 描述;t h e m e 哈尔滨工程大学硕士学位论文 a b s t r a c t s e p a r a t i o no fc o l l e e na n dm o d e l i n ga r et h et w om o s ti m p o r t a n tm e a n st o d e p r e s st h ec o m p l e x i t yo fs o f t w a r es y s t e m 0 b j e c t o r i e n t e d s o f t w a r e d e v e l o p m e n th a sm a d eg r e a tp r o g r e s si nt h ef i e l d so fc o n c e r no fs e p a r a t i o na n d o b j e c t o r i e n t e dm o d e l i n g h o w e v e r , o o s dc a l ln o te 伍c i e n t l yr e s o l v et h et w o p r o b l e m s ,t h em o d e l i n go fc r o s s c u t t i n gc o n c e r n sa n dt h et r a c e a b i l i t yd u r i n gt h e l i f e c y c l eo fs o f t w a r es y s t e m a s p e c t - o r i e n t e dp r o g r a m m i n ga m e l i o r a t e st h ef i r s t p r o b l e mb yo f f e r i n gt h ec o n c e p to fa s p e c tw h i c hs u p p o r t sl o c a l i z i n gt h es e p a r a t i o n a n dm o d u l eo fc r o s s c u t t i n gc o n c e m s a s p e c t - o r i e n t e dm o d e l i n gs p e c i f i e s 、r e c o r d s a n dv i s u a l i z e st i l ei d e a so fa o p b u t a tp r e s e n t ,a 0i t s e l fo f f e r sv e r yl i t t l et o s u p p o r tt h ed e v e l o p e r si ne x p r e s s i n gt h e i ra os y s t e m sw i t haf o r m a lm o d e l i n g t e c h n i q u e n o wa o m h a sb e c o m et h eb o t t l e n e c ko f a o s d f i r s t l y , t h i sp a p e rr e s e a r c ha n da n a l y z et h ek e yt h e o r ya n dt h ee s s e n t i a l c o n c e p t o fa o p a tt h es a m et i m e ,t h i sp a p e rr e s e a r c ha n da n a l y z e a s p e c t o r i e n t e dp r o g r a m m i n gl a n g u a g ec a l l e da s p e c t c + + w h i c he x t e n d sf r o m c + + t h e nw ed i s c u s st h ep r e d o m i n a n c eo fa o pc o m p a r e dw i t ht h ec o n v e n t i o n a l t e c h n i q u e sa b o u ts e p a r a t i o no fc o n c e r n s s e c n d l y ,t h i sp a d e ra n a l y z et h ec u r r e n tn a t i o n a la n da b r o a dr e s e a r c hs t a t u so f a s p e c t - o r i e n t e dm o d e l i n g ,i n d u c et w ok i n d so fr e s e a r c hw e n d so fa o ml a n g u a g e , e x p l o r et h ef e a s i b i l i t yo fa o ml a n g u a g eb a s e do nu n i f i e dm o d e l i n gl a n g u a g e i n t h i ss e c t i o n w em a i n l yd i s c u s st w om e t h o d so fa o m 砀ef i r s ti s 刀坩m em e t h o d , t h es e c o n di sa o s d m c f i n a l l y , t h i sp a p e ra m e l i o r a t e st h et h e m ea p p r o a c hb yi n t r o d u c i n gu s ec a s e w ee a l lt h en e wa p p r o a c ht h e m e 厂u ca p p r o a c h t h et h e m e 厂u ca p p r o a c h i d e n t i f i e st h ec o n c e r n so fas o f t w a r es y s t e mb yc o n s i t u t i n gu s ec a s em o d e l a 1 1t h e i d e n t i f i e dc o n c e r n sa r em o d u l e db yan e wu n i o ne a l l e d ”t h e m e ”t h et h e m e u c a p p r o a c ha l s oe x t e n d sau m lp r o f i l ef o ra o ma n di ti si m p l e m e n t e db yu s i n g r a t i o n a lr o s ee x t e n s i b i l i t yi n t e r f a c e a tl a s t t h et h e m e u ca p p r o a c hi sa p p l i e d t ot h ea t m s y s t e m k e yw or d s :a o p ;a o m ;s e p a r a t i o no fc o n c e r n s ;u m lp r o f i l e ;t h e m e 哈尔滨工程大学 学位论文原刨性声明 本人郑重声明:本论文的所有工作,是在导师的指导 下,由作者本人独立完成的。有关观点、方法、数据和文 献的引用已在文中指渤,并与参考文献相对应。除文中己 注明引用的内容外,本论文不包含任何其他个人或集体已 经公开发表的作品成果夺对本文的研究做出重要贡献的个 人和集体,均已在文中以明确方式标明。本人完全意识到 本声明的法律结果由本人承担。 作者( 签字) : 圜期:驴唱年。乞月乞? e t 哈尔滨工程大学硕士学位论文 第1 章绪论 1 1 研究的目的与意义 数十年来,关注点分离问题一直是软件工程的核心问题之一 1 3 。关注点 分离( s o c ,s e p a r a t i o no fc o n c e r n s ) 体现了解决问题的非常简单而深刻的 “分而治之”的思想。通过关注点分离把一个复杂的问题分解成若干个简单 的相互关联的子问题,然后逐个解决这些相对简单的子问题。这有助于降低 解决问题的难度以及增加开发人员对整个问题域的理解。目前常用软件开发 方法在支持开发人员通过分离关注点的途径解决复杂的软件开发问题方面有 了很大进展,比如面向对象方法。这种软件开发方法通过在软件生命周期各 个阶段不同程度的支持识别和模块化关注点,降低了软件系统的复杂度,极 大地提高了软件开发的效率,并不同程度的提高了软件系统的可理解性、可 重用性、可追溯性及可演化性。 近年来,面向对象方法受到广泛的应用和发展。但是从软件开发生命周 期来看,面向对象还有一些不足之处。 1 需求分析阶段:一般采用用例驱动分析,但是,大部分用例不是独 立的,用例之间可能存在重叠,用例可能同时发生,互相影响。 2 设计阶段:面向对象的设计在结构上与面向对象代码相匹配。但是 需求领域关注点的单位与面向对象设计关注点的单位有本质性的差别,这导 致一个需求关注点可能由多个对象实现,或者一个对象实现了多个需求关注 点或者多个需求关注点片断。后一种情况导致“代码散射 和“代码缠结 现象。 3 实现阶段:o o p 将所有数据和方法都封装到相应的类中,这有利于 增强数据的安全性和模块化,但也有一些数据和方法是特定于具体应用的, 哈尔滨工程大学硕士学毹论文 因此这种封装简时也减少了代码和模块重用的霹畿性。 4 。维护阶段:由于对象实现中夹杂了其他各种特定于应用的代码,使 得对象麓功能变得模糊,维护人员难以理解。此外由于“代码散射 和“代 码缠结”现象的存在,实现莱一关注点的代码散布在各个对象中,当需求变 化隧,缀难修改,这给维护增加了难度。 针对以上问题,面向方面程序设计( 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 ) 2 3 和丽囱方面软传开发方法( a s p e c t - o r i e n t e ds o f t w a r ed e v e l o p m e n t , a o s d ) 应运丽生。 号| 入面向方面程净设计是势了解决上文提到的“代码散射 鞠“代码缠 结 问题。开发者通常会受到系统的主要逻辑分解结构的支配,这意味着无 论选择何种模块纯技术,在一定程度上都对设计强加了一些不褶手的约束。 在面向对象方法中,支配性的分解结构是类和方法的模块化。这种支配性表 明这样麴事实:7 当使用覆彝对象时,开发者的设计决策必定会导致散射翔缠 结,并且,有时开发者盛须抛开良好模块化的思想,设计患与对象模型横切 的代码。两a o p 搜开发者免受这一限制,a o p 允许开发者在苓考虑系统的结 构性实体的情况下,对系统的横切部分进行建模。a o p 逶过提供一种描述帮 模块化横切关注点的单元:a s p e c t ,对横切关注点进行模块纯,邸把实现横 切关注点的代码放置在单一地点,然磊逶过编织机制将其传播到各个被横切 关注点,较好地解决了前文中给出的面向对象方法的不足之处。 值得一提的是,面向方露编程技术不是对面南对象编程的酱彳弋,丽是对 面向对象编程技术的有益补充。据以i v a r3 a c o b s o n 为代表的科学家推测, 髑p 将成为编程方法学的下一个里程碑【3 】。 瑟前面向方面慝想的应用主要限于程序设计阶段,般在需求或设计阶 段,往往是使用面向对象方法描述,在实现阶段转向面忍方面程序设计或者 面向方面与面向对象相结合的程序设计。这使褥在软件系统生命周期各个阶 段产生的制晶所提供盼信息不一致,妨碍了软件系统的可理解性、可重翔性、 可追溯性,同时也影响了面向方面程序设计的进一步应用。因此为了进一步 2 哈尔滨工程大学硕士学位论文 推动面向方面程序设计在软件开发中的应用,势必要深入研究如何把面向方 面思想应用在软件开发生命周期的早期阶段:需求工程、分析和设计阶段, 如何在这些早期阶段应用方面技术识别和模块化横切关注点,并将这种模块 化延续到软件生命周期的后续阶段,从而保证在软件系统生命周期各个阶段 产生的制品所提供的信息的一致性。以上内容是面向方面建模技术的主要研 究内容,这也是本文研究的重点和主要内容。 1 2 国内外研究现状 在软件开发过程中,建模是表达开发思想的重要的方式。随着a o p 技术 的不断发展、成熟及应用,面向方面建模( a s p e c t o r i e n t e dm o d e l i n g ,a o m ) 已经成为a o p 领域的重要课题。面向方面建模的目的在于利用建模语言为系 统进行基于面向方面的分析和设计,使开发人员在需求工程阶段就能够有效 分离关注点,并采用相应的语言构造块模块化并可视化表示组成问题域的关 注点,从而为接下来的分析、设计、实现及维护等工作带来便利和保障,从 而保证需求、分析、设计和实现各个阶段所提供信息的连续性。 面向方面程序设计是一个比较新的领域,其自身至今仍未提供标准的建 模技术和方法。作为面向方面软件开发的一个重要分支,目前a o m 的研究 工作在国内外各个研究机构都开始开展,不同的研究人员从不同的角度对 a o m 进行研究,并取得了具有启示意义的研究成果。有的研究人员侧重于 需求工程阶段引入方面概念标识关注点进行需求建模,比如基于视点的需求 工程方法【4 】、面向目标的方法【5 】、多维关注点分离 6 】 7 】等,有的研究人员 侧重于引入方面概念进行软件系统体系结构建模,比如p c s 框架 9 】、 d a o p a d l 方法 1 0 】、a o g a 方法 1 1 1 1 1 2 、t r a n s a t 方法【2 7 】,有的研究人 员侧重于设计阶段通过引入方面概念建立设计模型 2 0 2 1 。还有一些方法, 贯穿于软件生命周期早期各个阶段,形成一种方法学的雏形,比如t h e m e 方 法 3 0 3 1 3 2 】以及基于用例的面向方面分析与设计 3 】。 哈尔滨工程大学硕士学位论文 面向方面建模技术的研究主要包括三个方面的内容:建模语言研究、指 导建模过程的方法学研究以及建模工具的研究。大部分面向方面建模技术的 研究侧重于建模语言的研究,对于方法学研究及建模支持工具的研究或者没 有涉及或者依托于现有的方法学,比如用例驱动的软件开发,只有很少的研 究工作提出了新的方法学,比如t h e m e 方法。因此,在以下的讨论中主要讨 论面向方面建模语言的研究。 面向方面建模语言的研究目前有两种趋势:一种是基于软件体系结构描 述语言进行研究,一种是基于u m l 进行研究。 基于体系结构描述语言的研究 1 6 】主要从软件体系结构的角度出发,使 用软件体系结构描述语言表达面向方面的概念,通过添加“方面”和“连接 点 等新的a d l s 组件元素支持面向方面的建模,“方面”和“连接点”间的 编织行为可以通过组件间的连接器实现,最终完成整个系统的建模设计。基 于a d l 的研究相对来说启动较晚,发展不成熟。 当前基于u m l 面向方面建模方法主要分成三类: 第一种是利用现有u m l 的高级特性表达面向方面的概念,成为行为建 模。例如文献 5 4 1 中使用活动图、文献 3 0 中使用时序图表达面向方面中的“通 知”概念。 第二种是基于u m l 的扩展机制,建立u m l 特性描述,表达面向方面 的概念,如 2 1 1 1 2 2 。 最后一种是利用m o f 扩展机制直接支持面向方面概念的可视化建模。 文献 2 5 2 6 】提出一种基于元模型的建模思路,但是,显式的将横切模块横跨 于被横切的模块表达编织相关性有一定的局限性,因为如果横穿的行为涉及 多达几十种正交模块时,这种表达方式具有局限性。t r a n s a t 框架 2 7 1 借鉴 a o s d 的基本原则发展了一种管理软件体系结构规格演化的框架,该框架使 用p o i n t c u tm a s k 的概念支持关注点的编织,t r a n s a t 将软件开发过程看成是 一个不断演化,以体系结构不断修改为导向的过程。 4 哈尔滨工程大学硕士学位论文 1 3 论文的主要工作及组织方式 本文在研究和分析a o p 的核心思想,a o s d 基本概念和发展现状,以及 一种丽向方面程序设计语言a s p c c t c + + 的基础上,提出一种基于u m l 扩展机 制面向方面建模方法。主要工作包括: 1 比较了面向对象和面向方面软件开发方法在模块化横切关注点以及适 应需求变化方面差异。 2 对面向对象和面向方面建模方法进行了总结和比较。 3 基于u m l 扩展机制对a o m 技术进行了研究,给出了一种面向方面 的u m l 特性描述。 4 对t h e m e 方法进行了改进,提出了种新的面向方面建模技术: t h e m e u c 方法。 论文结构安排如- f : 第1 章从面向方面编程技术的起源及其发展现状描述了本论文的研究背 景,概括了冒前国内外该领域的研究现状,简述了本论文薛研究内容意义。 第2 章首先介绍了关于关注点分离的研究,然后讨论面向对象技术在关 注点分离方面的不足以及因此产生的弊端,最后介绍了面向方面编程技术的 核心内容,并结合一种面向方面程序设计语言:a s p c c t c + + ,对a o p 核心概 念、各个概念闾关系以及它们与0 0 核心概念之闻的映射进行了深入的讨论 和研究,并提出了不同的理解和认识,为建模奠定了基础。 第3 章对国内终a o m 技术研究的现状进行了详细的介绍,并结合面向 对象建模技术对几种比较有影响力的a o m 技术进行了分析和讨论。总结了 当前a o m 研究的贡献与不足。最后分析了u m l 及英扩展机制,分析了基予 u m l 扩展机制面向方面建模的可行性。 第4 章在第3 章讨论的基础上详细阐述了本文面向方面建模技术的设计 思想,并针对面向方面核心概念设计相应表示法,提出了一种改进的基于 t h e m e 方法和u m l 扩展机制的面向方面建模方法。 5 哈尔滨工程大学硕士学位论文 第2 章关注点分离与面向方面程序设计 2 1 关注点分离 关注点分离是软件工程中最重要的原则之一。通过关注点分离把一个复 杂的软件系统分离成若干令相互独立的部分,然嚣分别实现,这样既降低了 问题的规模和实现的难度,同时通过关注点分离,建立解决模型,开发人员 对整个系统的结构有了一个清晰的认识稠理怨,这对于系统开发的成功以及 系统的可理解性、可维护性、可演化性都带来了很大的益处。 既然关注点分离在软件开发中如此重要,那么让我们回顾一下关注点分 离相关定义以及各个软件开发方法在实现关注点分离方面所提供的方法和设 施。 2 。1 1 关注点定义 所谓关注点,是指一个特定的目标、概念或者兴趣域。例如:关注点可 以是一个功能性需求、一令非功簏性需求或者是一个系统的设计约束。关注 点甚至可以不是一个需求,比如嵌入式系统开发中的内存资源。 从过程的焦度,典型的开发关注点包括需求分析、设计、编码、测试和 维护。从直观上来看,关注点分离与需求工程之间关系甚密,在各个软件开 发方法中主要在需求分析阶段进行关注赢分离,并进行概念建模工作。但芷 如前文中提到,需求与设计或实现阶段对于关注点的描述单位不一定一致, 这导致需求工程阶段建立的需求模型与设计或实现阶段建立的模型之间存在 不匹配的现象。如图2 1 所示。 6 堕玺鋈i ;耋銮耋堡圭耋誓鲨吝 圈 图2 1 需求与设计的不匹配 从图中可以看出,对于确定的抽象层中的关注点,在实现层次可能有三 种表现:该关注点的实现与其他的关注点的实现代码缠结在一起;该关注点 的实现分散在实现代码的多处,但是与其他关注点相互独立;该关注点的实 现独立的封装。前两种情况下,关注点的实现或者散布于软件各处或者是与 其他的关注点实现夹杂,都未能集中在一个模块中实现,这在一定程度上会 妨碍软件系统的可理解性、可追溯性和可充用性:而第三种情况则是实现阶 段最理想的关注分离的情形。由此可见,如何保证构成一个复杂软件系统的 关注点在软件生命周期各个阶段在内容上和单位上的一致性、连续性是一个 值得研究的问题。 从技术的角度,一个典型的软件系统分别包含若干核心级和系统级的关 注点。核心级的关注点就是系统要完成的业务功能;而系统级的关注点是完 成核心关注点所必需的配套设施。这些配套设施常常被认为是整个系统的系 统特性,或者是业务功能的功能约束。例如一个嵌入式气象系统的核心关注 点是预报天气,包括:气温、湿度、风力和风向等。而系统级的关注点则包 括可靠性、资源限制等。传统的软件开发方法在需求工程阶段建立概念模型 时,一般主要关注核心级的关注点,即一个软件系统的功能性需求,例如面 向过程和面向对象软件开发方法。这些方法在需求工程阶段集中关注核心级 的关注点,而将系统级的关注点推迟到设计或者实现阶段解决。 根据关注点是否具有“横切特性”,可将关注点分类为普通关注点和横切 嗡尔滨工程大学硕士学位论文 关注点。所谓“横切特性 指如果某一个关注点的实现代码无法模块化,而 是散布于系统其他模块的实现代码中,和若干个其它的关注点相互交织,剡 称该关注点具有“横切特性”。横切关注点一般为系统级的关注点,通常系统 级的关注点在逻辑上相互之间彼此正交( 相互独立) ,同时在实现上趋向于翻 若干个核心级的关注点交织。核心级的关注点在实现上与其他的关注点不存 在交织现象,一般为普通关注点,但某些核心级的关注点彼此间也存在交织, 这样的核心级的关注点也应看作横切关注点。 2 。2 关注点分离研究概述 2 ,2 疆向过程关注点分离技术 在面氲潜象程穿设计之前占主流的程序设计方法是瑟向过程的结构化分 析方法。结构化程序设计采用自顶向下逐步求精的功能分解方法和单入口单 出口的控铡部件,将功麓分解为相对独立的模块,形成树状结构,每个模块 内部采用顺序、分支、循环三种基本结构组成,这三种基本的控制构件奠定 了结构程序设计的理论基础。其模块化的具体实现单位是:子程序。 “子程序”的思想在传统的程序设计方法中占有重要地位。自f o r t r a n 语言以来的所有编程语言,都能通过创建并显示调用子程序的方法,来部分 地分离系统关注点。然而,并不是所有的关注点都能很好地通过予程序实现, 尤其是横切关注点。无论是核心级关注点还是系统级关注点。当横切关注点 的实现代码和其他关注点的实现代码缠结在一起的时候,程序的模块性被破 坏,复杂性增加。并且,进行予程序调用的程序员,必须对被调用的子程序 有足够的了解。就是说,一段程序必须知道要显示地调用另一段子程序,并 知道怎样去调用,这极大限制了程序员并行独立解决子问题的能力。 上述调用子程序对被调用子程序的了解,可以用“知觉性 这个概念来 概括。这与a o p 中的“不知觉性”相对应。本文在后续章节将会涉及这一概 8 哈尔滨工程大学硕士学位论文 念。 2 2 2 面向对象关注点分离技术 面向对象方法支持软件模块化的主要手段是:使用对象来表示实钵,两 不管实体是现实世界的、设计中需要而虚构的,还是软件系统或系统内部的 参与者。 面向对象方法中支持模块化的单位不仅仅是对象,表2 1 列举并阐述了 面囱对象方法中常用的单位及其含义。这些概念的定义参见文献【3 0 】。 表2 1 面向对缘封装单位 概念定义 对象 抽象概念的具体表示;具有明确定义的边界和身份的实体,其中封 装了状态和行为;类的实例 类 一组具有相同的属性、搡作、关系和语义的对象的描述 属性 类的一个有名字的属性,描述了该属性的实例可取值的范围 操作服务的实现,类的任意对象都可以请求该服务,会影嚷的行为 接口 一组操作,用来定义类或组件所提供的一个服务 方法搡作的实现 在面向对象方法中,最初选择“对象 作为基本分解单位的动机在于:、 模拟现实世界的对象,从而使软件系统易于理解和开发。使用对象,可以按 照系统中的实体来分解并描述系统,这些实体也可以扩展并重用。此外,由 于可以按照描述和使雳现实世界中对象的方式建立模型,因此对象概念在软 件开发中比较直观其与人类的思维习惯保持一致。 面向对象方法通过对象静聚集和通信,构建复杂的软件系统。同时,o o p 提供了继承和多态机制。使用继承和多态机制,简化了某些特殊对象之间的 关系,提高了程序设计的灵活性。与结构化程序设计的送数相比,类是逻辑 上相关的函数与数据的封装,是对所要处理的闯题的描述。o o p 很好的解决 9 哈尔滨工程大学硕士学位论文 了软件系统中角色划分问题,借助于面向对象的分析、设计和实现技术,开 发者可以将问题域的“名词转换为软传系统中的对象,从而自然的完成从 问题空间到解决方案的转换。从某种程度上讲,面向对象软件方法消减了问 题空间到解决方案的语义断层,为需求建模和软件实现提供了直接的语言支 持。 随着面向对象程序设计的发展,面向对象方法在对横切关注点的模块化 方面也进行了大量的研究,并取得了一定的进展。相应的技术包括框架技术、 设计模式以及混入类。 e j b 架构提供了面向特定阏题域的解决方案,它针对安全、系统管理、 性能、容器管理的持久化和数据的持久化等横切关注点提供了专门机制,在 一定程度上更好的模块化横切关注点。这种方式解决了特定问题,这是它的 优点,但同时这也带来了相应的局限性。 瑟前许多优秀的轻量级框架使扇了一种称为控制反转模式的设计模式。 控制反转模式通过依赖注入机制将对象之间的依赖关系由被动变为主动,从 一定程度上减轻了系统的藕合凄。僵对于形式多变的横切关注点,这种模式 不能从根本上解决关注点的有效分离。 混入类技术的基本策略是推迟关注点的实线。基础类包含一个混入类的 实例,允许系统的其它部分设置这个实例。 从总体上讲o o p 只能使用一种主要的方式,铡如类,来处理横切关注点 的模块化,这就是通常所说的“支配性分解的专制性 ,这样就导致一些关注 点可以有效地分离,两有些关注点不能有效地分离,其实现代码或者散布在 整个系统之中,或者与其他关注点实现代码缠结。 2 。3 传统关注点分离技术的不足 丽文献 3 8 1 中认为面向对象技术在关注点分离和封装方面的不足在于: 需求在本质上是无法和对象和谐一致的。二者之间,存在所谓的“跳跃 或 l o 哈尔滨工程大学硕士学位论文 “变换”。需求和对象之间最大的差异在于它们所采用的表示单位是不一致 的。 表示需求的单位有:特性、能力、服务、功能等。而面向对象中的单位 有:类、对象、接1 2 1 等。在结构上,需求领域关注的单位与面向对象关注的 单位有本质性的差别。在需求阶段所关注的需求单位,通常无法很容易地转 换到面向对象设计和实现阶段。从需求定义到面向对象的映射必须有一个变 换,以便从需求阶段所关注的特性( 或功能、服务等) 迁移到面向对象所关 注的对象。 文献 3 8 中给出了一个简单表达式求值系统( e x p r e s s i o n e v a l u a t i o n s y s t e m ,e e s ) ,采用面向对象技术进行分析和设计,通过一个简化的软件开 发过程说明了面向对象技术在模块化横切关注点以及适应需求变化方面的不 足。需求定义以自然语言给出。 2 3 1 需求定义 e s s 系统需求如表2 2 所示。 表2 2 表达式求值系统需求定义 需求编号需求描述 r 1计算功能,确定表达式的计算结果 l 也 显示功能,以文本形式显示表达式 l u 语法检查功能,确定表达式的语法语义是否正确 l 日志功能,语法检查、显示和计算都应该存入日志 r 5 e x p r e s s i o n :- - v a r i 曲l e e x p rln u m b e r e x p r p l u s o p m i n u s o pl u n a r y p l u s o pu n a r y m i n u s o p r 6 p l u s o p := e x p r e s s i o n + e x p r e s s i o n r 7 m i n u s o p := e x p r e s s i o n 一e x p r e s s i o n r 8 u n a r y p l u s o p := + e x p r e s s i o n l 姆 u n a r y m i n u s o p := 一e x p r e s s i o n r 1 0 v a r i a b l e e x p r := ( a i b i l z ) + e x p r e s s i o n r 1 1 n u m b e r e r := ( 0 l 1 l i 9 ) + e x p r e s s i o n 哈尔滨工程大学硕士学位论文 通过对上述需求定义进行简单分析,可以得到e e s 系统的部分关注点, 参见表2 3 。 表2 3 表达式求值系统个关注点与实体 关注点名称类型备注 表达式问题域实体 计算核心关注点计算给定表达式的值 显示核心关注点以字符串形式显示一个表达式 语法检查核心关注点 日志 系统关注点语法检查、显示和计算都应该存入日志:这 里延伸出日志文件,这不是一个领域实体 日志文件一般实体 2 3 2 面向对象分析与设计 e e s 系统非常简单,我们从直观上可以察觉到关注点“表达式 可以使 用结构型c o m p o s i t e 模式【4 3 】进行设计。表达式对象结构如图2 2 所示。 图2 2 表达式对象结构 对于关注点“语法检查 ,考虑到每一个类型的表达式语法检查规则不尽 相同,每一个子类型需要自己的语法检查逻辑。按照面向对象方法的设计原 则,在超类中定义虚函数,然后由派生类重载相应的虚函数。对于另外两个 核心关注点“计算”与“显示 的设计类似。静态结构图如图2 3 所示。 1 2 哈尔滨工程大学硕士学位论文 图2 3e e s 系统静态结构 以上采用了面向对象中的类概念对e e s 系统中的三个核心关注点进行模 块化。从图中我们可以看到,关注点“语法检查 由l i t e r a l 、u n a r y o p 以及 b i n a r y o p 这三个类实现,它的实现代码散布在多个类的同名操作中。关注点 “计算与“显示挣的实现与“语法检查的实现相同。 剩下需要设计的关注点是“同志”,曰志需要记录所执行的操作,它被认 为是一个横切关注点。从关注点“日志黔的自然语言描述中可以比较容易的 观察到,它与关注点“语法检查 、计算、“显示”之间都有横切。以下以 语法检查为侧讨论在西向对象中如何处理这种横切关注点。 图2 4 显示了一个示例序列图,对应于c h e c k ( ) 操作的日志记录。 回匡鲴囤囤 卜_ _ 嶷;: | e 撼; |ll 、l 巍,、诹删 ;卜、躺渐料,: ;卜一? 釉卜一 ;r 艺乏o 1 : l l 赫,潮 l 一;c ! ! l 一 妊一一一一一一一一j 图2 。4 邑志横切示意篷 从图中可以看出,在每一次调用语法检查前后都需要调用曰志用于记录 操作的执行情况。这种实现使褥霉志关注点与语法检查关注点的实现代码缠 结在一起。 哈尔滨工程大学硕士学位论文 增加日志关注点后,e e s 静态结构如图2 5 所示。日志功能建模为类 l o g g e r 。日志文件建模为类l o g f i l e 。 r 器一留 2 。3 2 。1 讨论 图2 5e e s 系统静态结构 在本节开始处给出了两种关于面向对象技术在关注点分离不足上的原 因,通过e e s 系统的面向对象的设计过程,可以看到,在面向对象设计时确 实存在上述因素。在e e s 系统的需求工程中,语法检查、计算、显示被看作 是模块化的关注点,但在面向对象设计中并不是,它们都被分散的多个类和 操作中,每个类中都包含了针对自身情况而实现的上述关注点的方法,这是 典型的散射现象。而对于需求工程中被看作是横切关注点的日志,在设计时, 与其他的关注点的设计细节相交织,日志功能的完成需要其他的类的协作, 以便调用日志类的相应的方法。这是典型的缠结现象。 散射和缠结意味着模块化不足。首先单个需求变更造成的影响,尽管在 需求工程阶段可以很好的局部化,但由于设计时的散射,导致需求中单一的 改动便可能造成设计的类层次的多处改动;其次,这会对软件的理解和重用 造成严重的障碍;最后,实现可追溯性存在严重的困难,可追溯性要求要求 能够很容易的确定软件产品的一部分对其他部分的影响方式,可追溯性要求, 在已知对需求作出变更的情况下,能够找到该变更所有想到的设计和代码。 1 4 哈尔滨工程大学硕士学位论文 如果软件产品各个阶段的模块化无法匹配,那么可追溯性就是一句空谈。 2 。3 3 适应需求变化 一个成功的、有生命力的软件系统必须能够随着时间的推移而不断演化。 软件系统的演化可能是因为组织的业务过程重组,也可能是出现了新的需求。 为了避免在软件系统的演化过程中“侵入时改动,必须寻找到一些途径,遵 过这些途径可以以非入侵方式改动一个系统。近十年来,面向对象技术在这 一方面不断地徽出努力,并取得了一定酶发展,设计模式便是这个发震过程 中的产物。设计模式推荐了一些支持可扩展性的途径。为了观察面向对象技 术在适应需求变化的箍力,本节中对e e s 系统增加了新的需求,并运用设计 模式对上一节中给出的解决方案进行修改,以适应新的需求。表2 4 中给出 了新增的四个霈求 表2 4 表达式求值系统需求描述 需求编号需求描述 爻1 2 c h e c k - c l e f - u s e 功能,确保所有使震的变量都定义过,并且都被使 用了 r 1 3 c h e c k - s t y l e 功能,确保表达式符合本地的命名习惯 r 1 4 m i x - a n d m a t c h 选中功能,确保客户在使用检查工具时,可以麸语 法检查、c h e e k - d e f - u s e 和c h e c k - s t y l e 的各种组合中选择一种来运 行 r 1 5 c h e c k - d e f - u s e 帮c h e c k - s t y l e 搡作应记入警志 通过对上述需求定义进行简单分析,可以得到e e s 系统的新增关注点, 参见表2 。5 。 表2 5 表达式求值系统关注点与实体 关注点名称类型备注 c h e c k - d e f - u s e 孩心关注点阕题域实体 c h e c k s t y l e 核心关注点计算绘定表达式的值 m i x a n d m a t c h 核心关注点 以字符串形式显示一个表达式 瓣志系统关注点各释操作应记入弱志 对于上述的四个关注点,如果不使用设计模式的话,在设计上有两种处 哈尔滨工程大学硕士学位论义 理方式。第一种,向表达式对象结构层次中的每一个类中增加两个方法: d e f u s e c h e c k 0 和s t y l e c h e e k 0 操作。这种方法需要改变设计中的所有实体类, 属于侵入式修改。第二种方法,创建新的派生类,在新的派生类中覆盖原来 的语法检查c h e c k 0 方法,以便为表达式提供新的检查能力。这种方法是非侵 入式的,但这种方法针对大软件系统时,完全不切实际,每增加一个新的特 性,都有可能导致类的组合爆炸。 更好的方法是使用v i s i t o r 设计模式。v i s i t o r 模式是一种对象行为 型模式f 3 5 】,表示一个作用于某对象结构中的各元素的操作。它使得可以在 不改变各元素的类的前提下定义作用子这些元素的新操作。图2 6 表示了加 入v i s i t o r 后的e e s 静态结构图。 图2 6e e s 系统静态结构图 使用v i s i t o r 模式可以方便的为某对象结构,本例中是e x p r e s s i o n 对象 结构,增加新的操作,并且没有导致类的组合爆炸。这克服了面向对象设计 中累得组合爆炸的缺点,但是v i s i t o r 模式需要对e x p r e s s i o n 对象结构做一 项侵入式改动:加入方法a c c e p t ( v i s i t o rv i ) 以替代方法c h e c k o 。丽改动后为了 1 6 哈尔滨工程大学硕士学位论文 实现网志需求,如要在v i s i t o r 在适当的地方调用日志类,这引入了新的复 杂性,导致吕志关注点与v i s i t o r 缠结中,这在一定程度上加剧了目志关注 点的散射和缠结问题。 2 3 4 讨论 e e s 系统是一个小型系统,僵通过对蘧囱对象设计过程的分褥,可以看 出,即使是这样的小型系统,设计中的散射和缠结现象仍然非常明显,并且 当需求变化时,不能很好酶适疲需求变化。在过去十年中,面向对象社区一 直在努力寻找新的手段,以实现更好的模块化,并且取得了重要的进展g 设 计模式。设计模式能够在一定程度上解决一些闯题,但无法解决所有趣题, 并且设计模式在减少一些问题的同时,引入了新的问题或局限性。例如,向 现存系统中雩| 入设计模式时,可篚需要侵入性的改动和重构,避免侵入性改 动的唯一办法是预先就使用设计模式,但显然这很难做到。另外,灵活性总 是以概念上的复杂性和运行开销为代价,对于某些资源受限的开发环境,比 如嵌入式系统开发中,这样的灵活性是不可取的。 面向对象技术由于其本身的局限性,必然导致从需求到设计的转换中无 法和谐一致,从而产生模块化的问题。本文在下一节中介绍面向方面程序设 计,砸向方面程序设计在一定程度上弥枣卜了面向对象在模块化方面的不足, 是程序设计方法学的下一个明显的进步。 2 4 面向方面程序设计 2 。毒。1 面向方葱程序设计的起源 面向方面程亭设计提供了对横切关注点的模块化单元,在软馋开发生命 周期的早期阶段,有效地实现了横切关注点的分离和模块化。但是面向方面 1 7 哈尔滨一程大学硕士学位论文 程序设计对横切关注点的有效分离和模块化也不是一蹴而就,它经历了一个 漫长的发展阶段。 如果从软件工程的角度出发,追溯面向方面程序设计思想的起源,必须 考虑改进软件模块化方面的工作,两在这方面,研究人员已经工作了数十年, 但其中大部分工作不属于面向方面领域。目前公认有四种改进模块化的方法, 可以看作是面向方面软件程序设计的起源。这四种方法,每一种方法都通过 一个侧面反映了面向方面的思想。作者认为如果畿够理清面向方面程序设计 发展的脉络,掌握面向方面程序设计的发展趋势,将会更好的理解面向方面 程序设计的核心思想和本质,这必然有利于更好的进行面向方面建模的研究。 因此,本节内容主要讨论这四种方法。 2 4 1 1a s p e c t d 随着a s p e e t j 语言【2 】而流行起来的面向方面方法是最广为人知的。这种 方法是x e r o rp a r c 研究中心的g r e g o rk i e z a l e s 领导的一个小组在1 9 9 7 年开 发的。此前这个小组专注于m e t a o b j e e t 协议和r e f l e c t i o n ,而其思想逐渐演化 到对“横切关注点”的模块化。a s p e e t j 既是一种规约语畜,也是一种a o p 的实现语言。a s p e e t j 使用j a v a 语言实现单个关注点,并通过对j a v a 进行扩 展,提供了编织机制。 作为规约语言,a s p e e t j 定义了支持方面概念的语言结构和语义。 作为一种实现语言,a s p e c t j 为开发人员提供了编译、调试等工具,包括 a s p e c t 编织器、a s p e c t 调试器、文档自动生成工具、独立的a s p e c t 测览器。 此外,a s p e e t j 可以很好地和些流行的i d e 环境集成,包括s u n 的f o r t e , i b m 的e e l i p s c 等。 2 。4 。1 。2 关注点的多维分离 i b m 的个研究小组提出了多维关注点【6 】【4 5 】分解的思想,并提供了相 1 8 哈尔滨
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乙氧基化装置操作工成果转化考核试卷含答案
- 柠檬酸制造工安全专项评优考核试卷含答案
- 高分子防水卷材生产工岗前理论考核试卷含答案
- 随钻测量工班组评比测试考核试卷含答案
- 维纶热处理操作工冲突管理水平考核试卷含答案
- 供热管网系统运行工操作管理能力考核试卷含答案
- 水厂水质检测操作办法
- 某铝业公司原材料入库标准
- 沈阳市公共交通管理的困境剖析与优化策略
- 汽轮机通流部分:数值分析与热经济性诊断的深度探索
- 2026年北京市西城区高三一模地理试卷(含答案)
- 其他地区2025年昌都市政府系统急需紧缺人才引进招聘11人笔试历年参考题库附带答案详解(5卷)
- 2026统编版(新教材)初中语文七年级下册期中知识点复习要点(1-3单元)
- 2026广东广州铁路运输法院合同制审判辅助人员招聘3人笔试参考题库及答案解析
- 第三单元 认识国家制度 单元行动与思考 课件-2025-2026学年统编版道德与法治八年级下册
- 2026山东国泽实业有限公司招聘驻济人员4人笔试备考试题及答案解析
- 填介词或冠词(解析版)-2026年高考英语二轮复习(新高考)
- 初中生道德与法治课程中的学生法治教育路径探索教学研究课题报告
- GB 29742-2026镁及镁合金冶炼安全规范
- 雨课堂学堂在线学堂云《Age of Sustainable Development(SDG Academy)》单元测试考核答案
- 下肢深静脉血栓介入护理指南
评论
0/150
提交评论