Software Disclaimer

Class UML 2.3::Extension

Description:

An extension is used to indicate that the properties of a metaclass are extended through a stereotype, and gives the ability to flexibly add (and later remove) stereotypes to classes.

Direct Superclasses: Association

Direct Subclasses:

Class Precedence List: Extension, Association, Classifier, TemplateableElement, Type, PackageableElement, ParameterableElement, Namespace, RedefinableElement, NamedElement, Relationship, Element

Properties:

isRequired : Boolean (1 1); -- source Extension
metaclass : Class (1 1); -- source Extension
ownedEnd : ExtensionEnd (1 1); -- source Extension
endType : Type (1 *); -- source Association
isDerived : Boolean (1 1); -- source Association
memberEnd : Property (2 *); -- source Association
navigableOwnedEnd : Property (0 *); -- source Association
attribute : Property (0 *); -- source Classifier
collaborationUse : CollaborationUse (0 *); -- source Classifier
feature : Feature (0 *); -- source Classifier
general : Classifier (0 *); -- source Classifier
generalization : Generalization (0 *); -- source Classifier
inheritedMember : NamedElement (0 *); -- source Classifier
isAbstract : Boolean (1 1); -- source Classifier
isFinalSpecialization : Boolean (1 1); -- source Classifier
ownedTemplateSignature : RedefinableTemplateSignature (0 1); -- source Classifier
ownedUseCase : UseCase (0 *); -- source Classifier
powertypeExtent : GeneralizationSet (0 *); -- source Classifier
redefinedClassifier : Classifier (0 *); -- source Classifier
representation : CollaborationUse (0 1); -- source Classifier
substitution : Substitution (0 *); -- source Classifier
templateParameter : ClassifierTemplateParameter (0 1); -- source Classifier
useCase : UseCase (0 *); -- source Classifier
templateBinding : TemplateBinding (0 *); -- source TemplateableElement
package : Package (0 1); -- source Type
visibility : VisibilityKind (1 1); -- source PackageableElement
owningTemplateParameter : TemplateParameter (0 1); -- source ParameterableElement
elementImport : ElementImport (0 *); -- source Namespace
importedMember : PackageableElement (0 *); -- source Namespace
member : NamedElement (0 *); -- source Namespace
ownedMember : NamedElement (0 *); -- source Namespace
ownedRule : Constraint (0 *); -- source Namespace
packageImport : PackageImport (0 *); -- source Namespace
isLeaf : Boolean (1 1); -- source RedefinableElement
redefinedElement : RedefinableElement (0 *); -- source RedefinableElement
redefinitionContext : Classifier (0 *); -- source RedefinableElement
clientDependency : Dependency (0 *); -- source NamedElement
name : String (0 1); -- source NamedElement
nameExpression : StringExpression (0 1); -- source NamedElement
namespace : Namespace (0 1); -- source NamedElement
qualifiedName : String (0 1); -- source NamedElement
relatedElement : Element (1 *); -- source Relationship
ownedComment : Comment (0 *); -- source Element
ownedElement : Element (0 *); -- source Element
owner : Element (0 1); -- source Element

Constraints:

Signature: non_owned_end() : Boolean;
Description: The non-owned end of an Extension is typed by a Class.
The OCL used here is not normative.
Editor's notes: metaclass, not metaclass(). Classifier, not class
Expression: metaclass->notEmpty() and metaclass.oclIsKindOf(Classifier)
Original: metaclass()->notEmpty() and metaclass()->oclIsKindOf(Class)

Signature: is_binary() : Boolean;
Description: An Extension is binary, i.e., it has only two memberEnds.
Expression: memberEnd->size() = 2

Operations:

Signature: metaclassEnd() : Property;
Description: The query metaclassEnd() returns the Property that is typed by a metaclass (as opposed to a stereotype).
The OCL used here is not normative.
Editor's notes: Borrowed from UML2.5
Expression: memberEnd->reject(p | ownedEnd->includes(p.oclAsType(ExtensionEnd)))->any(true)
Original: result = memberEnd->reject(ownedEnd)

Signature: metaclass.1() : Class;
Description: The query metaclass() returns the metaclass that is being extended (as opposed to the extending stereotype).
Expression: result = metaclassEnd().type

Signature: isRequired.1() : Boolean;
Description: The query isRequired() is true if the owned end has a multiplicity with the lower bound of 1.
Expression: result = (ownedEnd->lowerBound() = 1)



Send questions or comments to [email protected].