前页 | 后页 |
状态分析器
状态分析器是一个可以分析、检测和记录类实例状态的特征。特征通过组合状态定义(在类上定义为约束)和称为状态点的标记来工作。它适用于执行分析器支持的任何语言,包括 Microsoft.NET、Mono、 Java和原生 C++。
我们首先选择一个类并编写我们的状态定义。
我们可以通过将类放在图表上并链接到本身链接到特定状态定义约束的类注记来获得我们定义的所有状态定义的图片。我们将在后面的部分中解释如何做到这一点。
通过在相关源代码中放置一个或多个标记来设置状态点。
要分析的程序运行使用状态分析器控件运行。当执行分析器遇到任何状态点时,分析类的当前实例。在实例的值域与状态定义匹配的情况下,记录一个状态。每次实例变化时,都会检测到新的状态。控件列出发现的每个状态。在每个状态下,控件列出了由类的实例进行的到其他状态的离散转换集。
该信息可用于创建状态机。
使用相同的信息,我们可以轻松生成热图。这个例子展示了一个'Train'类,它的'Bulletin'状态定义(作为一个链接的注记),以及它产生的热图。地图中的数字是百分比。从地图中我们可以观察到火车在 46% 的时间处于“在途”状态。
这是生成我们的热图的“公告”状态定义的分析。
访问
功能区 |
执行 > 工具 > 记录器 > 打开记录器 >状态分析器 设计>元素>编辑>约束 |
状态定义
状态定义由类元素的约束属性组成。约束类型应命名为StateDefinition.name ,其中 'name' 是您选择的定义标题。 These titles are listed in the combo box of the状态分析器whenever a类is selected.在运行程序之前,您可以从此组合框中选择一个定义。我们示例中的状态定义名为“状态”。它根据 CTrain类实例的位置定义状态。
状态定义由一个或多个规范组成。每个状态规范都以关键字“statedef”开头,然后是一个或多个语句。语句定义描述状态的约束,以及可选的变量,其值可用于命名状态。语句用大括号括起来,并以分号结尾,如下所示:
状态定义 {
位置=0;
出发。名称;
}
使用变量命名状态
在此示例中,“Location”是一个常量,“Departing.name”是一个变量。附加语句遵循约束并指示要从变量值分配的状态名称。这是命名指令的定义。
状态定义 {
位置=0;
出发。名称;
}
名称=出发。名称;
使用文字命名状态
在此示例中,状态定义仅包含常量,并且状态使用文字命名。
状态定义 {
位置=100;
}
名称='中央';
定义多个状态规范A单个状态定义。
状态定义 {
乘客> 100;
}
名称=忙;
状态定义 {
乘客>= 50;
}
名称=安静;
状态定义 {
乘客<50;
}
名称=非常安静;
状态定义 {
乘客= 0;
}
名称=空闲;
默认状态
状态定义可以指定A默认的“catch all”状态,当没有其他状态为真时,该状态将描述状态的状态。您使用类似于以下的语句为定义定义默认状态:
状态定义 {
位置=0;
出发。名称;
}
名称=出发。名称;
默认=移动;
在此示例中,在执行过程中,检测到具有非零“位置”属性的任何实例都将被记录为处于“移动”状态。
您可以通过禁用状态分析器工具栏下拉菜单上的“包括默认状态”选项来选择排除默认状态的记录。这将排除到正在记录的任何“默认”状态的转换。
在显示状态的类元素上创建注记定义定义
本节介绍如何创建显示为类定义的所有状态定义的类图。
行动
显示类图 |
打开现有的类图或创建一个新的。 |
创建指向类元素的链接 |
将感兴趣的类作为链接拖到图表上。 |
创建一个注记元素 |
在图表上创建一个注记元素并将其链接到类。 |
将注记链接到状态定义 |
选择注记和类之间的链接,并使用其上下文菜单,选择“将注记链接到元素特征”选项。 |
选择要在注记上显示的定义 |
在元素对话框中,从下拉组合中选择“约束”。将列出任何已定义的状态定义供您选择。 |
重复 |
对类上的任何其他状态定义重复过程。 |