Class UML 2.3::Association
Description:
An association describes a set of tuples whose values refer to typed instances.
An instance of an association is called a link. A link is a tuple with
one value for each end of the association, where each value is an instance
of the type of the end.
Direct Superclasses: Classifier,
RelationshipDirect Subclasses: Extension,
CommunicationPath,
AssociationClassClass Precedence List: Association,
Classifier,
TemplateableElement,
Type,
PackageableElement,
ParameterableElement,
Namespace,
RedefinableElement,
NamedElement,
Relationship,
ElementProperties:
![](/se-interop/image/down-arrow.png)
endType :
Type (1 *); -- source
Association![](/se-interop/image/down-arrow.png)
isDerived : Boolean (1 1); -- source
Association![](/se-interop/image/down-arrow.png)
memberEnd :
Property (2 *); -- source
Association![](/se-interop/image/right-arrow.png)
navigableOwnedEnd :
Property (0 *); -- source
Association The navigable ends that are owned by the association itself.
Subsets: Association.ownedEnd
![](/se-interop/image/down-arrow.png)
ownedEnd :
Property (0 *); -- source
Association![](/se-interop/image/down-arrow.png)
attribute :
Property (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
collaborationUse :
CollaborationUse (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
feature :
Feature (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
general :
Classifier (0 *); -- source
Classifier![](/se-interop/image/right-arrow.png)
generalization :
Generalization (0 *); -- source
Classifier Specifies the Generalization relationships for this Classifier. These Generalizations
navigaten to more general classifiers in the generalization hierarchy.
{
composite}
Subsets: Element.ownedElement
Opposite: Generalization.specific
![](/se-interop/image/down-arrow.png)
inheritedMember :
NamedElement (0 *); -- source
Classifier![](/se-interop/image/right-arrow.png)
isAbstract : Boolean (1 1); -- source
Classifier If true, the Classifier does not provide a complete declaration and can
typically not be instantiated. An abstract classifier is intended to be
used by other classifiers e.g. as the target of general metarelationships
or generalization relationships.
Default value: FALSE
![](/se-interop/image/down-arrow.png)
isFinalSpecialization : Boolean (1 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
ownedTemplateSignature :
RedefinableTemplateSignature (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
ownedUseCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
powertypeExtent :
GeneralizationSet (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
redefinedClassifier :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
representation :
CollaborationUse (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
substitution :
Substitution (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
templateParameter :
ClassifierTemplateParameter (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png)
useCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png)
templateBinding :
TemplateBinding (0 *); -- source
TemplateableElement![](/se-interop/image/down-arrow.png)
package :
Package (0 1); -- source
Type![](/se-interop/image/down-arrow.png)
visibility :
VisibilityKind (1 1); -- source
PackageableElement![](/se-interop/image/right-arrow.png)
owningTemplateParameter :
TemplateParameter (0 1); -- source
ParameterableElement The formal template parameter that owns this element.
Subsets: Element.owner, ParameterableElement.templateParameter
Opposite: TemplateParameter.ownedParameteredElement
![](/se-interop/image/down-arrow.png)
elementImport :
ElementImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
importedMember :
PackageableElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
member :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
ownedMember :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
ownedRule :
Constraint (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
packageImport :
PackageImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png)
isLeaf : Boolean (1 1); -- source
RedefinableElement![](/se-interop/image/right-arrow.png)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement The redefinable element that is being redefined by this element.
{
readonly}
Derived union with sources: (redefinedClassifier)
![](/se-interop/image/down-arrow.png)
redefinitionContext :
Classifier (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png)
clientDependency :
Dependency (0 *); -- source
NamedElement![](/se-interop/image/down-arrow.png)
name : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
nameExpression :
StringExpression (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
namespace :
Namespace (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
qualifiedName : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png)
relatedElement :
Element (1 *); -- source
Relationship![](/se-interop/image/down-arrow.png)
ownedComment :
Comment (0 *); -- source
Element![](/se-interop/image/down-arrow.png)
ownedElement :
Element (0 *); -- source
Element![](/se-interop/image/down-arrow.png)
owner :
Element (0 1); -- source
ElementConstraints:
Signature: CMOF_14_3_29() : Boolean;
Description: 14.3 [29] Each Association memberEnd Property must be typed by a Class.
Expression: memberEnd.type.oclIsKindOf(Class)
Signature: CMOF_14_3_1() : Boolean;
Description: 14.3 [1] The multiplicity of Association::memberEnd is limited to 2 rather than 2..*
(i.e., n-ary Associations are not supported);
unlike EMOF, CMOF associations can have navigable association-owned ends.
see also: https://sites.google.com/site/metamodelingantipatterns/catalog/mof/association-does-not-have-two-member-ends
Expression: memberEnd->size() = 2 and ownedEnd->size() < 2
Signature: specialized_end_types() : Boolean;
Description: When an association specializes another association, every end of the specific
association corresponds to an end of the general association, and the specific
end reaches the same type or a subtype of the more general end.
The OCL used here is not normative.Editor's notes: Needs further investigation: (1) POD my parser has a bug that reads 1.0 instead of 1 and then ..
(2) Why the empty sequence.
Expression: true
Original: Sequence{1 ..self.memberEnd->size()}->
forAll(i | self.general->select(oclIsKindOf(Association)).oclAsType(Association)->
forAll(ga |self.memberEnd->at(i).type.conformsTo(ga.memberEnd->at(i).type)))
Signature: specialized_end_number() : Boolean;
Description: An association specializing another association has the same number of
ends as the other association.
The OCL used here is not normative.Editor's notes: ->collect(...) before oclAsType. It's not a property. The infamous shorthand does not apply.
Expression: parents()->select(oclIsKindOf(Association))->collect(oclAsType(Association))->forAll(p | p.memberEnd->size() = self.memberEnd->size())
Original: parents()->select(oclIsKindOf(Association)).oclAsType(Association)->forAll(p | p.memberEnd->size() = self.memberEnd->size())
Signature: binary_associations() : Boolean;
Description: Only binary associations can be aggregations.
The OCL used here is not normative.Editor's notes: Association has no aggregation attribute.
Expression: true
Original: self.memberEnd->exists(aggregation <> Aggregation::none) implies self.memberEnd->size() = 2
Signature: association_ends() : Boolean;
Description: Association ends of associations with more than two ends must be owned
by the association.
The OCL used here is not normative.Editor's notes: should be implies
Expression: memberEnd->size() > 2 implies ownedEnd->includesAll(memberEnd)
Original: if memberEnd->size() > 2 then ownedEnd->includesAll(memberEnd)
Operations:
Signature: endType.1() : Type;
Description: endType is derived from the types of the member ends.
Expression: result = self.memberEnd->collect(e | e.type)
Send questions or comments to
[email protected].