概述
活动对象由包含协议和端口的封装体组成。
封装体是高度封装的对象,它们通过其端口对象对其他封装体使用基于消息的通信。封装体可聚集其他封装体。封装体结构可包含其他封装体,后者为封装体角色。
两个对象之间交换的所有消息都遵循称为协议的通信模式。它本质上是一种契约协议,用于定义协议中参与者之间可交换消息的有效类型。
状态图是用于定义对象行为的一种方式。它显示某对象或交互在其生命周期中对收到的消息作出响应而经历的一系列状态,以及其响应和操作。
工具步骤
要在 Rational Rose 中使用活动对象进行设计,请执行以下步骤:
-
创建封装体角色
-
创建端口并绑定到协议
-
定义封装体状态机
-
定义状态和子状态
-
定义状态转换
-
定义类的属性
封装体在模型浏览器的“逻辑”视图中创建。
-
在工具箱中选择封装体角色工具。
-
将光标放在要放置封装体角色的位置并左键单击。
-
从下拉列表选择新封装体角色的关联封装体。
-
向封装体角色提供相应名称。
-
为要创建的每个封装体角色重复以上步骤。
-
在模型浏览器或类图中查找封装体。
-
在浏览器中展开封装体下的元素,或右键单击类图中的封装体以打开封装体的结构图。
-
使用工具箱中的端口工具将端口放到封装体的结构图上。可将该端口放到封装体的边框上或大型矩形区域内。
-
设置端口的名称。
-
从列表选择协议,或新建一个。
-
右键单击端口以选择“端口规范”对话框。
-
使用“端口规范”对话框可更改协议、选择端口是有线的还是无线的,以及设置该端口是否配对。
-
在模型浏览器或类图中查找封装体。
-
在浏览器中展开封装体下的元素,或右键单击类图中的封装体以打开封装体的状态图。
-
使用状态图工具箱将状态和转换放入状态图中。
-
查找要更新其行为的封装体。可以在模型浏览器中或类图上找到封装体。
-
右键单击封装体以打开“状态图”。这将在“状态图编辑器”中打开该图。
-
使用工具箱中的状态工具向该图上放一个新状态。为要创建的每个状态执行该操作。
-
向每个状态提供相应名称。
-
双击将具有子状态的状态。这将打开一个新的状态图,可以在该状态图中添加子状态。
-
使用窗口底部的选项卡选择浏览回哪一个状态级别。
注意:也可以通过“状态图编辑器”的“导航器”区域添加状态。
添加初始转换
-
单击图中的初始点并将转换拖到目标状态上面。初始点是图中左上角显示的黑色圆圈。
-
向转换提供相应名称(如果不是缺省名称)。初始转换具有缺省名称 Initial。 可通过选中标签并进行输入来更改名称。创建了封装体实例之后,运行时将自动调用该初始转换。创建了封装体实例之后,将立即运行与初始转换关联的任意操作码。
添加转换
-
从工具箱选择转换工具,并将转换从源状态拖到目标状态。
-
向转换提供相应名称,或接受缺省名称。
向状态机添加详细代码
可以将 C、C++ 或 Java 代码作为操作添加到封装体状态图上的转换、选择点和状态入口或出口上,以便在运行时执行。为模型生成的代码中仅包含添加到封装体状态图的代码。为这些类生成的代码中不包含协议或数据类状态图上的详细操作。
添加触发器
必须首先定义接收触发器的端口,然后才可以为转换设置触发器。
-
双击移交以打开“移交规范”对话框。
-
选择触发器选项卡。
-
将光标放到端口列表区域中,然后右键单击并从菜单中选择插入。
-
在“端口”区域,选择将接收触发器的端口。
-
在“信号”区域,选择将引发触发器事件的端口信号。
-
单击确定按钮以关闭打开的对话框。
向转换添加代码
由于已经准备好了所有必需元素(初始状态、初始转换,以及端口),所以必须向初始转换添加详细代码,以及向状态转换添加状态。当在模型执行时运行初始转换,或在状态到状态的转换上接收到触发器时,将执行详细代码。
-
双击移交以打开“移交规范”对话框。
-
选择操作选项卡以显示代码窗口。
-
添加转换时将执行的代码。
-
选择确定按钮以关闭打开的对话框。
注意:无需包含左右花括号(“{”和“}”)。代码生成器将自动添加。
-
通过双击浏览器中的封装体,或通过在图中选择封装体并从弹出菜单中选择打开规范,来打开“封装体规范”对话框。
-
选择“封装体规范”中的属性选项卡。
-
将光标放到选项卡的打开区域中,然后右键单击并选择插入。
-
将名称 NewAttribute1 更改为更有意义的名称,然后按 ENTER 键。
-
双击新属性以显示“属性规范”对话框。
-
使用“属性规范”对话框设置属性类型和初始值。
|