已阅读5页,还剩57页未读, 继续免费阅读
(计算机软件与理论专业论文)面向方面的实时系统开发方法.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 摘要 现代软件开发都要把整个系统按功能分解为小的单元,然后开发这些小单元, 这些小的单元隐藏内部实现,对外提供接口,最后组合这些单元为整个系统,实 现整个系统的功能。但是系统中有的方面是横切整个系统的非功能关注点,无法 很好地封装在单个模块中。如日志、性能问题、安全、上下文相关错误处理、o o s 监测等等,这些方面分散在整个系统中,并且与系统的功能代码纠缠在一起,这 样降低了模块的可追踪性、模块的可重用性、系统的可维护性,所以需要分离并 模块化这些非功能关注点。 面向方面编程在实现上分离和模块化横切关注点,面向方面建模在软件开发 的其它阶段用一致的方法来详述、可视化、构造和文档化方面相关制品,这样在 整个软件开发过程可以使用面向方面技术。 实时系统是面向方面技术很好的应用场所,因为在实时系统中,有很多非功 能需求,且这些非功能需求往往横切整个系统。在实时系统中关键的就是时间要 求了,这些时间要求散布在整个系统的功能部件里,带来了代码混乱和代码分散 问题。 本文分析介绍了a s p e c t j 、组合过滤器、多维关注点分离和自适应编程等典型 的分离关注点的方法。比较完整的介绍了面向方面建模领域的研究。阐述了实时 系统中的主要实时需求,以及与实时系统有关的u m l 概况集。提出了一个新的扩 展u m l 进行面向方面建模的方法,它以合适的语义表达了a s p e c t j 和a s p e c t c + + 的元素和织入机制。在这个方法中,方面继承自类,切入点和通知继承自特征, 这样切入点和通知是方面的一部分,方面与基本类的关系用横切依赖表示。切入 点的图符可以表达多个方面在相同连接点的横切行为,通知以一致的方式建模结 构横切和行为横切,通过在顺序图上新加一个通知发出焦点,并将通知表示为消 息,这样可以清晰建横通知在何时何处怎样影响系统的行为。并分析了如何将这 个方法应用于实时系统开发。 关键词:面向方面编程;面向方面软件开发;实时系统;u m l 广东工业大学工学硕士学位论文 a b s t r a c t u s i n g m o d e r n s o f t w a r ed e v e l o p m e n tm e t h o d o l o g y ,d e v e l o p e r af i r s t d e c o m p o s es y s t e mi n t os m a l lu n i t s ,w h i c hh i d et h ei n t e r n a li m p l e m e n t a t i o n a n dp r o v i d eo n l ye x t e r n a li n t e r f a c e s ,t h e ni m p l e m e n tt h e s eu n i t s ,a tl a s t c o m p o s et h e s eu n i t st og e taf u l ls y s t e ma n dr e a l i z er e q u i r e df u n c t i o n s b u tt h e r ea r es o m en o n f u n c t i o n a lc o n c e r n sw h i c hc r o s s c u tw h o l es y s t e ma n d c a n tb ew e l le n c a p g u l a t e d i n t oa s i n g l em o d u l e , s u c ha s l o g g i n g , p e r f o r m a n c ea n a y s i s ,s e c u r i t y ,c o n t e x t r e l a t e de r r o r h a n d l i n g ,q o s m o n i t o r i n g ,e t c t h e s ea s p e c t sa r es c a t t e r e da n dt a n g l e di nw h o l es y s t e m , d e c r e a s i n g s o f t w a r et r a c e a b i l i t y ,r e u s a b i l i t y ,a d a p t a b i l i t y s ot h e s e n o n f u n c t i o n a lc o n c e r n ss h o u l db es e p a r a t e da n dm o d u l a r i z e d 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 )s e p a r a t e s a n dm o d u l a r i z e s c t o s s c u t t i n gc o n c e r n sa ti m p l e m e n t a t i o ns t a g e a s p e c t o r i e n t e dm o d e l i n g ( a o m ) s p e c i f i e s ,v i s u a l i z e s ,c o n s t r u c t s a n dd o c u m e n t sa s p e c tr e l a t e d a r t if a c t si nac o n s i s t e n tw a ya to t h e rs t a g eo fs o f t w a r ed e v e l o p m e n t t h u s w h 0 1 es o f t w a r ed e v e l o p m e n tp r o c e s sc a nu s ea s p e c t o r i e n t e dt e c h n i q u e r e a l t i m es y s t e m sa r ew e l lp l a c e st oa p p l ya s p e c t o r i e n t e dt e c h n i q u e , f o rt h e r ea r el o t so fn o n f u n c t i o n a lr e q u i r e m e n t si nr e a l t i m e s y s t e m , w h i c hs c a t t e r i n gi nw h o l es y s t e m t h ec o d e sr e l a t e dw i t ht i m i n ga r em i x e d w i t ho t h e rc o d e s r e s u l t i n gi nc o d es c a t t e r i n ga n dt a n g l i n g t h i sa r t i c l ec o n s i d e r sv a r i o u st e c h n i q u e st os e p a r a t ec r o s s c u t t i n g c o n c e r n s ,n a m e l ya s p e c t j ,a s p e c t c + + ,c o m p o s i t i o nf i l t e r s ,h y p e r s p a c ea n d a d a p t i r ep r o g r a m m i n g ;s u m m a r i z e st h er e s e a r c h e si na o md o m a i n :a n a l y s e s r e a l t i m es y s t e m st i m i n gr e q u i r e m e n t sa n du f lp r o f i l e sf o rr e a l t i m e s y s t e m s t h i sa r t i c l ep r o p o s e san e w t e c h n i q u e t o m o d e l i n ga s p e c t o r i e n t e d c o n s t r u c t sa n dm e c h a n is m sb ye x t e n d i n gu m l ,w h i c hc a n r e p r e s e n tc o n s t r u e t s a n dw e a v i n gm e c h a n i s mo fa s p e c t a n da s p e c t c + + w i t ha p p r o p r i a t es e m a n t i c s i nt h i sm e t h o d ,a s p e c ti ss u b c l a s so fc l a s s :p o i n t c u ta n da d v i c e a r ed e r i v e d f r o mf e a t u r e ,t h u sp o i n t e u ta n da d v i c ea r ep a r t so fa s p e c t :r e l a t i o n s h i p b e t w e e n a s p e c t s a n db a s ec l a s si sr e p r e s e n t e d b ys p e c i a l c r o s s c u t d e p e n d e n c y t h en o t a t i o no fp o i n t c u tc a ne x p r e s sc r o s s c u t t i n gb e h a v i o ro f m a n ya s p e c t sa ts a m ej o i np o i n t a d v i c ec a nm o d e ls t r u c t u r a lc r o s s c u t t i n g a n db e h a v i o rc r o s s c u t t i n gi nau n i f o r mw a y b ya d d i n gan e wb l o c k ,a d v i c e s e n d i n gf o c u s ,i ns e q u e n c ed i a g r a ma n dr e g a r da d v i c e a sm e s s a g e ,t h is m e t h o dc a nc l e a r l ym o d e lw h e r ea n dw h e na n dh o wa d v i c e sa f f e c ts y s t e m b e h a v i o r t h ea r t i c l ea l s oe x a m i n e sh o wt h i st e c h n i q u ec a nb ep r a c t i c e d i nr e a l t i m es y s t e m sd e v e l o p m e n t k e y w o r d s :a o p ;a o s d :r e a l t i m es y s t e m s ;u m l i l l 第一章绪论 1 。1 研究背景 第一章绪论 软件开发思想就是抽象与分解,从过程化、结构化分解编程,到现在主流的 面向对象编程,开发典范( p a r a d i g m ) 发生了很大变化,唯一不变的就是抽象与 分解的思想,只是抽象的种类和质量、分解的方法发生了变化。 当前,面向对象编程( o o p ) 【1 】和基于组件的软件开发得到了广泛的使用,面 向对象技术能够很好地将现实世界领域中的实体和它的行为建模为抽象的对象。 系统变成一系列相互协作的对象,类的封装性隐藏了实现的细节;类的继承性实 现了重用;多态性使得不同对象接收到相同消息时产生不同的动作。 确实,o o p 表明了它处理复杂闯题的能力,但是o o p 无法模块化横切( c r o s s c u t ) 整个系统的关注点( c o n c e r n s ) ,这些关注点称为横切关注点( c r o s s c u t t i n 日 c o n c e r n s ) ,如时间要求、安全、q o s 监测、日志等等。这些非功能单元弥散在整 个系统中,导致了代码分散( c o d es c a t t e r i n g ) ;并且与功能单元混杂在一起, 导致了代码纠缠( c o d et a n g l i n g ) 。这样降低了程序的可理解性、适应性、可维 护性和可复用性。 o o p 中用混入类来处理横切,但是基本类需要显式调用混入对象的方法,即操 作的逻辑由基本类控制,且好的系统设计师要考虑当前和将来可能的需求以避免 打补丁,但是预知将来的需求是困难的,这样系统设计师陷入了“应该宁可设计 不足还是宁可过分设计”的两难境地。其它解决方法如行为型设计模式也是由基 本类控制操作逻辑,面向特定领域的解决方式( 如框架) 仅提供这个领域的处理 关注点的方式,所以属于这个领域外的关注点需要特殊处理。 解决问题需要分离关注点,将不同的关注点分离成模块,而这些模块可以单 独实现。这样开发功能模块时不需要考虑非功能需求,在功能模块里不出现非功 能代码;各个非功能模块也单独实现。系统有信息描述如何将这些模块可控地组 合起来形成结构和行为明确的系统。系统信息主要描述了在何处非功能模块影响 奎三兰奎兰三耋至圭兰塞壅兰 其它模块的结构和行为,有的方法将这些信息包含在非功能模块里,有的方法将 这些信息放在配置文件内。 通过分离关注点,开发人员可以只关注感兴趣的部分。并且当需求改变后, 只需修改受影响的模块,而这些模块往往只在一处出现,这样避免了在整个程序 内修改。 已经有很多分离关注点的方法,这些方法可以统称为面向方面编程( a o p , a s p e c to r i e n t e dp r o g r a m m i n g ) ,虽然在这个概念提出之前,已经有很多这方 面的研究。 面向方面编程将关注点实现为分离的方面,然而实现仅仅是软件开发过程中 的4 个阶段。现在已经开始研究在需求、设计等其它开发阶段如何有效地分离关 注点,目标是要在整个软件开发过程应用面向方面技术,从而形成面向方面的软 件开发( a o s d ,a s p e c to r i e n t e ds o f t w a r ed e v e l o p m e n t ) 。这些研究主要集中在 如何扩展u m l 3 1 使其支持面向方面技术。 现在面向方面编程还在研究过程中,面向方面的软件开发方法的研究也刚刚 起步,但是它们代表了未了软件开发的方向。g r a d yb o o c h 预言a o p 将崛起 4 】。 1 2 研究意义 实时嵌入式设备被广泛使用在现代生活中,实时控制系统是现代化生产的保 证,复杂的实时系统在国防现代化建设中发挥越来越重要的作用。这些系统广泛 应用在对时间有较高要求的环境中,如汽车、飞机和核反应堆等的控制中,这些 系统的失败轻则导致经济财产损失,重则生命丢失。 实时系统是面向方面很好的应用场所,因为在实时系统中,有很多非功能需 求,且这些非功能需求往往横切整个系统。在实时系统中关键的就是时间要求了, 如果系统没有在给定的时间里完成任务,任务是失败的,这些时间要求散布在整 个系统的功能部件里,带来了前述的代码纠缠和代码分散问题,导致系统代码不 易读,不易修改,易产生不一致,重用性差,不易修改和升级等一系列问题。 实时系统的个重要特点就是要求系统具有可预报性,要判断调度的可行性, 这需要收集系统当前信息和q o s 信息,追踪系统执行情况,这些代码也混在功能 部件里。 2 第一章绪论 实时系统是高可靠性的系统,软实时系统( s o f tr e a l t i m es y s t e m s ) 任务 的失败会使系统性能降低,但是有些安全关键( s a f e t y c r i t i c a l ) 的硬实时系统 ( h a r dr e a l t i m es y s t e m s ) 的失败将会带来灾难性的后果,如核反应堆控制系 统,武器控制系统等,这些系统的失败将会有生命的代价。但是系统故障是不可 避免的,因为硬件和软件不可能设计的完全正确,所以实时系统需要容错,这样 一个系统里的容错代码也弥漫在整个系统中,导致前述问题。 实时嵌入式系统也有安全上的需求,以防止非授权用户的进入,同样这些非 功能性代码也会弥漫在整个系统中。 为了提高性能和达到可预报性,实时系统需要特别的资源管理策略,如为了 可预报性,不使用缓存和虚存机制,因为缺页会导致时间不可预报。另外为了提 高系统性能,需要对内存进行管理,这些管理策略会弥漫在整个功能部件里。 所以有必要把这些非功能代码从功能部件里分离出来。分别编写功能部件和 非功能方面,然后把它们组合在一起。 实时系统有如此多的横切关注点,所以需要用面向方面技术模块化这些关注 点;且实时系统在社会和国家生活中应用越来越广泛,影响也越来越大,系统也 越来越复杂。所以把面向方面技术应用到实时系统开发中很有必要和意义。 1 3 面向方面技术在实时系统中的应用 研究者已经开始探索如何将面向方面技术应用在实时系统开发中。 在实时系统和嵌入式系统中建立了一些模型 5 ,6 。 5 提出了 a c c o r d ( a s p e c t u a lc o m p o n e n t b a s e dr e a l t i m es y s t e md e v e l o p m e n t ) 设计方法, 也提出了一个r t c o m ( r e a l t i m ec o m p o n e n tm o d e l ) 模型。使用a c c o r d 开发实 时系统的过程是:第一阶段把把实时系统按功能和低耦合高内聚的要求分解为一 系列的组件;第二阶段把实时系统分解为一系列的方面,方面横切组件和整个系 统,这个阶段处理非功能需求和横切关注点;最后按r t c o m 实现组件和方面。r t c o m 允许把方面编织到组件里,包括三部分:( 1 ) 功能部分:( 2 ) 运行时系统依赖部分:( 3 ) 组合部分。另外把方面分为三类:( 1 ) 应用程序方面:( 2 ) 运行时方面:( 3 ) 组合方面。 嵌入式系统的一个重要特征是依赖环境, 6 提出了一个对嵌入式系统进行面向方 面的环境建模方法。 广东工业大学工学硕士学位论文 7 把面向方面编程技术应用到实时操作系统开发上。因为在实时操作系统里 有许多横切的特征,为了满足日益增长的对实时操作系统快速定制的要求,需要 面向方面编程技术,这里把函数看成一系列的基本块,基本块的功能代码可由不 同的方面提供,这样横切了函数,且这些基本块可视,提供了图形表示的开发框 架;支持类的组装,不同方面里的相同的类可以组成一个大类。 8 展示了如何把面向方面技术应用的分布式实时系统上。分布式实时系统中 的非功能需求可以用方面来表达,这篇文章给出了一个把分布性、时间要求和容 错方面加入到一个简单的日志组件里的方法。 9 ,i 0 把面向方面应用到d is c o ( d i s t r i b u t e dc o o p e r a t i o n ) 系统中,d i s c o 是描述反应式系统的形式化规格说 明方法。 1 4 研究内容 本文比较完整地分析介绍了分离和模块化关注点的方法,以及面向方面社区 对面向方面建模的研究;阐述了实时系统中实时需求的主要概念和建模方法;提 出了一个新的通过扩展u m l 进行面向方面建模的方法,并将这个方法应用于实时 系统开发。 论文结构安排如下: 第一章介绍了面向方面编程可以模块化非功能关注点;分析了实时系统中的 非功能关注点以及实时系统中使用面向方面技术的现状。 第二章介绍了典型的分离关注点的方法。 第三章阐述了实时系统中的实时需求,以及用u m l 建模实时系统的方法。 第四章分析介绍了面向方面社区对面向方面建模的研究。 第五章提出了一个新的扩展u m l 来表达面向方面中的元素和机制,阐述如何 将这种方法应用于实时系统开发中。 4 第二章分离关注点的方法 第二章分离关注点的方法 系统中的非功能需求往往横切整个系统,传统的结构化方法以及现代流行的 面向对象方法无法很好地模块化这些非功能需求,导致了实现非功能需求代码的 分散和与功能代码纠缠在一起,造成代码量急剧增加,开发效率低,可读性差, 极易引起不一致等问题,所以需要分离这些非功能关注点。对于如何有效的分离 关注点,人们已经提出了很多方法。如a s p e c t 、组合过滤器、多维关注点分离 和自适应编程等。 2 1 a s p e c t j g r e g o rk i c z a l e s 等人于1 9 9 7 年提出了面向方面编程( a o p ,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 ) 概念【2 】,开发出了第一个基于j a v a 的a o p 实现h s p e c t f l l l 。 a s p e c t 引入了连接点( j o i np o i n t ) 这个概念,以及切入点( p o i n t c u t ) 、通 知( a d v i c e ) 、类型间声明( i n t e r t y p ed e c l a r a t i o n ) 和方面( a s p e c t ) 的构造块。 连接点为程序流中的一些特殊点,包括方法调用与执行,构造函数调用与执 行,类或对象初始化,成员变量的访问和修改,异常处理执行,通知执行等。方 面可以在这些点改变系统的行为。 切入点组合了连接点,并可以提供连接点处执行上下文的信息。切入点主要 用于通知,通知在切入点改变系统行为。a s p e c t j 定义了原子切入点( p r i m i t i v e p o i n t c u t ) ,如“c a l l ( v o i dp o i n t s e t x ( i n t ) ) ”;也定义了与( ) 、或( | | ) 、非 ( ! ) 来组合切入点。可以用通配符来收集多种连接点,如“c a l l ( v o i d p o i n t s e t * ( ) ) ”,表示调用p o i n t 的以s e t 开头且返回值为v o i d 的函数,不 论这些函数的参数类型和个数。 通知在切入点影响系统的行为。通知有多种类型,b e f o r e 通知在指定连接点抵 达但与该连接点相连的程序运行前执行;a f t e rr e t u r n i n g 通知在指定连接点处 的程序成功返回后执行;a f t e rt h r o w i n g 通知在指定连接点处程序抛出t h r o w a b l e 对象后执行;a f t e r 通知在指定连接点程序执行后执行,不论成功返回还是抛出 5 奎三些奎兰三兰堡圭兰竺鲨三 异常;a r o u n d 通知在指定连接点处执行,只有在a r o u n d 通知体里显式调用 p r o c e e d ,该连接点处的程序才能执行。 类型间声明改变程序的结构。在方面里可以声明其它类型拥有的成员( 成员 变量、成员函数、构造函数) ,也可以声明一些类型实现一个新的接口或继承一个 新的类。 方面将这些切入点、通知、类型问声明封装起来,形成一个关注点,与类一 样,方面也可有成员变量和成员函数。 同一个连接点可以被多个方面或一个方面里的多个通知影响,a s p e c t j 定义了 这些方面和通知的优先关系。 这些概念以及构造块的详细内容可以参考 1 2 。图2 一l 是一个电信模拟的计 时方面。 p u b i ic a s p e c tt i m i n g p u b i i cl o n gc u s t o m e r t o t a l c o n n e e t t i m e = 0 : p u b l i cl o n gg e t t o t a l c o n n e c t t i m e ( c u s t o m e rc u s t ) f r e t u r ne u s t t o t a l c o n n e c t t i m e : ) p r i r a t et i m e rc o n n e c t i o n t i m e r = n e wt i m e r 0 : p u b l i ct i m e rg e t t i m e r ( c o n n e c t i o nc o n e ) ( r e t u r nc o r m t i m e r : a f t e r ( c o n n e c t i o nc ) :t a r g e t ( c ) e e l l ( v o i dc o n n e c t i o n c o m p l e t e0 ) g e t t i m e r ( c ) s t a r t0 : p o i n t c u te n d t i m i n g ( c o n n e c t i o nc ) :t a r g e t ( c ) c a l l ( v o i dc o n n e c t i o n d r o p 0 ) : a f t e r ( c o n n e c t i o nc ) :e n d t i m i n g ( c ) f g e t t i m e r ( c ) s t o p 0 : e g e t c a ll e r ( ) t o t a l c o n n e c t t i m e “g e t t i m e r ( c ) g e t t i m e0 : c g e t r e c e i v e r0 t o t a l c o n n e c t t i m e + = g e t t i m e r ( c ) g e t t i m e0 : ) 1 图2 - it i m i n g 方面1 2 】 第二章分离关注点的方法 它给每个连接引入一个计时器,给每个用户引入一个保存全部连接时间的变 量。在连接建立完成时开始计时,在连接断开后,停止计时,并计算连接时间和 增加通话用户的全部连接时间值。 a s p e c t j 编译器是一个编织器( w e a v e r ) ,它可以将方面织入到它所影响的其它 方面或类里,以改变系统的结构和行为。这样,系统的关注点可以分别编写,从 而有效分离了关注点,然后将这些模块化的关注点通过编织器组合在一起,形成 满足需求的系统。 2 2a s p e c t c + + a s p e c t c + + 【1 3 1 4 】对c + + 进行扩展以支持面向方面编程,它参考a s p e c t j 所 使用的方法来对另一种编程语言进行扩展,所以它们的模型基本相同,语法上有 些不同。在a s p e c t j 中“ ”,表示通配符,但是在c + + 中“ ”用来声明指针,为 避免二义性,在a s p e c t c + + 中以“”表示通配符。在h s p e c t c + + 中以“:”代替 a s p e c t j 中的“”来表示作用域解析。以“”来匹配函数签名的任意数量形参。 在a s p e c t c + + 中,有两种切入点:名字切入点( n a m ep o i n t c u t ) 和代码切入点 ( c o d ep o i n t c u t ) 。名字切入点是类型、属性、函数、变量和名字空间的名字, 如“a r r a y ”表示任何以“a r r a y ”结尾的c l a s s 、s t r u c t 或u n i o n ;“v o i dd r a w ( ) ”匹配有任意数量形参和返回类型为“v o i d ”的函数d r a w 。代码切入点要 调用a s p e c t c + + 定义的函数且以名字切入点为参数来形成,如:c a l l ( “v o i d d r a w 0 ”) 描述了一系列的函数d r a w 调用。另外,为了重用切入点,可以用 p o i n t c u t ( p o i n t c u t 为关键字) 表达式对切入点命名,即命名切入点( n a m e d p o i n t c u t ) ,如p o i n t c u ta r r a y s ( ) = d e r i v e d ( “a r r a y ”) ,这样a r r a y s 能用在表 示d e r i v e d ( “a r r a y ”) 切入点表达式可用的任何地方。在a s p e c t c + + 中也有两类 连接点,名字连接点用来形成名字切入点,如程序中的类名;代码连接点用来形成 代码切入点,如程序中的函数调用和执行。 对于名字切入点,通知可以扩展程序代码和数据结构,即引入( 与a s p e c t j 中类型间声明一样) 。对于代码切入点,通知在切入点影响系统的行为。 与a s p e c t j 一样,方面以模块化的方式收集横切关注点的a d v i c e 代码和引入。 图2 - 2 显示了t r a c e s h a p e 方面来记录s h a p e 类型的对象的构造和析构。 7 广东工业大学工学硕士学位论文 a s p e c tt r a c e s h a p e p u b l i c : s t a t i ci n tm _ c r e a t e d ,md e s t r o y e d : p o i n t c u ts h a p e s0 = d e r i r e d ( s h a p e ”) : a d v i c es h a p e s ( ) :c l a s sh e l p e r p u b l i c : h e l p e r0 t r a c e s h a p e :m c r e a t e d + + : 、h e l p e r0 t r a c e s h a p e :m d e s t r o y e d + + :) m _ c o u n t e r : a d v i c ee x e c u t i o n ( m a i n ( ) ) :a f t e r 0f p r i n t f ( s h a p ec r e a t e d :d ,d e s t r o y e d :d ”,m c r e a t e d ,m d e s t r o y e d ) ) : in tt r a c e s h a p e :m _ c r e a t e d = o : i n tt r a c e s h a p e = = m d e s t r o y e d = o : 图2 - 2t r a c e s h a p e 方面 2 3 组合过滤器( c o m p o si ti o nf ii t e r s ,c f ) c f 是语言独立的模型,它以模块化和正交化( o r t h o g o n a l ) 的方式扩展了面向 对象模型。 模块化的扩展意味着过滤器可以附贴在对象上而不改变对象的定义, 这样过滤器与实现独立;正交化的扩展即过滤器之间的语义互相独立,这样过滤 器可以组合【”j 。 因为对象之间的通信的机制是消息,这个模型通过过滤器来操控进入或出去 的消息来改变对象的行为,图2 - 3 描述了这个模型的组成部分。 第二章分离关注点的方法 l 咖h c 。印巾、 煳黜”p f b m d io b i * 曲 旧c o l 憎d r h e 由b 鼬b 吉 日e m b b g e b 图2 3c f 模型的组件1 6 】 上图描述了一个c f 模型中的对象,这个对象包括接1 2 1 和实现两部分。接口部 分包括接口对象i 声明( 被封装了的内部对象和被引用了的外部对象) ,状态s ( s t a t e ,c o n d i t i o n ) 声明,类方法m 声明和过滤器f ;实现部分包括实例变量声 明,类方法和状态的实现,以及初始化方法。对象可以用四元组 表示m 】。 接口对象的声明方式是为o b j e c t n a m e :c l a s s n a m e : 状态s 表示为:s s p r o p o s i t i o n ,i d 。状态可以看成一个用p r o p o s i t i o n 表示布尔函数,用i d 可以引用这个状态。 对象的所有方法u 。包括对象内部定义的方法m o 和接口对象定义的方法( 满足 递归规则) :u 。= m 。u ( u 。,u 。) 过滤器f f 定义为: a = f i 距( s u ( u k j s j ) a m e u ) j a ( ,) = i a f h a n d l e r ( f ) ,a ( f ) h a n d i e r ( f ) 即过滤器处理器( f 1 1 t e r h a n d l e r ) ,它定义了当消息到达过滤器 9 广东工业大学工学硕士学位论文 时如何操控这个消息。a ( f ) 被称为接受集合( a c c e p ts e tf u n c t i o n ) ,是一个有序 的集合a 。a 定义了状态一方法对 集合,状态s 决定了消息( 方法) n l 是否被 接受。 消息必须被过滤器集合检查,检查的算法如图2 4 : 1 ) a l g o r i t h mp a s sf i l t e r s ( m ,f ) 2 ) f o r a l lfi nf = i f l ,。f 。 d o 3 ) a c c e p t := f a l s e : 4 )f o r a l l i na ( f ) ; , d o 5 )i f ( m = m j ) asjt h e n 6 ) b e g i n 7 ) a c c e p t := t r u e : 8 ) d e s t := t a r g e t ( m j ) : 9 )b r e a k : 1 0 )e n d : 1 1 )e n d f o r : 1 2 )i fa c c e p t 13)thenh a n d l e r ( f ) a c c e p t m e s s a g e ( m ) 1 4 ) e l s eh a n d l e r ( f ) r e j e c t m e s s a g e ( m ) : 1 5 )e n d f o r : 1 6 ) d i s p a t c h ( m ,d e s t ) : 17 je n dp a s s f i l t e r s : 图2 4 检查接受的消息算法1 7 1 消息要被所有的过滤器检查,过滤器用它的接受集合检查消息,如果满足接 受集合里的一个元素,那么通过当前过滤器的检查,然后转到下一个过滤器。如 果消息不满足当前过滤器的接受集合所有元素,消息根据过滤器处理器的类别拒 绝消息。当通过最后的过滤器后,消息被分发。 预定义的过滤器类: d i s p a t c h 过滤器:如果接受消息,消息分发到消息的当前目标对象;否 则消息传递到下一个过滤器( 如果没有了过滤器,会产生异常) 。 e r r o r 过滤器:如果拒绝消息,产生异常:否则传递到下一个过滤器。 第二章分离关注点的方法 w a i t 过滤器:如果接受消息,消息传递到下一个过滤器;否则排队等待接 受。 m e t a 过滤器:如果拒绝消息,消息传递到下一个过滤器;否则根据这个消 息生成一个对象,并把这个对象作为参数传到新的消息( 接受集合元素的第二部 分) 中。接受这个新消息的对象可以操控这个消息。 在实时系统中,继承以前经过验证的模块很重要,但是实时需求的改变往往 会导致过多的重新设计,这种情况称为实时需求继承反常,即子类时间需求改变 导致在子类里出现过多的重新设计而不是继承父类的已有实现。下面用 1 8 中的 例子介绍实时需求继承反常以及用c f 模型解决的方法。 类d i s t r i b u t i o n n o d e 代表一个电力分配网中的一个节点。这个节点有一条电 力产生线和多条电力消费线。节点控制电流从生产线流向消费线。当生产线断开 时,所有的消费线都要在预定义的时间内断开。节点可以看成时一个电磁开关, 用e 1 m a g n e t i c s w i t c h e s 定义,这个类里为每条线定义了连接和断开方法。 假定有一个f a s t d i s t r i b u t i o n n o d e ,它是d i s t r i b u t i o n n o d e 的子类, f a s t d i s t r i b u t i o n n o d e 定义消费线断开的截趸时间比它的父类更紧迫。但是由于 实时需求与应用代码混和在一起,子类需要重新定义消费线的断开方法,以使用 新的时间约束,这样父类的断开方法无法重用,出现了第一种反常。用c f 解决的 方法是把时间约束放到过滤器中,过滤器把时间约束加到接受的消息上,如图 2 5 。当子类的时间约束改变后,新的时间约束放到子类的过滤器中,当调用子类 的方法时( 继承自父类) ,子类过滤器给接受的消息加上新的时间约束,如图2 - 6 。 过滤器类r e a l t i m e 的输入过滤器用来影响与过滤器匹配消息的时间属性。消 息将接受“l i ”里的时间约束。消息的时间属性用t i m e 对象表示,t i m e 有s t a r t ( 消息的最早开始时间) 和e n d ( 消息的截至时间) 属性。t i m e 定义了一些方法 来操作这两个属性:如m i n e n d ( ) 给消息设置最早的截至时间( 如果 t i m ep o i n t 的值小于消息当前的截至时间,则消息截至时间为 ,否 则不变) ;s e t e n d ( ) 设置e n d 属性为参数;g e t e n d :返回e n d 属性。 g i v e t i m e s p e c 过滤器的接受集合只有一个元素,“= ”左边是状态( 条件) , 右边是方法的名字,是 的另一种写法。这里条件为“t r u e ”。如果消息与 d i s t r i b u t i o n n o d e 提供的方法匹配,则接受该消息,如果新的时间属性小于消息 广东工业大学工学硕士学位论文 的当前截至时间,则过滤器为消息设置新的截至时间。 ( 1 ) c l a s sd i s t r i b u t i o n n o d e i n t e r f a c e ( 2 ) b e g i n ( 3 )i n t e r n a ls ( 4 ) m y s w i t c h :e i m a g n e t i c s w i t c h e s : ( 5 )m e t h o d s ( 6 ) p r o d u c t i o n l i n e d is c o n n e c t e dr e t u r n sn il : ( 7 ) d i s e o n n e c t c o n s u m e r l i n e ( i n t e g e r ) r e t u r n sn i l : ( 8 ) i n p u t f i1t e r s ( 9 ) g i v e t i m e s p e c : r e a l t i m e = t r u e = s e i f t i m e m i n e n d ( t c o n s u m e r ) i : ( 1 0 )s e t t i m e f o r p r o d u c t i o n :r e a l t i m e = true= s e l f p r o d u c t i o n l i n e d i s c o n n e c t e d ( 1 1 ) t i m e s e t e n d ( n u m b e r o f l i n e s t i m e g e t e n d ) 1 : ( 1 2 ) i n v o k e :d i s p a t c h = t r u e = m y s w i t c h + ,t r u e = i n n e r ) : ( 1 3 )e n d : 图2 - 5d i s t r i b u t i o n n o d e 的接口定义u 8 1 如果到来的消息是p r o d u c t i o n l i n e d is c o n n e c t e d ,它会通过第一个过滤器,在 那里设置其最早截至时间,然后消息会传到第二个过滤器,在这里设置其截至时 间为n u m b e r o f l i n e s t i m e g e t e n d ,其中n u m b e r o f l i n e s 是消费线条数, t i m e g e t e n d 返回第一个过滤器设置的最早截至时间。 最后添加了时闻约束的消息由i n v o k e 分发过滤器分发。 f a s t t i m e s p e c 过滤器给f a s t d i s t r i b u t i o n n o d e 的消息设置最早截至时间 t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南迪庆州维西县国有林场编外专职森林草原管护人员招聘1人笔试备考题库及答案详解
- 2026年焦作市专项计划招聘社区网格事务协理员360人笔试备考试题及答案详解
- 雅安市雨城区2026年公开选调学校教师 (5人)笔试模拟试题及答案详解
- 中国移动在线服务公司10086客服招聘笔试模拟试题及答案详解
- 糕点制作生产线管理合同
- 2026四川乐山职业技术学院考核招聘编制外工作人员30人笔试备考试题及答案详解
- 2026新疆明奎医疗管理(集团)有限公司招聘19人笔试备考题库及答案详解
- 2026年辽宁锦州义县公益性岗位招聘138人笔试模拟试题及答案详解
- 教案嵌入式应用基础(项目3第7周)
- 2026年金华义乌市稠城街道社区卫生服务中心编外聘用人员招聘4人笔试备考题库及答案详解
- (2026版)《煤矿重大事故隐患判定标准》培训课件
- 2026信息安全行业市场发展分析及前景趋势与投融资发展机会研究报告
- 2026贵州遵义余庆县公安局面向社会公开招聘警务辅助人员18人笔试备考题库及答案解析
- 2026山东临沂市郯城县城镇公益性岗位招聘41人备考题库附答案详解(考试直接用)
- 物流园区安全生产风险分级管控清单
- 贵州黔东南公路建设养护有限公司招聘笔试题库2026
- 陕西省宝鸡市2026届中考语文全真模拟试卷含解析
- 2026湖南益阳桃江县产业发展投资集团有限公司招聘4人笔试备考题库及答案详解
- 产品包装、运输、装卸方案
- 2026届湖北省武汉市高三四调英语试题(含答案和音频)
- 2025年河北唐山市八年级地理生物会考考试题库(附含答案)
评论
0/150
提交评论