没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子笔记127(2005)37-49www.elsevier.com/locate/entcs使用Fujaba进行状态图建模LeifGeigerAlbertZuendorf卡塞尔大学软件工程研究组,WilhelmshöoherAllee73,34121Kassel,Germany(Leif.Geiger)|albert.zuendorf}@ uni-kassel.de摘要本文是一个简单的视觉语言的小案例研究。我们使用Fujaba的方法来解释,如何使用Fujaba图形转换来处理这样一种视觉语言的环境的不同要求。这涵盖了抽象和具体语法、静态和操作语义以及模型转换。这个案例研究表明,如何更sophisticated语言元素的Fujaba可能被利用在建模复杂的方面的状态图环境。此外,我们解决了一些非图形语法相关的方面,在建立这样的环境,例如。图形用户界面和多用户支持。关键词:状态图,MDA,图转换,Meta建模1介绍这篇文章是对可视化建模技术中基于图的工具的特别讨论的贡献。我们展示了如何利用Fujaba方法来构建一个简单的状态图建模环境。虽然我们试图保持我们的例子尽可能简单,我们将尝试解决所有的建模方面列出的呼吁论文,即抽象语法,模型转换,操作语义,一致性检查,和具体的语法。2抽象语法抽象语法经常被称为Meta模型。Fujaba采用了使用UML类图定义的显式图模式 因此1571-0661 © 2005 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2004.12.02938L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37状态图环境的简单Meta模型或抽象语法定义可以如图1所示进行定义。注意,从这样的Meta模型/类图中,Fujaba为不同类型的对象、它们的属性和它们的关系生成Java类。关系是使用成对的前向和后向指针来实现的对于to-many关系,Fujaba采用不同类型的预先定义的容器类。Fig. 1. Fujaba中的类图从开发人员的角度来看,Fujaba我们的动态对象浏览器DOBS提供了一个Meta模型/类图/图形模式,可以用作模型/对象图/图形的简单编辑器。图2.然而,DOBS只显示了我们模型的抽象语法。要启用状态图表示法中的编辑,即仍然需要提供图形用户界面。这将在第6章讨论。注意,由于技术原因,Fujaba方法没有明确的概念,主图。这意味着,如果需要,没有预先定义的机制枚举当前图的所有元素。相反,模型本身必须提供一些对象,这些对象可以用于访问相应图的所有元素。因此,我们的Meta模型提供了一个显式的StateChart类,每个StateChart对象/节点收集所有元素,即状态和转换,对应的国家地图。L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3739图二. DOBS中的抽象语法3模型转换基于我们的Meta模型,我们现在讨论模型驱动架构意义作为一个简单的模型转换的例子我们首先讨论这一点,因为这使我们能够简化操作语义和一致性检查的规范。用或-状态对状态图进行扁平化处理,涉及到以或-状态为目标的转换的替换,以及离开或-状态的转换的替换,以及没有附加转换的或-状态的移除。40L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37图三. 替换以或状态为图3详细说明了针对或状态的转换的替换。这样的转换只是重新定位到嵌入在或状态中的状态图的初始状态。注意,图3使用了一个新的(函数)类Stat- eChartFlattener,它有一个对StateChart对象的statechart引用。图3中的图形转换匹配一个状态图对象sc,该对象包含一个或状态或,它是转换aToOr的目标。此外,图转换识别子状态对象inner,其中init属性的值为true,即初始子状态。 如销毁和创建标记所指示的,图3的图转换移除了连接转换aToOR和或状态or的目标链接,并添加了通向子状态inner的新目标链接。 如果这条规则尽可能多地适用,所有导致或状态的转换都被重定向到相应的初始状态。states.注意,在图1中,类OrState继承自类State。这意味着,任何时候我们需要一个State类型的节点,一个OrState类型的节点也可以完成这项工作(可替代性)。对于我们的图重写规则,这意味着节点内部可以匹配普通状态或或状态。因此,我们的图变换也适用于嵌套的或状态。L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3741见图4。 替换离开或状态的图4的(编程的)图形转换替换了离开或状态的转换。这是分三步完成的。第一个图重写规则识别带有到或状态或的源链接的转换或ToA并销毁它。如果此规则已成功应用,则第二个图重写规则识别尚未具有相同标签的离开转换的或的内部状态。注意,Fujaba使用划掉的元素来指定负面的应用条件。在此重写规则中,对象或不显示其类型。在Fujaba中,省略类型表示所谓的绑定对象。绑定对象是已经在先前步骤中与宿主图匹配的对象。因此,绑定对象不计算新的匹配,而是重用旧的匹配。第二图形重写规则也具有两个堆叠形状。这样的规则称为for-each活动。由于图4中的每个时间转换,每当第二个图重写规则识别出一个内部状态而没有适当的离开转换时,第三个图重写规则就会被执行。如果内部状态已经有这样的转换,则负节点另一个防止创建新的转换。这实现了UML状态图的优先级规则。第三个图重写规则创建一个新的42L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37这超级国家传入:过渡目标元件«摧毁»或:源传出:过渡超级国家内部:状态init == trueinit:=或.isInit[成功][失败]外部:OrState转换离开相应的内部状态,以与旧转换相同的状态a为目标。此外,转移标签和转移动作被转移。注意,一般来说,Fujaba只使用同构规则匹配。然而,第三图重写规则的maybe inner==a子句允许在同一主机图对象上匹配节点inner和a。这将处理自转换。StateChartFlattener::removeOuter():Booleansc:StateChartstatechart正确错误图五. 删除过时的或状态图5的图重写规则采用两个负节点,确保所考虑的或状态不再具有传出和传入转换。出于简单的原因,第三否定应用条件确保所考虑的或状态不嵌入在另一或状态中。这意味着,我们处理嵌套的或状态。如果所有的条件都成立,或状态被销毁,所有的子状态被添加到状态图sc。此外,或状态的初始化标记被转移到其初始子状态。因此,如果或态是通常态,它的初始子态也成为通常态。如果或状态是整个状态图的初始状态,则其初始子状态成为状态图的新初始状态在Fujaba中,图形语法就像一组规则的应用一样,尽可能长时间地需要显式地编程。 这可以如图6的(伪)图变换中所示来完成。图6使用了一个布尔约束来调用我们的三个模型转换。如果应用了上述转换之一(并返回true),我们将遵循成功转换,L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3743再次评估布尔约束。如果没有转换成功,则转换终止。因此,应用转换matten-StateChart将删除所有(甚至嵌套的)或状态,并得到一个简单的状态机。图六、尽可能长时间地使用转换规则注意,连接我们的三个基本模型转换的布尔或运算符使用左优先和短路求值。这意味着transition- sitionFromInner的优先级高于transitionToInner,transition ToInner的优先级又高于removeOuter。因此,所提出的应用一组图变换的方式意味着在变换规则上的优先权。根据这些先例,我们例如可能已经省略了图5的负节点。4操作语义本章为我们的状态图提供操作语义。当然,我们可以直接用(嵌套的)或状态来解释状态图。不过,这需要一些复杂的规则。因此,为了方便示例,本章假设状态图首先被注意到,并且所有或状态被适当替换。然后,可以使用图7的图形变换来执行状态图。为了处理事件,我们使用了一个FSMSimulator类型的对象。此模拟器对象具有标记当前活动状态的当前边缘。如果调用方法EventEvent,它会尝试使用参数event中提供的标签标识传出转换a。maybe current==next子句允许处理自转换。 如果存在这种过渡,则当前边缘被重定向到转换的目标状态。 此外,执行目标状态的transi- tion动作和do-动作。为了简单起见,这里使用System.out.println模拟。或者,44L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37例如,动作可能使用Java语法,我们可以使用Java解释器,如bean shell[1]来实际执行动作。见图7。 击发过渡5一致性检查一致性检查是建模环境的重要功能通常,有很多琐碎但有用的检查,例如转换需要有源和目标,状态必须在其范围内具有唯一的名称等。在这里,我们关注更具挑战性的一致性检查:每个状态都应该从初始状态可达。同样,出于简单性的原因,我们首先将or-state标记为仅用于处理简单的状态机。我们的可达性测试分为三个步骤,参见。图8.在第一步中,我们只需要使用一个不可到达的链接来标记所有状态。因此,多对象old收集状态图sc的所有状态元素。在第二步中,我们使用所谓的路径表达式(sourceTrans.targetState)*。一个简单的路径表达式只是一个虚线边标签列表。它通过遍历相应的链接进行评估。在我们的例子中,带有标签sourceTrans的边从状态引导到传出转换。 (In Fujaba,每条边都有两个标签,一个用于正向,一个用于反向。)相应地,targetState边缘从转变到其目标状态。因此,路径sourceTrans.targetState从一个给定的状态通向它的所有后继状态。在我们的例子中,我们使用*运算符来计算这个基本的路径表达式。 在图8的第二个图重写规则中,路径表达式被应用于我们的状态机的初始状态。 由于传递闭包,路径表达式计算通过零次、一次或多次遍历转换所到达的所有后继状态的集合。这套L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3745被收集在多对象可达对象中。注意,maybe子句允许初始状态包含在可达状态集合中。 注意,除了边标签的虚线列表和传递闭包运算符之外,Fujaba路径表达式还提供了一个或运算符来计算两个路径表达式的并集。更复杂的运算符尚未实现。见图8。 状态机一旦计算出可达状态的集合,图8的第三图重写规则就从这些节点移除不可达标记。注意,在第三个Activity中,多对象再次成为绑定对象。因此,在前一步中找到的对象集将在此步骤中重用6具体语法到目前为止,我们只在抽象语法的层次上处理了示例状态图环境。一旦我们对Meta模型、模型转换、操作语义和一致性检查进行了建模,我们只需要为新工具提供一个图形用户界面46L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37原则上,由于Fujaba代码生成器将我们的图形模式和图形转换为通常的Java代码,因此可以使用任何现代GUI工具包,例如Swing和任何现代GUI构建器,并以传统的方式构建GUI。然而,对于图表编辑器来说,这是非常痛苦的。或者,我们可以使用特殊的图形编辑器框架,例如DiaGen,参见。[3]的文件。然 而 , 在这 个 例 子 中, 我们 使 用 了 一个 简 单 的GUI 工 具 包, 名 为FujabaWindowToolkit( FWT ),我们已经开发用于教学目的。FWT 为swing元素提供了一组适配器类。这些适配器类能够在我们的Dobs环境中交互式地构建简单的GUI,参见。图9.图9显示了一个FVerticalContainer对象f5,它包含到两个FHorizontalContainer对象f4和f7的链接。上面的水平容器包含复选框f3和FTextField f1。下面的horizontal容器包含一个do/label和另一个文本字段f2。对象f5的上半部分显示了由该FWT结构生成的swing表示见图9。 Dobs中的GUI构造每个FTextField 对象都有一个标识相应逻辑对象的主题此外,FTextField对象有一个特殊的属性attr- Name,其中包含主体对象的属性名称。有了这些信息,FTextField对象就能够描述其主题对象的某个属性的值。类似地,用户可以点击FTextField的摆动表示并编辑所描绘的值。然后,FTextField更新主体对象的相应属性的值,自动L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3747mathically。因此,在我们的示例中,用户可以编辑名称或doAction直接通过包含在f5中的摆动表示来对状态s0进行控制。如果一个FWT容器的主题被改变,这个改变将被转发到所有感兴趣的子对象。因此,如果我们将f5连接到另一个状态,则swing表示将连接到该新状态的名称和doAction。对于整个状态图的表示,我们采用了一个FXYContainer,它允许移动其子对象。 然后我们附加FWT结构,一个单一的状态作为这个FXYContainer的原型。此外,我们告诉FXYContainer观察其主题状态图的元素关联因此,每次我们向该statechart的elements关联添加新状态时,FXYContainer都会向其内容中添加此类逻辑对象此外,这种新的FWT结构和逻辑对象之间的主题链接类似的机制可用于过渡。最后,表示状态图的FXYContainer被嵌入到FWTFrame对象中,该对象创建一个新的JFrame窗口,其中包含状态图元素的swing表示。这样,我们就创建了图10所示的GUI。图10个。用于状态图工具的简单FWT GUI7持久化、撤消/重做和多用户支持为了完成状态图环境的功能,我们需要能够存储和检索状态图项目。使用Java序列化机制可以很容易地实现这一点然而,Fujaba提供了一个特殊的框架,称为公共对象复制体系结构(CoObRA)。通过一个命令,Fujaba代码生成将改为使用CoObRA48L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)37机制因此,对对象图的所有改变被自动地原型化。然后,该协议用于存储和检索,用于撤销/重做,用于版本控制和合并来自多个作者的贡献。后一种机制基于乐观锁定概念提供多用户支持。[7]更多详情。8总结本文概述了一个小的案例研究应用Fujaba方法建模的一个简单的状态图环境。我们讨论了这种环境的典型要求,即抽象语法、模型转换、操作语义、一致性检查、具体语法和持久化概念。实际上,这样的CASE工具是Fujaba方法的原始应用领域。因此,为状态图示例的不同方面提供示例转换这些示例转换利用了Fujaba的许多更复杂的功能,例如编程图重写、方法调用、for- each活动、多对象、maybe子句、否定应用条件、路径表达式等。Progres图转换提供了类似的语言元素[6]。根据我们的经验,这种复杂的建模结构对于CASE工具所需的复杂功能的规范是强制性的。除了应用程序逻辑,一个实用的工具需要大量的ad-可扩展的功能,例如图形用户界面,持久化,撤销/重做和基于XMI的模型交换机制,代码生成等,以促进实现这样的功能,并允许与其他Java库的无缝集成,Fujaba生成通常的Java代码从图形模式和所有图形转换。这种生成的代码很容易与传统编程的系统部件混合。引用[1] http://www.beanshell.org/[2] I. 迪特海姆湖盖革A. Zündorf :SystematicStoryDrivenModeling,WorkshoponScenariosandState Machines:models,algorithms,and tools; workshop at ICSE 2004,Edinburgh,2004.[3] http://www2-data.informatik.unibw-muenchen.de/DiaGen[4] T. Fischer , J. Niere , L. Torunski : Konzeption und Realisierung einer integriertenEntwicklungsummgebungfur?rUML , Java undStroy-Driven-Modeling ( ingerman ) , DiplomaThesis,University of Paderborn,1998.[5] FujabaHomepage,University of Paderborn,http:www.fujaba.de/.L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 127(2005)3749[6] http://www-i3.informatik.rwth-aachen.de/research/projects/progres/[7] C. S chneider,A. Zündorf,J. Niere:CoObRA--向协作环境发展的一小步;软件工程环境方向研讨会;ICSE 2004研讨会,苏格兰,英国2004[8] A. 赵文忠:面向对象的软件开发,高等教育出版社,2001.
下载后可阅读完整内容,剩余1页未读,立即下载
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_lunwen.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)
会员权益专享
最新资源
- BSC关键绩效财务与客户指标详解
- 绘制企业战略地图:从财务到客户价值的六步法
- BSC关键绩效指标详解:财务与运营效率评估
- 手持移动数据终端:常见问题与WIFI设置指南
- 平衡计分卡(BSC):绩效管理与战略实施工具
- ESP8266智能家居控制系统设计与实现
- ESP8266在智能家居中的应用——网络家电控制系统
- BSC:平衡计分卡在绩效管理与信息技术中的应用
- 手持移动数据终端:常见问题与解决办法
- BSC模板:四大领域关键绩效指标详解(财务、客户、运营与成长)
- BSC:从绩效考核到计算机网络的关键概念
- BSC模板:四大维度关键绩效指标详解与预算达成分析
- 平衡计分卡(BSC):绩效考核与战略实施工具
- K-means聚类算法详解及其优缺点
- 平衡计分卡(BSC):从绩效考核到战略实施
- BSC:平衡计分卡与计算机网络中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](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)