行为(Behavior)

“行为”(Behavior)是一种通用的动态模型元素。具体的行为元素主要包括“活动”(Activity)、“状态机”(StateMachine)和“交互”(Interaction),它们分别以“活动图”、“状态机图”和“序列图”的方式说明一个行为的过程。这三种具体的行为元素的说明见相关章节。本节说明通用行为的语法。

在模块节点的行为分区中,为模块增加一个具体的行为元素(类目行为或拥有行为)的时候,行为元素的文本符合通用的行为语法规则。语法如下:

<name> ‘(’ [<parameter-list>] ‘)’ [‘:’ [<return-type-list> ] ] [ <behavior-constraint>]

用中文把上面的语法翻译一下如下:

<名称> ‘(’ [<参数列表>] ‘)’ [‘:’ [<返回参数列表> ] ] [ <行为约束>]

上面语法中各部分说明如下:

<name>:行为的名称,不能为空。行为元素也是有命名空间的,如果行为直接定义在一个包下面,这个包就是它的命名空间;如果定义在一个模块下面,模块的名称就是它的命名空间。

< parameter-list >:输入参数的列表,每个参数用“,”分隔。每个参数的语法如下:

    <parameter> ::= [<direction>] <parameter-name> ’:’ <type-expression> [’[’<multiplicity-range>’]’] [’=’ <default>][’{’ <parm-property> [’,’ <parm-property>]* ’}’]

    对应中文,每个参数用“方向 名称:类型[多重性]=默认值{参数属性}”这样的格式。

    <direction>:’in’ | ’out’ | ’inout’ (默认’in’),表示参数是传入、传出,无的话是传入。

    <parameter-name>:参数名称。

    <type-expression>:参数类型。

    <multiplicity-range>:集合参数的话参数的数量最少、最多多少个。

    = <default>:参数默认值。

    <parm-property>:参数属性,有以下选项:

    <param -prop> ::= ‘ordered’ | ‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’

    ‘ordered’ | ‘unordered’:表示返回的集合参数中是否是有顺序的;

    ‘unique’ | ‘nonunique’:表示集合中每个参数是否是唯一、不唯一的;

    ‘seq’ | ‘sequence’:这两个选项意义相同,‘seq’ 是 ‘sequence’的缩写,表示参数是一个有序的“袋”(bag),既有序但不唯一。

< return-type-list>:返回参数列表,每个返回参数用“,”分隔,每个返回参数的语法定义如下:

<return-type-mult-prop> :=

    <return-type> [‘[‘ <multiplicity-range> ‘]’] [‘{‘ <param-prop-list> ‘}’] ]对应中文,每个返回参数用“类型[多重性]参数属性”这样的格式。

    <return-type>:返回类型。和输入参数不同,返回参数没有名称,直接“类型”开头;

    <multiplicity-range>:多重性,表示这个参数是个集合的话,集合中每个参数最少、最多的个数;

    <param-prop-list>:参数的属性,有以下选项:

    <param -prop> ::= ‘ordered’ | ‘unordered’ | ‘unique’ | ‘nonunique’ | ‘seq’ | ‘sequence’

        ‘ordered’ | ‘unordered’:表示返回的集合参数中是否是有顺序的;

        ‘unique’ | ‘nonunique’:表示集合中每个参数是否是唯一的;

        ‘seq’ | ‘sequence’:这两个选项意义相同,‘seq’ 是 ‘sequence’的缩写,表示参数是一个有序的“袋”(bag),既有序但不唯一。

<behavior-constraint>:行为的约束,一般是“{}”中一个约束表达式。

在行为的语法中,每个输入、输出参数既可以是单一值,也可以是一个集合。也就是一个参数的一次传递,可以传递一个值,也可以传递一组值。所以每个参数才有多重性、是否唯一、有序等等这个集合的属性。

在表示行为的语法前面,可能会有表示具体行为类型的构造型,如果«活动»、«状态机»或«交互»。

下图为一个模块中定义的类目行为和拥有行为的语法示例。

在这个例子中,模块“报警系统”有一个拥有行为“Alarm”,输入参数为字串类型的报警信息“message:String”和整形参数“type:Integer”,这个行为返回类型为“Sound”的信息。它表示“报警系统”有一个功能Alarm,根据报警类型,把字符的报警信息转为声音。