11.2.4 表示法

结构化分类符的内部结构表示在一个名为“internal structure”的独立格间内。该格间是必需的:所有遵循UML具体语法的工具都必须实现它。内部结构格间包含表示角色和连接器的符号。该格间出现在属性和操作格间之下。

一个部分可以在内部结构格间中内嵌一个外轮廓是实线的箱子符号来表示。不是组合的角色可以用一个外轮廓是虚线的箱子符号来表示。无论哪种情况,这个箱子都称作一个part box(部分箱子),尽管严格的讲只有组合才能构成部分。棒棒糖和插座符号可以用于表示部分的提供和需求接口,使用与该部分类型定义相同的表示(参见10.4.4)。

部分箱子符号有一个名称格间,它包含一个遵循9.5.4中语法定义的字符串。在部分箱子内可以显示一些细节来指示该部分的类型的特定属性值(当属性实例被创建后)。

属性的multiplicity也可以显示在部分箱子的右上角。

当一个角色是一个EncapsulatedClassifier(参见11.3)时,该类型的任意端口也可以表示为重叠在指示该角色的部分箱子的边界上的小圆圈符号。端口的名称靠近端口显示;multiplicity被包含在方括号中放于名称后。名称和multiplicity可以被省略。棒棒糖和插座符号可以用于指示该端口的提供和需求接口,使用与端口定义相同的表示法(参见11.3.4)。

如果一个角色的类型分类符不是类,那么部分箱子的名称格间在名称上面包含一个适当的关键字(例如,«component»)。对于一些种类的分类符,可选地在右手角用一个图标指示可以被显示的分类符的种类。

连接器使用与关联(参见11.5.4)相似的表示法来展示。可选的连接器名称字符串遵循如下语法:

<connector> ::= ([<name> ‘:’ <associationname>) | ([<name> ‘:’ <associationclassname>) | [<name>]

其中 <name>是连接器的名称,<associationname>或<associationclassname>分别是关联和关联类的名称,即连接器的类型。可以在连接器名称之上或前面放置一个带书名号的stereotype关键字。可以在连接器名称后面或下面放置一个属性字符串。

可以使用与关联端上相同的修饰来修饰连接器端。如果没有显示multiplicity,那么该multiplicity与附加到该端的角色的multiplicity匹配。

如果一个连接器端附加到内部结构的一个部分角色的一个端口并且没有显示multiplicity,那么该连接器端的multiplicity与端口的multiplicity和角色(如果有)的multiplicity的乘积相匹配。

下面三段的表示法规约是可选的:遵循本规范的工具不必实现它们。它们对于复杂系统的可扩展性有用。

如果部分有简单端口(具有单一的需求或提供接口的端口),那么可以使用ball-and-socket表示法来代表这些端口之间的组装连接器。Ball-and-socket图示不应该用于连接复杂(即,非简单)端口或没有端口的部分。

当连接简单端口时,用于组装或代理的普通连接器图示可以连接到球或插座符号而不是端口符号自身。

当有一个n元连接器连接两个以上的简单端口,并且两个以上的端口提供或需求相同或相兼容的接口时,可以用一个单一的符号来代表该接口,采用一种“channeled-ball-and-socket”表示法。

内部结构格间还可以按照11.7.4描述的表示法包含代表CollaborationUses的符号。

11.2.5 示例

图11.2 Parts and roles

图11.2展示了部分箱子的示例。左边的部分箱子指示包含它的实例通过一个组合关系会拥有四个Wheel类的实例。multiplicity显示在部分箱子的一角。右边的部分箱子不是组合的,它指示包含它的实例会引用1或2个Engine类的实例。

图11.3 Parts and roles with Ports

图11.3 展示了类型是EncapsulatedClassifiers的属性的部分箱子并带有端口的示例,本例中是简单端口。也可以使用更加复杂的端口表示。

图11.4 Alternative notations for connecting parts and roles with Ports

图11.4展示了在一个结构化分类符中在部分角色上连接简单端口的三种不同的表示法。在最顶部的示例中,连接器连接接的是端口。这在一个内部结构中是连接端口的唯一必需表示法。棒棒糖和插座指示端口上的提供和需求接口;它们的表示是可选的。在第二个示例中,连接器连接到球和插座符号;第三个示例中,使用了ball-and-socket图示。这些图示与最顶部的示例都指示相同的模型。

图11.5 Associations compared with Connectors

图11.5展示了Car类的两个可能的视图。在子图(i)中,Car与角色名为rear的类Wheel之间有一个组合关联,与角色名为e的类Engine之间有一个关联。在子图(ii)中,规定了相同的内容。然而,子图(ii)额外指示了reare属于类Car的内部结构。这使得在类Car上下文内的WheelEngine类实例可以满足的规约对于一般的wheels和engines不满足。举个例子,子图(i)规定Engine类的任意实例都可以连接到任意数量的Wheel类的实例上。然而,子图(ii)规定在Car类上下文内,扮演角色e的实例只能连接到两个扮演角色rear的实例。此外,扮演erear角色的实例只有在它们都是Car类的相同实例的角色时才能连接。换句话说,子图(ii)对WheelEngine类的实例(当它们在Car类的一个实例中扮演各自的角色时)断言了更多的约束。这些约束对一般情况下的WheelEngine是不成立的。其它wheels和enginees可以按照子图(i)的规定任意连接。

对于在一个内部结构中扮演一个角色的每个实例,初始时,会有与该角色相连的连接器的对立端的multiplicity下限数目的链接。如果那些端的multiplicities与它们所附加到的角色的mutiplicities匹配(图11.6(i)中所定义的),那么当宿主结构化分类符的一个实例被创建时,初始化配置将包含一组对应于角色的实例(按照角色的multiplicities规定),它们完全被链接所连接;参见图11.6(ii)中的结果实例。

图11.6 "Star" Connector pattern

对于扮演角色的每个实例,按照它们的次序为连接器的两端创建链接,直到达到连接器端multiplicity的最小值;参见图11.7(ii)的结果实例。本例中,只创建了两个链接。

图11.7 "Array" Connector pattern

图11.8的示例展示了类型为构件、带有简单端口(只有一个接口的端口)的部分的图示,和代表相兼容端口之间的一个组装连接器的可选ball-and-socket图示。构件定义在左边,相应的部分在右边。

图11.8 An assembly Connector maps a simple Port of a Component to a matching simple Port of another Component.

图11.9展示了一个4元连接器的“channeled ball-and-socket”表示。需要Person的两个简单端口被引导到一个插座,提供Person(直接或间接)的两个简单端口被引导到一个球。

图11.9 An n-ary Connector that assembles four simple Ports using channeled ball-and-socket notation.

results matching ""

    No results matching ""