The HasComponent ReferenceType is a concrete ReferenceType that can be used directly. It is a subtype of the Aggregates ReferenceType.

The semantic is a part-of relationship. The TargetNode of a Reference of the HasComponent ReferenceType is a part of the SourceNode. This ReferenceType is used to relate Objects or ObjectTypes with their containing Objects, DataVariables, and Methods. This ReferenceType is also used to relate complex Variables or VariableTypes with their DataVariables.

Like all other ReferenceTypes, this ReferenceType does not specify anything about the ownership of the parts, although it represents a part-of relationship semantic. That is, it is not specified if the TargetNode of a Reference of the HasComponent ReferenceType is deleted when the SourceNode is deleted.

The TargetNode of this ReferenceType shall be a Variable, an Object or a Method.

If the TargetNode is a Variable, the SourceNode shall be an Object, an ObjectType, a DataVariable or a VariableType. By using the HasComponent Reference, the Variable is defined as DataVariable.

If the TargetNode is an Object or a Method, the SourceNode shall be an Object or ObjectType.