I'm trying to get a grasp on how the member operations Port::basicRequired()
and Port::basicProvided()
are implemented in the UML 2.5.1 specification. Unfortunately, I have only a rudimentary understanding of OCL and how the context
for constraints are implemented.
On page 274 under section 11.8.14.6 "Operations" for the classifier description of Port
, we have these OCL versions:
• basicProvided() : Interface [0..*]
The union of the sets of Interfaces realized by the type of the Port
and its supertypes, or directly the type of the Port if the Port is
typed by an Interface.
---
body: if type.oclIsKindOf(Interface)
then type.oclAsType(Interface)->asSet()
else type.oclAsType(Classifier).allRealizedInterfaces()
endif
• basicRequired() : Interface [0..*]
The union of the sets of Interfaces used by the type of the
Port and its supertypes.
---
body: type.oclAsType(Classifier).allUsedInterfaces()
The key to these two constraints seems to be the keyword type
which must be found within the surrounding context of the type to which the constraint applies, since there is no feature named type
declared in the description of Port
, nor do any of its superclasses derive from Type
.
We have the owner EncapsulatedClassifier
which does derive from Type
. However, there is no generalization or inheritance path between Interface
and EncapsulatedClassifier
as far as I can tell. They both specialize StructuredClassifier
, but the owner of a Port must be an EncapsulatedClassifier
, and there are no specializations of Interface
to be found.
Where does the type
in these two constraints come from?
type is not a keyword. It is the type Property inherited from Property.