没有合适的资源?快使用搜索试试~ 我知道了~
68《理论计算机科学电子札记》65卷第4期(2002)网址:http://www.elsevier.nl/locate/entcs/volume65.html13页在基于组件的高层上下文WimVanderperren1;2计算机科学比利时布鲁塞尔自由大学BartWydaeghe3;4计算机科学比利时布鲁塞尔自由大学摘要本文在体系结构描述语言和面向方面编程的基础上在我们的研究中,我们引入了组合模式的概念,将当前视觉连接的抽象级别提升到协议,而不是事件/动作对。在我们提出主要主题:组合适配器之前,本文简要总结了这项工作。在基于组件的开发中,组件是模块化的自然单元。然而,总是会有一些问题,不能被捆绑到一个单一的组件。我们引入组合适配器作为一种将横切关注点本地化到单独实体中的方法。我们使用状态信息推导出的组合模式编织组合适配器到基于组件的应用程序。在本文中,我们将解释如何检查组合适配器与组合模式的兼容性,以及如何完成基于状态的组合适配器插入。1引言基于构件的开发被认为是解决软件危机的一个有前途的范例[4]。一个经典的比喻通常用来描述组件-1 电子邮件:wvdperre@info.vub.ac。被2 由FWO3 电子邮件地址:bwydaegh@info.vub.ac.be4 这项研究部分得到了佛兰德政府项目:Adapsis(IWT)的支持。2002年由ElsevierScienceB出版。 诉操作访问根据C CB Y-NC-N D许可证进行。范德佩伦69一个基于乐高的儿童建筑系统。创建应用程序变得像选择合适的构建块并将它们组装在一起一样简单显然,这种设想过于天真。目前的可视化组件组合工具离实现这一理想还很远。当前的工具不支持将组件之间的不兼容性通知给组件编写者。此外,组件之间的布线不能重复使用。然而,设计模式的成功证明了相同的交互协议在许多不同的应用中使用。总的来说,我们觉得目前的组件组合工具的抽象层次仍然太低。因此,我们介绍了一个组件的协议规范。此外,我们建议使用组合模式显式地记录组件之间的通用交互。使用此文档,我们可以自动检查组件与组合模式中的角色的兼容性。此外,自动生成用于翻译组件之间的语法不兼容性的胶合代码。这项研究已经在我们的实验室进行了几年[9,10],并在Bart Wydaeghe的博士论文中得到了体现[8]。在此研究的基础上,我们研究如何在一个不同的实体分离横切关注。在面向对象的上下文中,引入面向方面编程(AOP)来模块化横切关注点[5]。然而,由于组件的黑盒特性,横切关注点的问题在基于组件的上下文中被证明更加困难。一个典型的例子是会计核算。每个组件都必须在创建时考虑到会计功能,并且相同的行为分散在所有组件上。因此,改变会计行为变得非常困难。我们希望能够在一个不同的实体中分离横切关注点。在面向对象的上下文中,已经提出了两种面向方面的编程语言,其中AASPJ [6]是一个众所周知的例子。然而,ANOJ不太适合在基于组件的上下文中使用。这是因为必须将应用方面的点硬编码到方面中。因此,没有单独的连接器来与其他类组成方面。第二,AANUJ使用源代码自适应,这在基于组件的上下文中是不可行的。我们建议组合适配器能够模块化横切关注我们的组件为基础的上下文。组合适配器可以自动检查有效性,并自动插入到组件组合中。下一节将介绍我们的基于组件的方法,并更详细地解释我们的组件和组合模式文档。在第3节中,我们的概念的兼容性进行了阐述。 此外,我们还简要讨论了我们的兼容性检查算法和生成胶码的算法。第4节更详细地解释了组合适配器的思想。本文中阐述的算法和思想在一个原型工具中实现。第5节介绍了这个工具。最后,最后一节陈述了我们的结论。范德佩伦70Fig. 1.场景语法和原语2文件这个想法是记录组件和组合模式应该如何使用。我们建议使用一种特殊的消息序列图(MSC)[1]来记录这些场景图1的左边总结了我们的场景语法。 这种语法主要是MSC语法。它包含一个一组参与者、在这些参与者之间发送的一组信号以及一组控制块和结构化机制。我们使用MSC语法中的OPT、ALT和LOOP控制块。OPT关键字表示可选块,ALT关键字表示备选项。LOOP关键字表示在场景的一部分上迭代(即零次或多次)。我们的文档使用标准的MSC图形符号,但信号发送是从一组具有已知含义的紧凑术语中提取的。这与直接以API调用表示的标准MSC消息形成对比。基于具体的API调用构建自动化工具支持是非常困难的。例如,GUI组件中的“更新”API调用与数据库组件中的“更新”API调用具有不同的含义。这需要一个人和大量的文件来区分两者。这种模糊性不仅给自动工具支持的构建带来负担,而且最终迫使开发人员对组件进行试验,看看会发生什么。图1的右侧显示了我们在实验中使用的基元集。这些原语被分类在一个简单的层次结构中,其中信号原语是最一般的一个。我们认识到在对输出事件建模时需要这种层次结构。在本文中进一步描述的匹配过程中使用这种层次结构,因为我们允许更特定的原语映射到更通用的原语上,反之亦然。从我们为实验构建一组原语的经验中,我们了解到很难提出一个可用于所有类型域的通用集合。我们应该构造一组原语,范德佩伦71图二. JButton bean的使用场景和考试服务构建工具包一个特定的应用领域。因此,我们认为这种方法对于构建“构建工具包”特别有用。它为开发人员提供了构建一组组件的机会,并记录了如何使用和组合这些组件。这项研究的一部分是为高级互联网接入(AIA)项目,我们试图建立互联网服务的建设套件。对于这个项目,我们建立了一个建设工具包,使我们能够建立各种分布式考试的互联网(实时,在线,多项选择,开放式问题,授权,非授权,有或没有多媒体等)。使用这种方法。 我们在图1已证明足以记录本文件中的所有组件和组成,集这个集合是在几个月的迭代过程中构建的。我们从一组基本的原语开始,这些原语似乎是合理的,并根据记录考试组件和作文的人的反馈对其进行了调整。重要的是要注意,这组原语只是一个概念证明。我们并不声称这是唯一的基元集合,甚至也不声称这是一个好的基元集合。我们只在实验中使用这套设备。然而,它给出了这样一个集合应该是什么样子以及如何构造它的指示2.1组件文档我们建议使用上面介绍的序列图来记录一个具有许多使用场景的组件。使用场景描述了组件与其环境的交互。因此,我们引入了“环境”参与者。环境参与者代表组件期望的任何其他协作组件。除了环境之外,组件的使用场景还包含一个表示组件的“主要”回想一下,参与者之间发送的信号是使用更高级别的原语记录的。除了这个抽象的文档之外,每个信号发送都映射到一个或多个实际执行原语的API左边的图2演示了JButtonbean的使用场景。范德佩伦722.2组成文件作品以非常相似的方式记录。也就是说,一个组合也是使用一个场景来记录的,这个场景使用了我们介绍的固定原语集。组合场景描述了一组角色之间的交互,因此可以将其视为应用程序(的一部分)的一种用例。由于组合描述了角色之间的交互,因此它不包含环境参与者或实现映射。组合模式是对多个角色之间的协作的高级描述,但没有任何关于如何实现这种协作的指示。图2的右侧显示了考试服务构建工具包中的一个组合模式。3匹配在上一节中,我们介绍了组件和组合模式的文档。本文档的目标是允许自动兼容性检查和代码生成。以下部分描述了我们的兼容性概念,并简要讨论了我们的算法来验证组件与角色的兼容性。有关我们的算法和我们的基于组件的方法的更多信息,请参阅[8,9,10]。3.1兼容性我们区分两种不同的兼容性。组件需要与它在组合模式中扮演的角色兼容,一组组件的组合应该与连接它们的组合模式兼容。3.1.1本地兼容性我们认为组合模式是可重用的实体。这意味着一个通用的组合模式通常提供几个备选方案。图3显示了一个典型的组合,表达了对观察者行为的解释此方案包含一个可选部分。观察者角色收到通知后,它可以通过获取新数据来刷新自己的数据,也可以忽略新值(例如按下按钮的通知)。 很明显,我们不希望在这个com中使用的每个组件位置来实现可选块。同样的情况也发生在几个不同的-提维斯假设组合模式支持两种不同的观察者连接。一个基于通知,另一个基于轮询。同样,我们希望组件只实现其中一个选项。更有可能出现的情况是,组件提供的选项和备选方案比组件所要求的要多。例如,我们的考试工具包包含一个通用网络组件,可用作服务器或客户端。一个给定的应用程序永远不会同时使用这两种功能范德佩伦73图三. 使用可选块的一下子因此,我们只能检查是否存在至少一个通过组件和组合模式的相应角色的兼容跟踪。也就是说,我们检查组成模式的组件和角色是否有共同的行为。3.1.2全球兼容性如上所述的局部兼容性并不保证组件的组成具有共同的兼容迹线。组合中的每个组件都可以有另一个与其角色相同的跟踪,从而呈现立即死锁的组合。全局兼容性意味着至少存在一个对所有参与组件和组合模式通用的跟踪。兼容性的这些定义仅保证至少存在一个由所有组件支持的组合模式指定的跟踪。我们不能保证其中一个组件不会遵循与公共轨迹不同的轨迹。因此,我们生成了约束这种不必要行为的胶水代码详见第3.3节。3.2匹配这里我们简要介绍了我们的方法中使用的全局检查算法。一般的想法是首先组合所有选定组件的行为,然后再与组合模式相交。现在简要地概述了算法。第一步是将组件的使用场景转换为确定性的Nite自动机。使用标准的翻译算法[2],参与者之间的消息方向丢失。因为我们不能忽略方向,所以我们不得不稍微调整平移算法来考虑方向。在我们的例子中,每个消息或原语都增加了一个方向标签,指示消息是从组件发送的还是由组件接收的。 我们还添加了组件到标签。即,我们获得状态机,其中转换被标记为:“事件X消息Y输出/输入”。接下来,我们计算这些自动机的shue自动机,以获得我们想要组合的组件之间所有可能的交互。 计算shue自动机本身是一个众所周知的过程。详情见[7]。作为构图模式,范德佩伦74见图4。 shue自动机中“有效”跟踪的模板描述组件之间的交互,我们只对组件之间可能的同步点感兴趣。这些点很容易找到,因为它们符合图4所示的模板。也就是说,我们寻找一个组件发送消息而另一个组件准备接收该消息的状态。因此,我们把这些“出/入”的夫妇联系在一起,e自动机到一个过渡和修剪所有其他的痕迹。 在此步骤中,我们还组合组件映射。例如,标记为“C1 A out”的转换之后是标记为“C2A In”的转换变成一个转换“A(C1,C2)“。这一步是计算与合成自动机的交集所必需的。合成自动机包含“A(Role1,Role2)"形式的转换,而后处理的shuee自动机包含“A(Role1,Role2)"形式的转换。为了计算组合自动机和shue自动机之间的交集应用程序构建器通常通过将正确的组件拖动到它在组合模式中必须扮演的角色上来提供这种映射我们还开发了一种算法,用于搜索呈现工作应用程序的组件上所有可能的角色映射最后,我们计算交叉点。如果在所得到的自动机中存在一个开始-停止路径,我们就知道至少有一个可能的轨迹通过所选的组件集,符合组合模式中的轨迹我们的粘合代码生成强制生成的应用程序遵循这个跟踪。3.3代码生成我们使用Java Bean组件模型。在该模型中,组件通信基于事件和方法调用。更准确地说,组件将事件发送到任何订阅的侦听器,任何代码片段都可以调用其API。粘合代码通常将输出事件与另一个组件上的调用连接起来。由此产生的全局检查过程的自动机包含与组合模式匹配的所有组件的共同行为。这个自动机将被用作组件之间的粘合代码。我们生成模拟这个自动机的代码。然后,这段代码根据当前状态将一个组件的传出事件转换为另一个组件上的传入调用。同时,它通过忽略给定状态的非法事件来限制组件的不兼容跟踪。然后,从不是开始-停止路径成员的所有路径中剥离结果,并生成实现此结果的粘合代码类。还生成了一个主类,范德佩伦75胶水代码类和所有协作组件被实例化。该类还订阅粘合代码类,以接收作为该组合成员的每个组件的事件。如果应用程序包含多个组合,则为每个组合生成一个粘合代码类。然后所有这些类都在它们自己的线程中启动。这允许一个组件同时成为多个组合物的一部分。4合成适配器4.1介绍在做了一些案例研究之后,我们觉得有些关注点在我们基于组件的上下文中不能干净地模块化。例如,要添加跟踪行为,必须以相同的方式手动更改所有组合模式。因为我们没有办法在一个单独的模块中描述这些适应,所以必须创建包括原始行为和跟踪行为的新组合模式。在基于组件的上下文中,我们看到了两种不同的横切关注点模块化的可能性。第一个解决方案包括使用一个新的组件模型,允许一个组件描述其他组件中的适配。Lieberherr教授和其他人提出了这样一个组件的具体建议[3]。他们把这些成分称为-他们提出了一种新的接口类型,允许组件独立于将要适配的具体组件来描述适配。在创作时,特殊的作品将改编与具体的组成部分联系起来。然后使用二进制代码适配将适配编织到组件中。这种方法是非常强大的,因为适应是由一种编程语言(实际上是JAVA的一个特殊版本)描述的。虽然这是一个有趣的方法,但在我们基于组件的上下文中直接恢复它是不可能的。因为我们不想降低抽象级别,所以我们必须提出一种(更可取的图形)符号,说明改变组件的外部行为的适应性后果。这一额外的信息是允许自动兼容性检查和胶水代码生成所必需的。因此,我们建议使用另一种替代方案,即具有可以适应其他组成的特殊组成。组合适配器只能通过重新路由或忽略消息来改变组件的外部行为。然而,组合的代码还没有生成,因此调整这些组合不需要任何代码这种方法显然不那么强大,但到目前为止是一种更容易和灵活的解决方案。4.2文件我们建议通过MSC类似于常规的组合模式来记录组合适配器。组合适配器由两部分组成,范德佩伦76图五.过滤合成适配器和将合成适配器应用于g的合成模式的结果。2和适配器部分。上下文部分描述将被调整的行为。适配器部分描述适配本身。图5的左手边展示了一个合成适配器的例子。在本例中,复合适配器将通过Filter角色将SEND的每次出现从角色Source重新路由到角色Dest。假设我们将这个合成适配器应用于图5左侧描述的合成模式然后,我们手动将组合适配器的Source角色映射到图5右侧的组合模式的客户端角色类似地,Dest角色映射到Network角色.应用复合适配器的结果是,每个从客户端到网络的SEND都将过滤器角色以及组合的源/客户端和目标/网络角色位于后面由混凝土组成。在方面组件方法中,Filter组件是一个方面组件,它将Filtering逻辑添加到映射到Source角色的组件或映射到Dest角色的组件。 请注意,从这个例子中可以看出,在复合适配器中表达角色。通配符角色将自动映射到选定组合的角色。这将使组件编写者不必手动映射合成适配器角色。4.3应用合成适配器自动应用合成适配器需要两个步骤。在第一步中,我们检查适配是否有意义,这意味着检查组合适配器的上下文是否在下一个步骤中,所有与上下文部分匹配的路径都被组合适配器的适配器部分替换。4.3.1检查合成适配器此阶段的目标是搜索与组合适配器的上下文部分相对应的所有路径尽管从中的示例来看这似乎是显而易见的,范德佩伦77见图6。 检查合成适配器在图5中,我们只需要在图2的合成模式中搜索SEND,在大多数情况下,语法扫描被检测的合成是不起作用的。如果上下文由循环和/或其他控制块描述,则需要在语义级别上匹配MSC的更进化的算法。图6给出了一个小例子的算法。将组合适配器的上下文和组合模式转换为确定性有限自动机(DFA)。然后,对于组合模式的DFA的每个状态x,我们复制此DFA并对其进行转换,以便状态x成为开始状态,所有其他状态都是结束状态。随后,我们计算变换后的DFA与上下文DFA的交集。如果交集不为空,那么我们找到了一个与复合适配器的上下文部分匹配的路径。注意,为了能够计算交集,我们需要一个从组合适配器的角色到组合模式的角色的映射。回想一下,组件编写者已经手动指定了这个映射,所以没有问题。在对组合模式DFA中的所有状态执行此操作之后,我们就知道了与组合适配器的上下文部分相对应的所有路径。在图6的例子中,我们有一条从状态4到状态5的匹配路径。如果没有这样的路径,则合成适配器没有输出,并发出警告4.3.2将合成适配器插入合成为了将复合适配器插入到复合中,我们必须将与复合适配器的上下文部分对应的所有路径替换为适配器部分。同样,我们首先将作为组合模式的适配器部分转换为DFA。然后,对于我们在上一步中计算的每个路径(所有与上下文部分匹配的路径),我们删除该路径并将其替换为适配器DFA的副本。图6说明了该算法。我们有一条路径匹配从状态4到状态5的上下文部分(用虚线表示)。我们删除该路径并在状态4和5之间插入适配器部分。请注意,这使得自动机是非确定性的,所以在我们能够使用这个自动机之前,它必须再次确定。然后,使用此自动机检查兼容性范德佩伦78与LLED-IN组件一起使用,并使用第3节和第4节中描述的算法生成胶合代码。4.4复合适配器交互我们允许一个组件编写器在一个组件上应用多个组件适配器。组合适配器按组件组合器指定的顺序插入。但是,最新应用的复合适配器请注意,只有当两个复合适配器的上下文部分具有共同的跟踪时,它们才能相互阻碍。因此,我们可以分析哪些组合适配器可能会相互阻碍。对于每一对组合适配器,我们计算上下文部分之间的交集。如果交集不为空,则这对复合适配器之间可能存在冲突。然后,组件组合工具会发出警告。请注意,可能需要进行更全面的分析,以确定某些组合适配器是否确实存在冲突。这一主题有待进一步研究。5工具支持本文 所描 述的工 作已 经在一 个名为 PacoSuite 的原 型工 具中实 现。PacoSuite完全用JAVA编写,由PacoDoc和PacoWire两个应用程序组成PacoDoc是一个图形编辑器,允许绘制、加载和保存组件文档、合成模式和合成适配器。PacoWire工具是我们实际的合成工具,它实现了本文所描述的算法。它使用一组组件、组合模式和组合适配器。此工具允许在组合模式的角色上拖动组件。当组件与所选角色不匹配时,将拒绝拖动,并可选地向用户提供不匹配反馈。 如果将组合适配器应用于组合模式,则检查组件是否与适配的组合模式兼容。当所有的组件角色都被填充时,组合作为一个整体被检查,并生成粘合代码 图7显示了我们的工具的一些屏幕截图。6结论使用组合适配器,我们能够在基于组件的上下文中干净地模块化横切关注点。 组合适配器可以是veri-自动编辑并插入到组件的合成中。我们改进了当前的面向方面的方法,因为组合适配器将被应用的连接点是由一个完整的协议指定的,而不仅仅是一组方法。 组合适配器仍然保留了范德佩伦79见图7。 PacoSuite截图我们的视觉成分组成。此外,我们提出了一个分析,以警告交互组合适配器之间可能的冲突。这种方法的一个缺点是,我们只能通过重新路由或忽略它们的消息来适应组件的外部行为。能够适应组件内部的组合适配器是一个需要进一步研究的主题。引用[1] ITU-TS,建议Z.120:消息序列图(MSC)。1993年9月,日内瓦[2] 啊哈,A.V.,塞西河和J.D. Ullman,\“原则、技术和工具”。艾迪森-韦斯利,1985年[3] Lieberherr,K.,Lorenz,D. 和M.Mezini,使用方面组件编程,技术报告,NU-CCS-99-01,1999年3月。网址:http://www.ccs.neu.edu/research/demeter/biblio/aspectual-comps.html。[4] Szyperski,C.,组件软件;超越面向对象编程。“Addison-Wesley,1997年[5] Kiczales,G.,Lamping,J.,Lopes,C.V,Maeda,C.,Mendhekar,A和A.墨菲,面向方面编程,在第19届国际软件工程会议(ICSE),波士顿,美国,ACM出版社。May 1997[6] \A\A主页”。网址:http://www.aspectj.org。范德佩伦80[7] 霍普克罗夫特,J.E.,莫特瓦尼河和J.D.厄尔曼自动机理论、语言和计算导论“Addison-Wesley,第二版,2001[8] Wydaeghe,B.,\基于复合模式和使用场景的复合构件复合,博士学位。论文,布鲁塞尔自由大学,2001年。[9] Vanderperren,W.和B. Wydaeghe,Towards a New Component CompositionProcess,载于ECBS 2001会议记录,2001年 4月[10] 怀代格湾和W.范德佩伦,使用组合模式的视觉组件组合,工具2001会议录,2001年7月
下载后可阅读完整内容,剩余1页未读,立即下载
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- 谷歌文件系统下的实用网络编码技术在分布式存储中的应用
- 跨国媒体对南亚农村社会的影响:以斯里兰卡案例的社会学分析
- RFM2g接口驱动操作手册:API与命令行指南
- 基于裸手的大数据自然人机交互关键算法研究
- ABAQUS下无人机机翼有限元分析与局部设计研究
- TCL基础教程:语法、变量与操作详解
- FPGA与数字前端面试题集锦:流程、设计与Verilog应用
- 2022全球互联网技术人才前瞻:元宇宙驱动下的创新与挑战
- 碳排放权交易实战手册(第二版):设计与实施指南
- 2022新经济新职业洞察:科技驱动下的百景变革
- 红外与可见光人脸融合识别技术探究
- NXP88W8977:2.4/5 GHz 双频 Wi-Fi4 + Bluetooth 5.2 合体芯片
- NXP88W8987:集成2.4/5GHz Wi-Fi 5与蓝牙5.2的单芯片解决方案
- TPA3116D2DADR: 单声道数字放大器驱动高达50W功率
- TPA3255-Q1:315W车载A/D类音频放大器,高保真、宽频设计
- 42V 输入 5A 降压稳压器 TPS54540B-Q1 的特点和应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)