11.3.3 语义

Ports

端口代表了一个被封装分类符与它的环境进行通信的交互点。可以在一个被封装分类符上定义多个端口,以使得可以基于不同的端口来区分不同的通信。通过将被封装分类符的内部与它的环境进行解耦,端口允许被封装分类符独立于它的环境而定义,这使得它可以在任意符合端口所暴露的约束的环境下都可被复用。

端口是被封装分类符的属性,它规定了被封装分类符和它的环境、或者是被封装分类符的行为与它的内部角色的一个可区分的交互点。端口通过连接器连接起来,通过连接器,请求可以调用被封装分类符的行为特征。一个端口可以规定被封装分类符提供给它的环境的服务,以及被封装分类符其它它的环境提供的服务。

isService属性为真时,指示该端口提供被封装分类符的公开功能。如果为假,该端口用于实现被封装分类符,而不是作为一个外部可见的被封装分类符的功能,因此它可以随着被封装分类符的内部实现的改变而改变或被删除。

短语“部分上的端口”或者更一般化的“属性上的端口”指示在结构化分类符中扮演一个角色的属性是一个被拥有端口的被封装分类符。该结构化分类符中的一个连接器可以连接到这些端口中的一个。此种情况下,连接器端的partWithPort属性引用实际被连接到的属性:通常,相同的被封装分类符中会有许多属性,而partWithPost用于指示正确(连接)的属性。

与端口关联的接口规定了交互的性质。端口的需求接口刻画了从被封装分类符通过该端口向它的环境发送请求。该被封装分类符的实例期望在它的环境中会有一个或多个它的需求接口的实例来提供需要的特征。端口的提供接口刻画从被封装分类符的环境通过该端口向被封装分类符发送请求。被封装分类符必须提供由提供接口所拥有的特征。

作为一种属性,端口有类型。端口的提供需求接口与端口的类型相关,该类型由isConjugated值所仲裁如下:

  • 如果isConjugated为假,那么provided由端口类型和它的超类所实现的接口集合的联合衍生而成,或者如果端口的类型是一个接口,那么就直接是这个接口;required由端口的类型和它的超类所使用的接口集合的联合衍生而成。
  • 如果isConjugated为真,那么provided由端口的类型和它的超类所使用的接口集合的联合衍生而成;required由端口类型和它的超类所实现的接口的集合联合衍生而成,或者如果端口是一个接口,那么直接就是该接口。

接口不必建立端口上的实际交互序列。端口的协议可能引用一个协议状态机,由它来描述发生在端口上的有效操作和Reception调用序列。

当被封装分类符的一个实例被创建时,对应于它的每个端口的实例按照端口的类型和multiplicity被创建并存储在由每个端口规定的slots中。这些实例被称为“交互点”并且提供唯一的引用。因此,被封装分类符的实例可以从不同端口上区分请求所指向的行为特征。类似的,也可以指引端口上的类似请求,使其按照与附加到端口的连接器相对应的链接来路由。

注意. 在下面,“请求到达一个端口”应该理解为“请求出现到达了对应于端口的实例的交互点”。

通过设置isBehavior属性为真,端口可以规定任意到达该端口的请求由所属的被封装分类符的实例的行为来处理,而不是被转发给任意所包含的实例。这样的端口被称为“行为端口”。如果被封装分类符没有定义行为,那么到达行为端口的任意通信都会丢失。

代理(delegation)连接器把一个端口连接到所属被封装分类符中的一个角色。它代表了请求(操作调用或信号)转发。到达一个具有代理连接器的端口的请求将被路由到连接器所指向的目标来处理。

代理连接器可以对行为的层级分解进行建模,其中,被封装分类符所提供的服务可能最终是由内嵌了很多层的一个元素所实现。

作为一个可连接元素,端口上的“有效提供接口”(参见11.2.3)是它的提供接口,“有效需求接口”是它的需求接口。然而,对于一个代理端口,即端口位于代理连接器的一端、它不是一个角色、它不是一个行为端口,“有效提供接口”是它的需求接口,“有效需求接口”是它的提供接口。从而一个代理端口的连接行为就如同它有一个共轭于它的内部“形态”的外部“形态”。

如果多个连接器连接到了一个端口的一边,那么通过一个链接到达该端口的任意请求将会被转发到对应该链接的连接器在端口另一边的链接。对于需求是否在所有链接上还是只是其中之一上被转发没有定义。

results matching ""

    No results matching ""