12.3.3.6 Extensions
Extension用于指示元类的属性通过Stereotype得到扩展,它赋予了类灵活增加(之后删除)stereotypes的能力。
Extension是一种关联。它的一端是一个普通的属性,而另一端是一个ExtensionEnd。前者把该Extension链接到一个元类,后者链接该Extension到一个扩展了该类的Stereotype。
一个必须扩展(isRequired=true)意味着在Profile被应用到模型后,该Stereotype的实例必须被链接到该模型中扩展的元类的每个实例(否则该模型为非良构的)。如果扩展的Stereotype有子类,那么最多需要该Stereotype或它的子类的一个实例。
一个非必须扩展(isRequired=false)意味着该Stereotype的实例可以按需被链接到一个扩展的元类或者之后被删除;然而,并不是每个元类的实例都需要被stereotyped。然而,相同的stereotype(或它的子类型)不能向相同的元素应用两次。当被扩展的元类的实例被删除时,或者定义了该Stereotype的Profile被应用的包删除后,Stereotype的实例也相应地被删除。
与一个元类扩展等同的MOF构造体在图12.15中进行了展示。该图展示了图12.19中表达的例子,其中Stereotype Home扩展了元类Interface。在这幅图中,Interface是UML元类(一个CMOF类)的一个实例,Home是Stereotype的一个实例(也视为一个CMOF类)。与Extension等同的MOF构造体是一个从被扩展的元类到Stereotype的组合,它由被扩展的元类所拥有。当Extension是必须的时,那么Stereotype关联的属性的multiplicity为1。
由扩展元类所定型的的属性名为:
'base_'extendedMetaclassName
由扩展Stereotype所定型的属性名称(ExtensionEnd)是:
'extension_'stereotypName
通常Stereotypes会有一些约束。上述属性可能用于表达OCL导航中。举个例子,如下的OCL表达式声明一个Home接口不应该有属性:
self.base_Interface.ownedAttributes->isEmpty()
图12.15 MOF Model Equivalent to Extending "Interface" by the "Home" Stereotype
多个元类扩展展示在图12.16中。Stereotype TestCase扩展了元类Operation和Behavior。
图12.16 Example of Multiple Metaclass Extension
多元类扩展相应等同的MOF构造体展示在图12.17。
图12.17 MOF Model Equivalent to Multiple Metaclass Extension
12.3.3.7 ExtensionEnd
ExtensionEnd用于在扩展一个元类时将Extension链接到一个Stereotype:它是Extension的一个navigableOwnedEnd,避免一个扩展元类上额外的ownedAttribute。它总是由一个Stereotype来定型并且总是有isComposite=true。
ExtensionEnd的缺省multiplicity为0..1。如果Stereotype是必须的则为1..1,但上限不能超过1。