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=110745%3A7EAE5D5E063111FD4106D58A828B490E)
endType :
Type (1 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
isDerived : Boolean (1 1); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
memberEnd :
Property (2 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
navigableOwnedEnd :
Property (0 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedEnd :
Property (0 *); -- source
Association![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
attribute :
Property (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
collaborationUse :
CollaborationUse (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
feature :
Feature (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
general :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
generalization :
Generalization (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
inheritedMember :
NamedElement (0 *); -- source
Classifier![](/se-interop/image/right-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
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?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
isFinalSpecialization : Boolean (1 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedTemplateSignature :
RedefinableTemplateSignature (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedUseCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
powertypeExtent :
GeneralizationSet (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
redefinedClassifier :
Classifier (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
representation :
CollaborationUse (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
substitution :
Substitution (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
templateParameter :
ClassifierTemplateParameter (0 1); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
useCase :
UseCase (0 *); -- source
Classifier![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
templateBinding :
TemplateBinding (0 *); -- source
TemplateableElement![](/se-interop/image/right-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
package :
Package (0 1); -- source
Type Specifies the owning package of this classifier, if any.
Subsets: NamedElement.namespace
Opposite: Package.ownedType
![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
visibility :
VisibilityKind (1 1); -- source
PackageableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
owningTemplateParameter :
TemplateParameter (0 1); -- source
ParameterableElement![](/se-interop/image/right-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
elementImport :
ElementImport (0 *); -- source
Namespace References the ElementImports owned by the Namespace.
{
composite}
Subsets: Element.ownedElement
Opposite: ElementImport.importingNamespace
![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
importedMember :
PackageableElement (0 *); -- source
Namespace![](/se-interop/image/right-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
member :
NamedElement (0 *); -- source
Namespace A collection of NamedElements identifiable within the Namespace, either
by being owned or by being introduced by importing or inheritance.
{
readonly}
Derived union with sources: (ownedRule, ownedMember, importedMember, ownedUseCase, inheritedMember, feature, attribute, ownedEnd, memberEnd)
![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedMember :
NamedElement (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedRule :
Constraint (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
packageImport :
PackageImport (0 *); -- source
Namespace![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
isLeaf : Boolean (1 1); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
redefinedElement :
RedefinableElement (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
redefinitionContext :
Classifier (0 *); -- source
RedefinableElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
clientDependency :
Dependency (0 *); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
name : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
nameExpression :
StringExpression (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
namespace :
Namespace (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
qualifiedName : String (0 1); -- source
NamedElement![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
relatedElement :
Element (1 *); -- source
Relationship![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedComment :
Comment (0 *); -- source
Element![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
ownedElement :
Element (0 *); -- source
Element![](/se-interop/image/down-arrow.png?hunchentoot-session=110745%3A7EAE5D5E063111FD4106D58A828B490E)
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].