11.2.3 语义
Connectable Elements
ConnectableElement是一个抽象元类。每个ConnectableElement代表了一个结构化分类符内部结构中的一个参与者;这些参与者称为roles(角色)。角色可以由Connector(连接器)连接,并且规定在结构化分类符的实例中所包含的链接(linked)实例的配置。
ConnectableElement的具体语义由它的具体子类给定。通常,每个ConnectableElement展示出一组有效的(effective)需求接口和一组有效的提供接口。这些集合用于判定ConnectableElements(使用连接器)的可连接性。
对于不是代理(delegating)端口(参见11.3.3)的ConnectableElements,按照如下衍生的有效需求接口就是需求接口,有效提供接口就是提供接口:
- 提供接口包含由该ConnectableElement的类型及其超类所实现的接口集,或者如果它是一个接口的话,由它的类型(自身)构成的集合。
- 需求接口包含由该ConnectableElement及其超类所使用的接口集合。
ConnectableElement可以通过一个ConnectableElementTemplateParameter被暴露为模板的一个形式参数。只有在该ConnectableElement是一个属性时,对于此的语义和表示法才有定义(参见9.5属性的语义和表示法)。
部分和角色
结构化分类符的属性遵循9.5中定义的属性的语义。
属性是一种ConnectableElement。一个结构化分类符的所有ownedAttributes都是角色,并且可以使用连接器连接起来。
结构化分类符中那些isComposite=true的ownedAttributes称为它的parts(部分)。因此,部分构成了角色的一个子集。
连接器
连接器规定了结构化分类符中扮演角色(自有的或继承的)的两个或多个实例之间的链接(links,参见11.5 关联)。每个链接可以被实现为简单如一个指针或复杂如一个网络连接,并且它代表了实例能够进行通信的可能性,因为实例的标识是已知的(由于作为输入的参数、在变量或slots中存储),或者甚至是因为参与通信的实例就是它们本身。
相比于关联,关联规定了相关联的分类符的任意适当类型的实例之间的链接,连接器只规定了扮演角色的那些实例之间的链接。
每个连接器可以附加到两个或更多的ConnectableElements,每一个都代表了一组为结构化分类符的实例化做贡献的实例。
ConnectorEnd(连接器端)是连接器的一个端点,它把连接器附加到ConnectableElement上。
对应于连接器的链接在结构化分类符的实例创建的时候被创建。所有的这些链接随着结构化分类符实例的销毁而销毁。
连接器可以指定一个关联类型,此种情形下,连接器规定的链接都是该关联的实例。
连接器一端的每一个ConnectableElement的每一个有效需求接口的每个特征都必须在另一端有一个ConnectableElement的有效提供接口中的一个特征相匹配。一个特征与另一个相匹配至少在满足如下情况:两个特征相同或者当它们都是属性或操作时,第二个特征是第一个的重定义。然而,遵循本规范的工具也可以允许其他情况的匹配。
当有多个连接器附加到一个ConnectableElement时,其语义与一个n元连接器把该ConnectableElement通过多个连接器连接到其它ConnectableElements是一样的。
连接器有一个种类,它的是是assembly或delegation。delegation连接器的语义只与Ports有关(在11.3介绍)。所有其它的连接器都是assembly连接器。
ConnectorKind是一个具有如下字面量值的枚举:
- assembly:指示该连接器是一个assembly连接器。
- delegation:指示该连接器是一个delegation连接器。
行为可以与连接器关联作为契约以规定穿过连接器的有效交互模式。
Multiplicities and topologies
ConnectableElement上的multiplicities约束了结构化分类符实例中该对象被创建的数目,它遵循MultiplicityElement(参见7.5.3)的语义。
对于一个二元连接器,连接器端的multiplicity指示了可以与另一端的每一个ConnectableElement实例相连的实例数目。对于一个n元连接器,一端的multiplicity约束了链接(可能指向一个包含每个其它端的特定实例的集合)的数目。
当一个实例从一个结构化实例的一个角色移除时,由于该角色和其它角色之间的连接器而存在的链接也别销毁。
从连接器端和那些它们相互链接的ConnectableElements的multiplicities并不总能推断出拓扑。图11.6和11.7展示了能够从multiplicities判定其拓扑的特定示例。