(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf_第1页
(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf_第2页
(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf_第3页
(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf_第4页
(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

(计算机软件与理论专业论文)基于关注点空间模型的分离关注点的理论和应用.pdf.pdf 免费下载

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

文档简介

摘要 分离关注点原则是软件工程中最要的原则之一,然而随着软件复杂度的不断 提高,传统的分离关注点技术只允许按照一种方式分解系统越来越显出了弊端, 越来越多的关注点得不到有效分离。有效、充分地分离关注点要求软件系统能同 时按照多种方式进行分解,得到的软件模块在每个软件开发阶段都可被同时描 述,并且所有这些模块可以无缝地组合在一起成为一个被完整描述的系统。关注 点空问模型被提出用来组织和管理关注点,并且通过对关注点的组织和管理作用 于影响关注点的各种软件工件,在关注点这个抽象层上软件系统的复杂度得到降 低,可理解性得到提高。 本文讨论基于关注点空间模型的分离关注点的理论和应用首先,从各种分 离关注点技术的工作机制入手,提出概念性分解模型和物理分解模型的概念,并 基于此,讨论传统的分离关注点技术由于层次分解所引起的问题以及如何用横切 分解来解决,随后示例了如何设计和实现组合分解机制来达到横切分解。本文认 为概念性分解模型、物理分解模型和贯穿其中的组合分解机制是分离关注点的统 一基础。 接着,基于分离关注点的统一基础理论,本文讨论分析了对关注点建模的必 要性,并引入关注点空间模型,在对已有的关注点空问模型比较分析和研究的基 础上,提出有效的关注点空间模型必须满足的条件,然后,本文提出了一个通用 关注点空间模型。 最后,本文实现了通用关注点空间模型的工具支持,并进行了实例分析,初 步应用了本文讨论的基于关注点空间模型的分离关注点理论,得出结论认为基于 提出的通用关注点空间模型能够有效地分离关注点,并能够在关注点抽象层上通 过对关注点的组织和管理来影响到关注点的具体表示,有效降低软件的复杂度, 提高软件的可理解性。 关键词:分离关注点;多维分离关注点;关注点空间模型;面向方面编程;分解 机制;组合机制 a b s t r a c t s e p a r a t i o no fc o n o g l n ( s e e ) i so n eo ft h em o s ti m p o r t a n tp r i n c i p l e so fs o f t w a r e e n g i n e e r i n g h o w e v e r , w i t ht h ei n c r e a s i n gc o m p l e x i t yo fs o f t w a r e , m o r ea n dm o r e : e o n e e r n sf a i lt ob es e p a r a t e de f f e c t i v e l yb e c a u s eo ft h ef a c t t h a tt r a d i t i o n a ls o c t e c h n i q u e sa l l o wo n l yo n ew a y o fd e c o m p o s i n gas y s t e m e f f e c t i v ea n d a d e q u a t es o c r e q u i r e st h a tas y s t e mb ed e c o m p o s e da l o n gm o r ct h a no n ew a ys i m u l t a n e o u s l y , a n d t h a ta l lm o d u l e si n t ow h i c ht h es y s t e mi sd e c o m p o s eb ea b l et ob ec o m p o s e d s e a m l e s s l yi n t oaw h o l es y s t e ma te v e r ys t a g eo fs o f t w a r el i f e c y c l e c o n c e r ns p a c e m o d e li sp r o p o s e dt oo r g a n i z ea n dm a n a g ec o n e e r n s , v i aw h i c ht h ec o r r e s p o n d i n g a r t i f a c t sa r ca f f e c t e d t h i sp a p e rd i s c u s s e st h et h e o r ya n da p p l i c a t i o no fc u n o g ms p a c em o d e lb a s e d s o c f i r s t , i tp r o p o s e st h ec o n c e p t so fc o n e e p t u a ld e c o m p o s i t i o nm o d e la n dp h y s i c a l d e c o m p o s i t i o nm o d e l , b a s e do nw h i c hi t a d d r e s s e st h ep r o b l e m sa r i s i n gf r o m h i e r a r c h i c a ld e c o m p o s i t i o no ft r a d i t i o n a ls o ct e c h n i q u e sa n ds h o w sh o wt os o l v e t h e mb yu s i n gc r o s s c u t t i n g d e c o m p o s i t i o n s u b s e q u e n t l y , h o w t o d e s i g na n d i m p l e m e n tc o m p o s i t i o nm e c h a n i s ma n dd e c o m p o s i t i o nm e c h a n i s mt oa c h i e v e c r o s s c u t t i n gd e c o m p o s i t i o ni se x e m p l i f i e d w ec o n s i d e rc u n c e p t u a ld e c o m p o s i t i o n m o d e l , p h y s i c a ld e c o m p o s i t i o n m o d e la n dc o m p o s i t i o nm e c h a n i s ma n d d e c o m p o s i t i o nm e c h a n i s mu s e dt h r o u g ht h e s et w ok i n d so fm o d e l sa st h eu n i f i e d f o u n d a t i o no fs o c a f t e rt h 她b a s e do nt h et h e o r yo ft h eu n i f i e df o u n d a t i o no fs o c 。t h i sp a p e r d i s c u s s e sa n da n a l y z e st h en e c e s s i t yo fm o d e l i n gc o n e e t l 坞,a n dt h e ni n t r o d u c e st h e c o n e e p to fc o n c e ms p a c em o d e l l a t e r , ag e n e r a lc o n e e ms p a c em o d e l ( g e c o s m ) i s p r o p o s e db a s e do nt h er e q u i r e m e n t st h a ta ne f f e c t i v ec o n o e ms p a c em o d e ls h o u l d m e e t , w h i c hi sd r a w nf r o ma n a l y z i n ga n dc o m p a r i n gt h ee x i s t i n gc u n c e r ns p a c e m o d e l s l a s t l y , t h et o o ls u p p o r tf o rg e c o s mi sp r e s e n t e d , w i 也w h i c hac a s cs t u d yi n i t i a l l y a p p l y i n gt h et h e o r yo fc o n c e r ns p a c em o d e lb a s e ds o ci sc o n d u c t e d ac o n c l u s i o ni s a r r i v e df r o mt h i sc a s es t u d yt h a tc o n e e ms p a c em o d e lb a s e ds o cc a l lb eu s e dt o e f f e c t i v e l ys e p a r a t ec o n c e r n s , a n d 啪r e d u c es o f t w a r ec o m p l e x i t ya n di n c r e a s e s o f t w a r eu n d e r s t a n d a b i l i t yb yo r g a n i z i n ga n dm a n a g i n gc u n c e r n so nt h el e v e lo f a b s t r a c t i o no fc o n c c r n $ w h i c hi n t o r na f f e c t st h ec o n c r e t em a n i f e s t a t i o no fc u n c e m s k e y w o r d s :s e p a r a t i o no fc o n c e r n ( s o c ) ;m u t l i d i m e n s i o n a ls e p a r a t i o no fc o n c e r n ( m d s o c ) ; c o n c e r n s p a c em o d e l ;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 ) ; d e c o m p o s i t i o nm e c h a n i s m ;c o m p o s i t i o nm e c h a n i s m 学位论文独创性声明 本人所呈交的学位论文是我在导师的指导下进行的研究工作及取得的研究 成果据我所知,除文中已经注明引用的内容外,本论文不包含其他个人已经 发表或撰写过的研究成果对本文的研究做出重要贡献的个人和集体,均巴在 文中作了明确说明并表示谢意 作者签名: 啦 学位论文授权使用声明 本人完全了解华东师范大学有关保留,使用学位论文的规定,学 校有权保留学位论文并向国家主管部门或其指定机构送交论文的电 子版和纸质版有权将学位论文用于非赢利目的的少量复制并允许论 文进入学校图书馆被查阅有权将学位论文的内容编入有关数据库进 行检索有权将学位论文的标题和摘要汇编出版保密的学位论文在 解密后适用本规定 学位论文作者签名:导师签名:奄巷宝雹吾 日期: 6 舌彳日期:他丑:笪:2 第1 章引言 1 1研究背景 首先把复杂的问题分解成若于个简单的问题并逐个解决,然后把这些简单问 题的解组合起来得到整个问题的解。这种分而治之的方法使人们能够通过每次把 注意力集中到解决一个一个的涉及较少因素的简单问题进而来解决一个涉及众 多因素的复杂问题。这种思想在很多领域被广泛地采用。在计算机软件开发领域 人们一直并且仍然在寻求一种更好的将复杂的问题分解的方法。 上世纪四五十年代机器指令、汇编指令使人们能够把一些与计算机硬件结构 相关的因素分派给汇编器来处理而把更多的注意力放到问题的逻辑因素上面。六 七十年代高级编程语言的出现使人们把与计算机硬件相关的几乎所有因素分派 给编译器处理而专注于要解决的问题的逻辑因素。这个时候结构化程序设计方法 被提出,人们试图利用程序的良好的静态结构使问题得到分解,这期间w i r t h 提 出了“分而治之、面向功能、功能分解”的思想 1 1 ,p a r n a s 提出了“信息隐藏 模块化的思想【2 】。人们把复杂系统分解为具有单一功能的过程、方法等模块并 通过程序良好的静态结构把这些模块组合成要构造的系统,但是面向功能( 面向 过程) 的分解对数据的松散管理甚至忽视管理导致当系统变得复杂时会带来一系 列问题。这以后八九十年代面向对象方法的出现使人们把问题分解为一个一个的 以数据为中心同时封装了数据相关行为( 操作、类的责任) 的对象,并且结构化 程序设计的思想在其中得到了延续用来分解数据相关的行为,在这个阶段这种把 问题按照现实世界的构成机制分解成对象的直观的分解方法使人们理解、构造复 杂系统的能力得到前所未有的提高。 然而,慢慢地面向对象的分解方法也显出了它的弊端。虽然符合数据抽象分 解的模块都能很好地用面向对象技术进行描述,但是对一些不符合数据抽象分解 的非功能性的系统需求模块( 例如,安全性、通信、同步控制、存贮控制、日志) 和功能性需求模块的描述散乱分布在各个类和,或方法中,这给开发、维护、理 解系统带来了极大的困难和代价。 华东师范大学硕士学位论文 基于关注点空间模型的分离关注点的理论和应用 1 1 1 软件系统的复杂性 更严重的问题是,现在软件系统的复杂性有些超出了人们的想象。今天计算 机软件已经渗透到人们工作和生活的各个角落,由于计算机网络特别是i n t e r n e t 的不断发展,独立( s t a n d a l o n e ) 的软件越来越少,分布式的软件系统已经占据 绝对的主流,系统的扩展性大大增强。然而这也决定了系统的异构性和复杂度剧 增,这些都使得一个软件系统可能同时需要采用多种开发技术,每种开发技术又 使用不同的开发方法,而且这种不同一般存在于软件开发的各个阶段。关于今天 软件系统的复杂性,2 0 0 5 年的面向方面软件开发年会上( a s p e x to r i e n t e ds o f t w a r e d e v e l o p m e n t a n n u a lc o n f e r e n c e ) g r a d yb o o c h 的主题演讲【3 】有过很好的阐述。 1 1 2 分离关注点思想 为了更好的描述这种分解复杂问题的方法,分离关注点( s e p a r a t i o no f c o n c e r n ,s o o 这个术语被研究者广泛地采用。一般地来讲,一个关注点( o o n c e m ) 是一个概念、一个目标或者说一个目的【4 】。具有单一功能的模块、上文提到的 在面向对象方法中不能被很好的分离的需求等等都能称作关注点。 传统技术和方法是计算机软件工业发展到今天积累的非常有价值的分离关 注点的方法,但是正如上文提到的传统技术存在的各种问题,传统技术和方法已 经不足以用来解决今天复杂性不断提高的软件系统的开发所带来的新问题,研究 者已经认识到分离关注点变得越来越困难的一个重要原因是传统方式使用的工 件形式化体系( a r t i f a c tf o r m a l i s m ) 1 存在支配性分解( d o m i n a n td e c o m p o s i t i o n ) 4 的问题,也就是传统的形式化体系一般只支持用一种方法对软件系统进行分解。 成功的解决这个问题,使得软件开发中的关注点能够进行有效的分离并模块化, 对传统的软件开发具有革命性的意义,将有助于减小软件系统的复杂性,有效地 提高对复杂软件系统的理解、构造能力。所以,随着软件系统复杂性不断提高, 人们希望同时用几种分解机制来分解软件,希望用这些分解机制分解的软件模 块在每个软件开发阶段都可被同时描述,并且所有这些描述的模块可以无缝的 组合在一起成为一个被完整描述的系统,学术界和工业界寄希望于用这种方法来 1 本文中用到的术语工件形式化体系或者形式化体系指的是在软件各个开发阶段中所用的描述语言,如需 求分析中用的用例规范、设计中用的u m l 、实现中用的编程语言等等,其中a r t i f a c t 除了译为工件以外, 有时候也译为制品。 2 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 应对软件系统和软件开发不断增加的复杂性所带来的问题。所以,九十年代以来 一直到现在研究者做了很多尝试来从一个更全局的角度多维度 ( m u l t i - d i m e n s i o n a l ) 地来分离软件开发中的关注点,研究者做的这些尝试都是 基于传统技术而对其进行补充或扩展,也就是利用传统技术分离关注点的同时, 提供新的方法和技术分离关注点作为补充。 1 2分离关注点技术和方法概述 面向主题编程( s u b j e c t - o r i e n t e dp r o g r a m m i n g ,s o p ) 1 f 5 】是作为面向对象范 型的扩展提出来的,它使得软件除了可以被分解为对象类以外,还可以被分解 为主题( s u b j e c t ) ,每个主题由类片段( f r a g m e n t ) 组成,s o p 工具实现提供组 合器( c o m p o s i t o r ) 把分解得到的主题组合成一个完整的系统。s o p 后来发展成 为基于多维分离关注点( m u l t i - d i m e n s i o n a ls e p a r a t i o no fc o n c e r n ,m d s o c ) 【4 】 思想的h y p e r s p a c e 2 t 6 1 ,m d s o c 把软件进行同时地多维分解,即按照多种分解方 式( 当然也包括面向对象分解等传统分解方式) 同时进行分解,并把关注点组织 在一个称为h y p e r s p a c e 的“关注点空问( c o n c e r ns p a c e ) ”中,同样地,h y p e r s p a c e 也用一组组合规则( c o m p o s i t i o nr u l e s ) 把关注点组合成一个被完整描述的系统。 关注点的具体描述可以被模块化为一个h y p e r s l i c e ,在h y p e r s p a c e 特定于面向对 象的实例化的工具支持h y p e d 3 【刀中,一个h y p e r s l i c e 也像s o p 中的一个主题一 样由类的片段组成。 组合过滤器( c o m p o s i t i o nf i l t e r s ,c f ) 基于面向对象中的消息机制,通过引 入消息过滤器在运行时对对象间的消息收发进行控制,从而可以定义各种消息过 滤器实现诸如同步约束【8 】、实时约束【9 】等关注点,通过分离并模块化这些面向 对象分解不能分离的关注点,组合过滤器扩展了传统的面向对象模型。 适应性编程( a d a p t i v ep 删擎a m m i n g a p ) 4 1 0 1 旨在分离算法和应用算法的 数据结构( 在面向对象技术中表现为类和类之间的联系组成的结构图) 。通过使 用合适的机制表示在数据结构中遍历策略,适应性编程可以让开发者依据遍历策 略设计算法,即使真实的数据结构发生了变化,对应的算法也无需改变,从而使 h t t p : v w w r e s e a r c h i b m c o m s c i p h t t d :w w w r e s e a r c h i b m c o m h y p e r s p a c e h t t p :w w w a l p h a w o r k s i b m c o m t e c h h y p e r j 4 h t t p :w w w c c s a c u e d u r e s c c w d e m e t e r 3 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和戍用 算法和数据的结构达到了很好的分离。 面向方面编程( 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 ) 【1 1 1 主要解决描述系统 的基本功能模块的形式化体系不能很好的描述一些需要不同组合分解机制的模 块的问题。a o p 把一个软件系统的执行看作一系列执行点,通过提供方法来表 示感兴趣的执行点,开发者可以针对这些特定的执行点来设计程序,从而使某些 模块和系统的基本功能模块达到了很好的分离。a o p 和上面的技术和方法有密 切的联系,第2 章会详细介绍。 上面提到的分离关注点的技术和方法对传统技术做了有益的扩展和补充,使 开发者能够对软件进行多种方式的分解,使关注点得到更有效的分离,学术界和 产业界的实践证明,这些技术和方法是解决传统技术不足以应对不断增加的软件 复杂性的正确努力方向。但是,这些技术和方法大都没能够回答这样一些问题, 1 ) 有没有可能提供一个统一的基础来认识所有的( 包括已有的和还没有出现的) 分离关注点技术以及帮助识别和发现适合分别用不同技术来分离并描述的关注 点,2 ) 怎么样组织和管理越来越多的得到分离的关注点并使这种组织和管理带 来软件工程方面的好处。虽然对第二个问题基于m d s o c 的h y p e r s p a c e 做了非常 有效的尝试,但是基于由类代码的片段组成的h y p e r s l i c e ,h y p e r m o d u l e 来描述并 组合关注点的代价非常大,开发者必须额外设计不同于已有形式化体系的组合规 则,而且如果要兼容一种新的分离关注点技术就必须设计和实现新的组合规则。 1 3 本文的主要贡献 本文主要贡献是要找到1 2 结尾的那些问题的答案,并尝试提出一种有效的、 可操作的解决方案。具体的有: 1 提出一个统一的基础来认识所有的分离关注点的技术和方法,并能够帮 助识别和发现哪些关注点适合用哪些具体的分离关注点技术来描述和表 示; 2 提出一种有效的、可操作的通用关注点空间模型( g e n e r a lc 0 1 1 c e ls p a c e m o d e l ,g c c o s m ) 1 ,可以有效的达到分离关注点的目的,可以提供产品 线( p r o d u c tf a m i l y ) 开发的支持和能够便于软件维护和进化的工件之间 的可追溯性( t r a c e a b i l i t y ) ,还可以对关注点的具体描述和表示提供一定 1 关于关注点空间模型的概念可以先参考上文提到的基于m d s o c 的h y p e r s p a c e ,详细的概念第3 章会介绍 4 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 的指导作用。 3 实现了对本文提出的通用关注点空间模型的工具支持,并利用该工具进 行了实例分析,初步验证本文提出的基于关注点空间模型的分离关注点 的理论的正确性。 1 4本文的组织结构 第1 章主要是对本文的研究背景做介绍,提出本文要解决的主要问题和本文 的主要贡献;第2 章将讨论分离关注点的统一基础;第3 章讲述关注点和关注点 空问模型,提出有效的关注点空间模型必须满足的条件;第4 章将详细介绍本文 提出的通用关注点空间模型g e c o s m ;第5 章介绍用g e c o s m 分离关注点的的具 体实践,包括工具支持的实现和实例的分析;最后,第6 章将阐述本文的研究结 论以及介绍下一步的研究工作。 5 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 第2 章分离关注点的统一基础 2 1基础概念 2 1 1 关注点 虽然对软件中要分离关注点已经达成了共识,但是至今为止学术界没有在对 “关注点”这个术语的理解及其建模上达成共识。在【4 】中p c r it a r t 等认为一个 关注点是一个概念、一个目标或者说一个目的。当然,还有其他研究者给出的 其他定义 1 2 a 4 ,基于这些定义,一般地说,关注点的抽象层次在所有软件开发 阶段中使用的工件之上,它表示在一个特定的软件项目中风险承担者感兴趣的概 念性领域( c o n c e p t u a la r e a ) 中的任何东西,可以是问题域里的一个概念、系统 的一个功能特性、特定于系统的一个设计决策、甚至是项目交付的最后期限等等。 关注点是一个开放的、简单的和直观的【1 2 】概念。 分析一 设计一 实现一 测试 图2 1 关注点是一个h y p e r - i n d e x 特别需要指出的是讨论关注点时一定要是特定于某一个作用域( s c o p e ) ,因 为在一个作用域里的一个关注点可能在另一个作用域里并不是一个关注点,风险 承担者可能认为它不重要,对其不感兴趣。例如在一个实时系统中,保证响应时 间是一个相对固定的值可能是一个非常重要的关注点,而在一个一般的个人网站 系统中,它显然不是一个关注点。另外,关注点是属于概念性领域( c o n c e p t u a l a r e a ) 的范畴,任何形式的物理表示本身都不是关注点,如一个具体的工件( 例 如需求规范) 不是一个关注点,但一个具体的工件可能表示或者描述一个关注点。 6 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 关注点抽象层次在所有的工件之上,它中立于具体的软件阶段,具体的形式化体 系,具体的开发方法和技术,具体的应用,但是它又贯穿于一个软件项目中几乎 所有的活动。软件开发活动,不管是有意地还是无意地,都是围绕关注点来进行 的。关注点是软件项目中一个最一般的概念,它是与其他软件开发活动并行存在 又不依附于这些的活动的一个h y p e m n d e x 1 2 ,如图2 - 1 所示 虽然关注点在软件开发中无处不在,但是把关注点独立地提出来研究,从以 前传统的软件开发中的一种隐性概念变为一种显性概念却是近几年来的事情。例 如,【1 5 1 0 e 研究提出了软件开发流程以及软件项目管理中的关注点;【1 6 l e o 研究 了软件测试中的各种关注点。而在关注点的概念被独立提出来研究以前,关注点 的重要性也从来没有被忽视的,如p a r n a s 在提出以信息隐藏作为系统分解的标 准【2 】时涉及到的关注点就是减小数据结构的具体表示变更所带来的代价。 2 1 2 模块 模块( m o d u l e ) 是进行分离关注点时最基础的概念之一,模块性( m o d u l a r i t y ) 或者模块化( m o d u l a r i z a t i o n ) 也是最频繁使用的术语之一。最先要指出的是模块 是属于物理层领域( p h y s i c a la r e a ) 的概念,它一般指代由具体的工件组成的物 理实体,这是模块区别于关注点最大的地方。p a m a s 在“把系统分解为模块的标 准”f 2 】中提到“对项目进行定义良好的分割的努力保证了系统的模块性”,并 指出在实现阶段每一个模块和它的输入和输出都是被良好定义的,所以,一般来 说,模块性意味着对系统进行分割,而一个模块是系统中一个被分离的、良好定 义的单元。c + + 的设计者b j a m cs t r o u s t r u p 又进一步说“一组相关的过程加上它 们操作的数据经常被称作一个模块”【1 7 1 ,这基本上是模块化编程中一个模块的 概念。而到了面向对象编程中一个对象类也通常被认为是一个模块,在基于组 件的软件开发中,一个组件也被认为是一个模块。k i c z a l e s 在【1 8 】中也给出了在 代码实现阶段模块的定义,对文本局部化( t e x t u a l l yl o c a lo rl e x i c a l l yl o c a l ) ,接 口及其抽象机制还有模块组合等均有要求。可以看到模块的概念跟描述模块的编 程语言以及编程语言支持的编程范型有很大关系,然而,模块的概念不仅仅限于 编程实现阶段。 在上述对模块概念描述的基础上,本节在这里给出一个泛化的模块概念,即 模块是用任何形式化体系描述的、具有一些特定属性的物理实体。我们可以称之 7 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 为一个模块,如果满足: 1 形式化体系对它的完整描述必须是局部化的; 2 它包含了一组相关的语义,这组语义的相关性和这组语义与其他模块包 含的语义的关系一般由采用的分解机制决定,这种语义的划分准则和模 块的概念本身没有关系,而是和分解机制有关; 3 对它的内部描述的改变可以不影响它的外部行为; 4 对它的描述可以引用其他模块,但是不对这些模块的具体内部描述作假 设,而仅仅依赖于这些模块的外部行为,而且这样的引用不会对这些模 块的外部行为造成影响; 5 描述它的形式化体系必须能够把它要包含的语义组合成一个实体; 6 描述它的形式化体系必须能够把它和其他模块组合成一个被完整描述的 系统。 第1 条和第5 条是对模块内的组合的要求,第3 条是对模块接口的描述,第 4 条是对模块间的通信的描述,第6 条是对模块间的组合的描述,模块内的组合 和模块问的组合在下文会进一步提到。可以看到,这个描述是独立于具体的软件 开发阶段的,这种普遍性和抽象性也导致了概念描述的不严格,至少和编程阶段 的模块概念相比不够严格。依据本文的模块概念,一个u m l 图表、一段需求规 范的描述( 用例描述) 都可以是一个模块。 2 1 3 抽象机制 抽象机制是减小软件复杂度和提高软件的可理解性的主要手段。简单地说, 抽象是用一个概念来表示相关的一组概念,这个概念聚焦于这一组概念的共性, 而丢弃他们的差异性 1 9 1 。常见的一些抽象机制有面向过程编程中的过程抽象, 面向对象编程中的数据抽象等等,如表2 1 所示。 表2 - 1 常见的抽象 抽象抽象机制抽象的具体表不 命令式指令命名机制对机器细节的抽象 过程、函数( 过过程( 函数) 签名对一串命令式指令实现的算法的抽 程抽象)象 类型( 数据抽象)类型签名、类型的接口对具有相同接口的类型实例的抽象 参数化形参、实参对算法参数的抽象;对类型引用类 型的抽象 8 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 2 1 4 分解机制 组合和分解是软件开发中使用的两种最基本的方法,开发者总是把一个问题 域分解为足够小的问题域,再找到这些小的问题域的解空间,最后把这些小的解 空间组合成原来问题域的解空间。这种规律其实不只是在软件开发中存在,而存 在于普遍的人类对整个世界的认识中。认知科学( c o g n i t i v es c i e n ) 领域的研究 显示,人类思维中对概念的建模,就是根据事物具有的种种特征【2 0 】1 ,把有相同 特征的事物归为一类,再用一个抽象的概念表示具有该特征的一类事物【2 1 】。在 模式识别理论中也同样是运用类似的分类方法来分解整个世界中的事物的。通过 这种分解,人类从对每一个事物、每一类事物的认识来认识整个世界。 分解机制指得是如何对问题域进行分解,即按照何种标准来对问题域进行分 解其实在对问题域进行分解时,无论是进行何种分解,开发者都有意识、或者 无意识地运用了某种分解机制,这其中的区别是,有一些常见的分解机制已经被 广泛的熟知,人们已经知道运用这些分解的标准来对问题域进行分解,这些分解 标准是一种显性的知识,而有些分解机制则不常见或者没有被发现,人们可能无 意识地按照某种分解标准对问题域进行分解,这些分解标准是一种隐性知识。 编程泛型或软件开发方法的每一次进步都是一个分解标准由隐性知识变为 显性知识的过程,在新的编程泛型被提出来的初期,往往都是由研究者把隐性的 分解标准进行正规化的一个过程,如p a r n a s 在面向对象编程泛型出现以前提出 的按照信息隐藏的标准对系统进行分解【2 】就是一个很好的例子,在当时( 1 9 7 2 年) 过程分解( 功能分解) 作为一种显性的分解标准被广泛接受,但是在很多情 况下过程分解不是对系统的最优分解,按照信息隐藏、数据抽象对系统进行分解 在当时只是一种隐性的分解标准,直到8 0 年代以来,面向对象编程泛型的提出, 信息隐藏、数据抽象的分解标准才被广泛的认知和接受。同样的例子在每一次从 旧的编程泛型或者软件开发方法过渡到新的编程泛型或者软件开发方法都存在, 如图2 - 2 所示。所以对分解机制是存在一个识别、发现并描述的过程的。 隐性知识的存在可能让大多数人无法以最优的方式来分解问题域,问题是, 一般的开发者只熟悉常用的编程泛型所支持的分解机制,而大多数分解机制并没 有被编程泛型所支持。如果能提供一种识别、发现和描述分解机制的方法,那么 1 o o o g l cs c h o l a r 上显示,该篇论文引用多达1 2 0 次 9 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 对隐性的分解机制可以被描述下来而变成一种显性的分解标准,能够在交流和讨 论时进行传播,这个和对设计模式的描述 2 2 1 的作用是相似的。本文把这种对分 解机制的描述称为分解机制的正规描述。 对分解机制的描述实际上是对分解规则的描述,本文提出的分解机制的正规 描述主要包括: 1 分解机制的名称:便于简要理解、传播和交流; 2 分解机制的意图:对软件的软件工程属性( s o f t w a r ee n g i n e e r i n g p r o p e r t i e s ) 带来的影响,如按数据抽象进行分解会使得增加新的类型或 者变更已有的类型的实现变的非常容易,而按功能分解会使得改变系统 的功能变的非常容易,等等; 3 对分解规则( 标准) 的描述:要对什么进行模块化,即对每个模块封装 的语义的相似属性的描述 2 0 l ,以及以什么方法界定这种要封装的语义 的边界; 4 示例:可以举一个正例一个反例。 图2 - 2 隐性和显性的分解机制 例如,下面是对面向对象分解的正规描述: 1 名称:面向对象分解 1 0 华东师范大学硕士学位论文基于关注点空问模型的分离关注点的理论和应用 2 意图:对实现细节进行封装,面向抽象数据的接口的软件设计,数据的 具体表示和在数据上操作的具体实现均能容易的实现变更 3 分解规则:把系统分解为对象,对象是对数据的抽象,它封装了数据的 具体表示和对数据的操作,它的外部行为用能够对数据进行的操作表示, 这些操作的内部实现细节对外部不可见,封装的数据本身的具体实现细 节也对外部不可见 4 示例:大多数面向对象语言所支持的分解机制 2 1 5 组合机制 但是在软件开发中,分解得到的单元必须能够按照某种规则组合在一起形成 一个被完整描述( 或是被需求规范描述,或是被设计图表描述也或是被编程代码 描述等等) 的系统,这就是组合机制。 一种工件形式化体系本身只提供抽象和组合机制,并不直接提供分解机制, 如果一种形式化体系提供的组合机制使得采用一种分解机制分解得到的模块能 够组合在一起,那么这种形式化体系被认为支持这种分解机制。通常一种传统的 形式化体系提供的抽象和组合机制只支持一种主要的分解机制,这种现象称为 “统治分解的专制( t y r a n n yo f d o m i n a n td e c o m p o s i t i o n ) ”【4 】。一些比较常见的组 合机制如表2 - 2 所示。 表2 - 2 常见的组合机制 方法、技术组合机制 高级语言编程命令式语句的执行 结构化程序设计程序静态结构 面向过程编程过程调用 模块化编程 模块方法调用 面向对象编程继承,对象聚合,方法调用 如果在这里引入模块的概念,则组合机制又可以分为模块内的组合,和模块 间的组合。模块内的组合主要是用于对要封装的语义描述成一个文本局部化的物 理实体( 一个函数、类或者一个类包等等) ,而模块间的组合是用于把模块组合 成一个完整的系统,对实现阶段来说就是一个可运行的完整系统。当聚焦于一个 单独的模块时,所有描述这个模块所使用的组合机制都可称为模块内的组合,而 当聚焦于多个模块时,需要模块间的相互引用的组合均为模块间的组合,如图 2 3 所示,图中箭头表示模块1 调用模块2 、3 中的过程等等。下文可以看到建 华东师范丈学硕士学位论文基于关注点宅间模型的分离关注点的理论和应用 立这两个概念有利于对支持特定分解机制的组合机制的实现。 图2 - 3 模块内组合和模块间组合 2 2分离关注点 软件工程中一个最重要的原则之一就是分离关注点原贝f j 2 3 。这个原则表明 当一个问题涉及不同种类的关注点时,这些关注点应该被识别和分离以应对问题 的复杂性,并且达到一些软件工程方面的好处如提高软件的质量、降低软件开发 的费用、改进软件的复用性和扩展性、使软件更易于维护和进化等等【4 】。分离 关注点必须有两方面的基础:一个是对关注点的分离技术,另一个是对关注点合 成( 组合) 技术【2 4 1 。 2 2 1 概念性分解模型 在对系统进行分解时,最开始得到的是对系统按照某种分解机制的概念性分 解模型( c o n c e p t u a ld e c o m p o s i t i o nm o d e l ) ,也就是得到的是纯粹的关注点,它决 定风险承担者选取什么作为关注点,以及关注点之间有什么样的联系,这些构成 了对系统的概念性分解模型。在不需要得到相对应的物理分解模型的情况下,通 常这种分解是不受具体的分解组合机制实现的限制的,也就是不需要考虑使用的 形式化体系是否能够描述分解得到的关注点,而只是为了得到某些软件工程属 性,从概念层面对系统进行分解。例如上文提到的,为了让数据的具体表示更容 易变更,可以采取数据抽象的分解,为了让系统的功能更容易变更,可以采取功 能模块的分解,而就单独得到概念性分解模型来说,这里不用考虑系统是用面向 过程语言实现还是用面向对象语言实现( 这些决定了下面要提到的物理分解模 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 型) ,所以这个过程可以充分利用上文提到的对分解机制的发现、识别和描述的 过程,这也是本文提出的通用空间关注点模型用于组织和管理关注点的理论基础 之一。 概念性分解模型直接依赖于概念性分解所采用的分解机制,通常所要求的软 件工程属性( 如可扩展性、可理解性、复用性等等) 驱动着对分解机制的选取, 这也同样驱动着分解机制的发现、识别和描述的过程,即上文提到的分解机制由 隐性知识变为显性知识的过程。往往概念性分解模型是分解系统得到的第一个分 解模型,依据得到的概念性分解模型,开发者选取特定的形式化体系来得到相应 的下文要提到的物理分解模型,这同时也是设计新的形式化体系的最大动因 ( m o t i v a t i o n ) ,如果没有合适的形式化体系能够得到对应的物理分解模型。 2 2 2 物理分解模型 物理分解模型( p h y s i c a ld e c o m p o s i t i o nm o d e l ) 由物理实体模块以及模块之间 的依赖关系组成,概念性分解模型需要用适当的形式化体系进行描述,而得到物 理分解模型。最理想的情况是概念性分解模型能够和物理分解模型完全的对应, 即概念性模型中的每一个关注点都能用形式化体系被描述成为一个模块,关注点 之间的关系也能通过形式化体系的组合机制得以表示。 然而很多情况下用现有的形式化体系不能得到与给定的概念性分解模型相 对应的物理分解模型,即找不到理想的关注点和模块映射( c o n c e r n m o d u l e m a p p i n g ) ,这个时候会产生分散( s c a t t e r i n g ) 或和缠绕( t a n g l i n g ) ,即多个模块 影响到一个关注点或和一个模块影响到多个关注点。基于用例的软件开发就是 一个很典型的例子,概念性分解模型采用的是用例分解,在需求分析阶段的物理 分解模型能够和概念性分解模型很好的对应,因为用例需求规范直接支持用例分 解,然而在设计和实现阶段利用现有的形式化体系无法得到对应的物理分解模 型,所以用例被进一步分解为参与用例的类,并被支持面向对象分解的形式化体 系描述并模块化。如图2 4 所示,不同的斜线表示不同的用例,在需求分析阶段 物理分解模型可以和概念性模型对应,而在设计和实现阶段物理分解模型( 用例 图表,u s ec a s ed i a g r a m ) 不再能够和概念性分解模型对应,c l a s s l 含有两个用例 的实现,而用例1 的实现分散在c l a s s l 和c l a s s 2 中,用例2 的实现分散在c l a s s l 、 c l a s s 2 和c l a s s 3 中。对于这种情况,用例技术的提出者i v a rj a c b o s n 博士在他最 华东师范大学硕士学位论文基于关注点空间模型的分离关注点的理论和应用 新的论文和书籍【2 4 ;2 5 】里面提出用例模块( u s ec a s em o d u l e ) 的概念,试图在设 计和实现阶段得到和概念性分解模型相对应的物理分解模型。 概念性分解模型物理分解模型 iio 图2 4 基于用例开发的概念性分解模型和物理分解模型不匹配 物理分解模型依赖予采用的形式化体系的所提供的抽象和组合机制,即直接 依赖于形式化体系所支持的分解机制。一般情况下,如果概念性分解模型采用的 分解机制等于使用的形式化体系所支持的分解机制,那么能够得到和概念性分解 模型对应的物理分解模型。上文提到一种传统的形式化体系只支持一种分解机 制,所以一般一种形式化体系只能描述一种物理分解模型,即下文要提到的具有 层次结构( h i e r a r c h i c a l ) 性

温馨提示

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

最新文档

评论

0/150

提交评论