没有合适的资源?快使用搜索试试~ 我知道了~
使用Fujaba进行简单状态图建模的小教程
理论计算机科学电子笔记148(2006)173-186www.elsevier.com/locate/entcs使用Fujaba进行刀具建模LeifGeigerAlbertZuendorf卡塞尔大学软件工程研究组,WilhelmshöoherAllee73,34121Kassel,Germany(Leif.Geiger)|albert.zuendorf}@ uni-kassel.de摘要本文是一个关于使用Fujaba构建工具的小教程。 在一个小案例研究的帮助下,我们讨论了如何使用Fujaba图形转换来解决视觉语言环境的不同要求。这涵盖了抽象和具体语法、静态和操作语义以及模型转换。这个案例研究表明,如何更复杂的语言元素的Fujaba可能会被利用在建模所需的CASE工具的复杂方面。此外,我们解决了一些非图形语法相关的方面,在建立这样的环境,例如。图形用户界面和多用户支持。关键词:可视化模型的语法和语义,模型转换,Meta CASE工具,Fujaba1引言本文是文[4]的推广。我们展示了如何利用Fujaba方法来构建一个简单的状态图建模环境。虽然我们试图保持我们的例子尽可能简单,我们将尝试解决典型CASE工具的所有建模方面,即抽象语法、模型转换、操作语义、一致性检查和具体语法。第一部分简要介绍了Fujaba支持的图语法方法。接下来是一系列章节,讨论CASE工具构建所需的不同方面。1571-0661 © 2006 Elsevier B. V.在CC BY-NC-ND许可下开放访问。doi:10.1016/j.entcs.2005.12.017174L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)1732Fujaba的图形转换方法Fujaba是PROGRES语言和环境的继承者,参见。[7]的文件。Fujaba采用了一种图形转换语言,它具有与PROGRES系统非常相似的语言特性和底层语义。这意味着,Fujaba是基于集合论的。这也可以与单推出方法进行比较。Fujaba使用带标记边和节点的类型图。节点具有标识并且可以具有类型化属性。边由一组三元组建模,每个三元组由一个起始节点、一个边标签和一个目标节点组成。这意味着,具有相同源和目标节点以及相同标签的两条边是不可能的。Fujaba采用了一个明确的图形模式,描述为UML类图。静态地(即在编译时)强制执行与图模式的连接。通常,Fujaba图变换仅限于内射匹配。然而,一个特殊的maybe子句允许单射匹配,其中粘合条件是静态的。Fujaba允许删除未知上下文中的节点,即我们没有悬挂边条件。另一方面,Fujaba图变换不容易逆转。Fujaba有属性条件和简单的否定应用条件。作为一个简单的混合概念,Fujaba采用可选的和集值的节点,可以匹配到主机图中的多个节点。最后,Fujaba提供了简单的路径表达式作为边缘序列的抽象手段Fujaba图转换采用UML协作图表示法,参见。图3.这种表示法在一个图中显示了规则的左侧和右侧。核心图的元素用黑色显示,没有原型标记。只有左边的元素即 应该删除的元素用红色和销毁标记标记。仅属于右侧的元素,即,要创建的元素由创建标记标记。属性条件可以显示在相应对象的属性隔间中,或者显示在由花括号包围的附加布尔表达式中。属性修改可以显示为属性隔室中的赋值。此外,UML协作消息可以用于调用对象上的方法或嵌入任意Java语句。Fujaba采用编程图形转换。这是通过在UML活动图的活动框中嵌入图转换规则来实现的,参见。图4.活动图和图形转换规则的这种组合称为故事图。故事图可以使用分支和循环。中的方法声明中附加了故事图L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173175类图。因此,故事图可能有参数和返回值。另外,一个隐式的this对象被用来引用调用方法的对象。方法和故事图可以使用UML协作消息来调用。我们支持递归,面向对象的继承,方法的重写,从而使多态性。参数名和对象名将整个故事图作为作用域。在图变换的应用期间,所采用的对象的名称被绑定到宿主图的节点。 此绑定可以重复使用在随后的图形转换中,使用名称而不使用类型。因此,像n:T这样的对象标记需要与主机图节点进行新的匹配,而像n这样的对象标记重用先前匹配或参数值的绑定。图变换可以固有地在给定的主图内具有多个可能的匹配。通常,Fujaba会伪随机地选择其中一个匹配项(只是找到的第一个匹配项,具体取决于内部容器中的顺序)。通过使用由双Activity形状指示的for-each Activity,在成功应用规则后继续搜索匹配项,直到不再找到新的匹配项。规则应用也可能完全失败。为了解决这个问题,故事图提供了成功和失败的转换。3抽象语法在下面的章节中,我们将使用Fujaba方法来建模一个简单的可视化语言。我们将为包含状态、转换和或状态的UML状态图的一小部分建模一个CASE工具。这个CASE工具将允许编辑这种状态图,将添加模拟支持,将把模型转换为有限状态机,并支持一些基本的一致性检查。首先,我们将开始对状态图环境的抽象语法建模。抽象语法经常被称为Meta模型。Fujaba采用了使用UML类图定义的显式图模式。因此,一个简单的Meta模型或抽象语法定义的状态图引擎,可以如图1所示定义“预处理”。注意,从这样的Meta模型/类图中,Fujaba为不同类型的对象、它们的属性和它们的关系生成Java类。关系是使用成对的前向和后向指针来实现的。对于to-many关系,Fujaba采用不同类型的预先定义的容器类。从开发人员的角度来看,Fujaba提供了Meta模型/类图/图形模式,我们的动态对象176L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173Fig. 1. Fujaba中的类图图二. DOBS中的抽象语法浏览器DOBS可能已经被用作模型/对象图/图形的简单编辑器,参见。图2.然而,DOBS只显示了我们模型的抽象语法。要启用状态图表示法中的编辑,即仍然需要提供图形用户界面这在L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173177第7章.注意,由于技术原因,Fujaba方法没有明确的概念,主图。这意味着,如果需要,没有预先定义的机制枚举当前图的所有元素。相反,模型本身必须提供一些对象,这些对象可以用于访问相应图的所有元素。因此,我们的Meta模型提供了一个显式的StateChart类,每个StateChart对象/节点收集相应的StateCharts的所有元素,即状态和转换。4模型转换基于我们的Meta模型,我们现在讨论模型驱动架构意义上的模型转换。作为一个简单的模型转换的例子我们首先讨论这一点,因为这使我们能够简化操作语义和一致性检查的规范。用或-状态对状态图进行扁平化处理,涉及到以或-状态为目标的转换的替换,以及离开或-状态的转换的替换,以及没有附加转换的或-状态的移除图三. 替换以或状态为图3详细说明了针对或状态的转换的替换。这种转换只是简单地重新定位到状态图嵌入的初始状态178L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173在国家内部。注意,图3使用了一个新的(函数)类Stat-eChartFlattener,它有一个对StateChart对象的statechart引用。图3中的图形转换匹配一个状态图对象sc,该对象包含一个或状态或,它是转换aToOr的目标。此外,图转换识别子状态对象inner,其中init属性的值为true,即初始子状态。如销毁和创建标记所指示的,图3的图转换移除了连接转换aToOR和或状态or的目标链接,并添加了通向子状态inner的新目标链接。 如果尽可能频繁地应用此规则,则所有导致或状态的转换都将重定向到相应的初始states.注意,在图1中,类OrState继承自类State。这意味着,任何时候我们需要一个State类型的节点,一个OrState类型的节点也可以完成这项工作(可替代性)。对于我们的图重写规则,这意味着节点内部可以匹配普通状态或或状态。因此,我们的图变换也适用于嵌套的或状态。见图4。 替换离开或状态的图4的(编程的)图形转换替换了离开或状态的转换。这是分三步完成的第一个图形重写规则L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173179识别具有到或状态或的源链接的转换或ToA并销毁它。如果此规则已成功应用,则第二个图重写规则识别尚未具有相同标签的离开转换的或的内部状态。注意,Fujaba使用划掉的元素来指定负面的应用条件。在此重写规则中,对象或不显示其类型。在Fujaba中,省略类型表示所谓的绑定对象。绑定对象是已经在先前步骤中与宿主图匹配的对象。因此,绑定对象不计算新的匹配,而是重用旧的匹配。第二图形重写规则也具有两个堆叠形状。这样的规则称为for-each活动。由于图4中的每个时间转换,每当第二个图重写规则识别出没有适当的离开转换的内部状态时,第三个图重写规则被处决了如果内部状态已经有这样的转换,则负节点另一个防止创建新的转换。这实现了UML状态图的优先级规则。第三图重写规则创建离开对应的内部状态的新转换,以与旧转换相同的状态a为目标。 此外,转移标签和转移动作被转移。注意,一般来说,Fujaba只使用同构规则匹配然而,第三图重写规则的maybe inner==a子句允许在同一主机图对象上匹配节点inner和a。这将处理自转换。图5的图重写规则采用两个负节点,确保所考虑的或状态不再具有传出和传入转换。出于简单的原因,第三否定应用条件确保所考虑的或状态不嵌入在另一或状态中。这意味着,我们处理嵌套的或状态。如果所有的条件都成立,或状态被销毁,所有的子状态被添加到状态图sc。 此外,或状态的初始化标记被转移到其初始子状态。因此,如果或态是通常态,它的初始子态也成为通常态。 如果或状态是整个状态图的初始状态,则其初始子状态成为状态图的新初始状态在Fujaba中,图形语法就像一组规则的应用一样,尽可能长时间地需要显式地编程。这可以如图6的(伪)图变换中所示来完成。图6使用了一个布尔约束来调用我们的三个模型转换。如果应用了上述转换之一(并返回true),我们将遵循成功转换,并再次评估布尔约束。如果没有转换成功,则转换终止。因此,应用变换法-180L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173这超级国家元件«摧毁»目标源超级国家内部:Stateinit == trueinit:=或.isInit[成功][失败]或:OrState传出:转换传入:过渡外部:OrStateStateChartFlattener::removeOuter():Booleansc:StateChartstatechart正确错误图五. 删除过时的或状态StateChart删除所有(甚至嵌套的)或状态,并生成一个简单的状态机。图六、尽可能长时间地使用转换规则注意,连接我们的三个基本模型转换的布尔或运算符这意味着transition- sitionFromInner的优先级高于transition ToInner,transitionToInner的优先级又高于removeOuter。因此,所提出的应用一组图变换的方式意味着在变换规则上的优先权根据这些先例,我们可能省略了图5的负节点。L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)1731815操作语义本章为我们的状态图提供操作语义。当然,我们可以直接用(嵌套的)或状态来解释状态图。不过,这需要一些复杂的规则。因此,为了方便示例,本章假设状态图首先被注意到,并且所有或状态被适当替换。然后,可以使用图7的图形变换来执行状态图。为了处理事件,我们使用了一个FSMSimulator类型的对象。此模拟器对象具有标记当前活动状态的当前边缘。 如果调用方法EventEvent,它会尝试使用参数event中提供的标签标识传出转换a。maybe current==next子句允许处理自转换。 如果存在这种过渡,则当前边缘被重定向到转换的目标状态。 此外,transi- 执行目标状态的操作动作和执行动作。为了简单起见,这里使用System.out.println模拟。或者,这些操作可能会使用Java语法,我们可以使用Java解释器,如bean shell [1]来实际执行这些操作。见图7。 击发过渡6一致性检查一致性检查是建模环境的重要功能通常,有很多琐碎但有用的检查,例如转换需要有源和目标,状态必须在其范围内具有唯一的名称等。在这里,我们关注更具挑战性的一致性检查:每个状态都应该从初始状态可达同样,为了简单起见,182L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173首先,我们只为了处理简单的状态机而修改或状态。我们的可达性测试分为三个步骤,参见。图8.在第一步中,我们只需要使用一个不可到达的链接来标记所有状态。因此,多对象old收集状态图sc的所有状态元素。 在第二步中,我们使用所谓的路径表达式(sourceTrans.targetState)*。一个简单的路径表达式只是一个虚线边标签列表。 它通过遍历相应的链接进行评估。在我们的例子中,带有标签sourceTrans的边从状态引导到传出转换。 (In Fujaba,每条边都有两个标签,一个用于正向,一个用于反向。)相应地,targetState边缘从转变到其目标状态。因此,路径sourceTrans.targetState从一个给定的状态通向它的所有后继状态。在我们的例子中,我们使用*运算符来计算这个基本路径表达式的传递闭包。在图8的第二图重写规则中,路径表达式应用于我们的状态机的初始状态。 由于传递闭包,路径表达式计算通过零次、一次或多次遍历转换所到达的所有后继状态的集合。 这套被收集在多对象可达对象中。注意,maybe子句允许初始状态包含在可达状态集合中。 注意,除了边标签的虚线列表和传递闭包运算符之外,Fujaba路径表达式还提供了一个或运算符来计算两个路径表达式的并集。更复杂的运算符尚未实现。一旦计算出可达状态的集合,图8的第三图重写规则就从这些节点移除不可达标记。注意,在第三个Activity中,多对象再次成为绑定对象。因此,在前一步中找到的对象集将在此步骤中重用L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173183见图8。 状态机7具体语法到目前为止,我们只在抽象语法的层次上处理了示例状态图环境。一旦我们对Meta模型、模型转换、操作语义和一致性检查进行了建模,我们只需要为新工具提供一个图形用户界面原则上,由于Fujaba代码生成器将我们的图形模式和图形转换为通常的Java代码,因此可以使用任何现代GUI工具包,例如Swing和任何现代GUI构建器,并以传统的方式构建GUI。然而,对于图表编辑器来说,这是非常痛苦的。或者,我们可以使用特殊的图形编辑器框架,例如DiaGen,参见。[3]的文件。然而,在这个例子中,我们使用了一个简单的GUI工具包,名为FujabaWindowToolkit(FWT),我们已经开发用于教学目的。FWT为swing元素提供了一组适配器类。这些适配器类能够在我们的Dobs环境中交互式地构建简单的GUI,184L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173参见图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自动更新主体对象的相应属性的值。因此,在我们的示例中,用户可以直接通过f5中包含的swing表示来编辑状态s0的名称或doAction。如果一个FWT容器的主题被改变,这个改变将被转发到所有感兴趣的子对象。因此,如果我们将f5连接到另一个状态,则swing表示将连接到该新状态的名称和doAction。对于整个状态图的表示,我们采用了一个FXYContainer,它允许移动其子对象。 然后我们附加FWT结构,一个单一的状态作为这个FXYContainer的原型。此外,我们告诉FXYContainer观察其主题状态图的元素L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173185因 此 , 每 次 我 们 向 该 statechart 的 elements 关 联 添 加 新 状 态 时 ,FXYContainer都会向其内容中添加此类逻辑对象此外,这种新的FWT结构和逻辑对象之间的主题链接类似的机制可用于过渡。最后,表示状态图的FXYContainer被嵌入到FWTFrame对象中,该对象创建一个新的JFrame窗口,其中包含状态图元素的swing表示。这样,我们就创建了图10所示的GUI。图10个。用于状态图工具的简单FWT GUI8持久化、撤消/重做和多用户支持为了完成状态图环境的功能,我们需要能够存储和检索状态图项目。使用Java序列化机制可以很容易地实现这一点。然而,Fujaba提供了一个特殊的框架,称为公共对象复制体系结构(CoObRA)。使用一个命令,Fujaba代码生成将改为使用CoObRA机制。因此,对对象图的所有改变被自动地原型化。然后,该协议用于存储和检索,用于撤销/重做,用于版本控制和合并来自多个作者的贡献。后一种机制基于乐观锁定概念提供多用户支持。[8]详细内容请见。9总结本文通过一个简单的状态图环境的案例研究,概述了使用Fujaba进行工具建模的方法。我们讨论了典型的重新-186L. 盖革A.Zündorf/Electronic Notes in Theoretical Computer Science 148(2006)173这种环境的要求,即抽象语法、模型变换、操作语义、一致性检查、具体语法和每个概念。这些示例转换利用了Fujaba的许多更复杂的功能,例如编程图重写、方法调用、for- each活动、多对象、maybe子句、否定应用条件、路径表达式等。类似的语言元素仅由Progres图转换[7]提供。根据我们的经验,这种复杂的建模结构对于CASE工具所需的复杂功能的规范是强制性的。除了应用程序逻辑,一个实用的工具需要大量的ad-可扩展的功能,例如图形用户界面,持久化,撤销/重做和基于XMI的模型交换机制,代码生成等,以促进实现这样的功能,并允许与其他Java库的无缝集成,Fujaba生成通常的Java代码从图形模式和所有图形转换。这种生成的代码很容易与传统编程的系统部件混合。引用[1] http://www.beanshell.org/[2] I. 迪特海姆湖盖革A. Zündorf:SystematicStoryDrivenMo deling,WorkshoponScenariosandState Machines:models,algorithms,and tools; workshop at ICSE 2004,Edinburgh,2004.[3] http://www2-data.informatik.unibw-muenchen.de/DiaGen[4] L.盖革A. Zndorf:用Fujaba进行状态图建模;第二届基于图形的工具国际研讨会(GraBaTs);ICGT 2004,罗马,意大利,2004年。[5] T. Fischer , J. Niere , L. Torunski : Konzeption und Realisierung einer integriertenEntwicklungsummgebungfur?rUML,JavaundStroy-Driven-Modeling(ingerman),Diploma Thesis,University of Paderborn,1998.[6] Fujaba Homepage,University of Paderborn,http://www.fujaba.de/.[7] http://www-i3.informatik.rwth-aachen.de/research/projects/progres/[8] C. S chneider,A. Zündorf,J. Niere:CoObRA--向协作环境发展的一小步;软件工程环境方向研讨会;ICSE 2004研讨会,苏格兰,英国2004[9] A. 赵文:《面向对象的软件开发方法》,北京大学出版社,2001年。
下载后可阅读完整内容,剩余1页未读,立即下载
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.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)