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?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
endType :
Type (1 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
isDerived : Boolean (1 1); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
memberEnd :
Property (2 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
navigableOwnedEnd :
Property (0 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedEnd :
Property (0 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
attribute :
Property (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
collaborationUse :
CollaborationUse (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
feature :
Feature (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
general :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
generalization :
Generalization (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
inheritedMember :
NamedElement (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
isAbstract : Boolean (1 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
isFinalSpecialization : Boolean (1 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedTemplateSignature :
RedefinableTemplateSignature (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedUseCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
powertypeExtent :
GeneralizationSet (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
redefinedClassifier :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
representation :
CollaborationUse (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
substitution :
Substitution (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
templateParameter :
ClassifierTemplateParameter (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
useCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
templateBinding :
TemplateBinding (0 *); -- source
TemplateableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
package :
Package (0 1); -- source
Type![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
visibility :
VisibilityKind (1 1); -- source
PackageableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
owningTemplateParameter :
TemplateParameter (0 1); -- source
ParameterableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
elementImport :
ElementImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
importedMember :
PackageableElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
member :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedMember :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedRule :
Constraint (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
packageImport :
PackageImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
isLeaf : Boolean (1 1); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
redefinitionContext :
Classifier (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
clientDependency :
Dependency (0 *); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
name : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
nameExpression :
StringExpression (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
namespace :
Namespace (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
qualifiedName : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
relatedElement :
Element (1 *); -- source
Relationship![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedComment :
Comment (0 *); -- source
Element![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
ownedElement :
Element (0 *); -- source
Element![](/se-interop/image/down-arrow.png?hunchentoot-session=31739%3A14197C326B4AB0A055FB60E7A6B99450)
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].