In the UML specification there are plenty occurrences of the word "redefine". Not a single mention of what redefinition means. Perhaps it's too simple? Anyway, if someone could explain it even simpler that'd be just great.
Snapshot from UML 2.5.1, Intervals:
I found a clue to what it does using a modelling tool (Sparx Enterprise Architect). If having an interface sub-class of another interface, I get the option to "redefine" operations and attributes of that interface.
I made a wild guess on what it might be used for and redefined it with more parameters. The extra parameter represented the "number of output arguments" added by the Matlab compiler when compiling a Matlab function to a C# library. Then I went ahead and made another sub-class for CLI and redefined arguments accordingly (int return value, all inputs are strings).
The UML 2.5.1 defines redefinition in section 9.2.3.3 (page 100):
Any member (that is a kind of RedefinableElement) of a generalization of a specializing Classifier may be redefined instead of being inherited. Redefinition is done in order to augment, constrain, or override the redefined member(s) in the context of instances of the specializing Classifier.
For a feature such as an attribute, a property, or an operation:
Feature redefinitions may either be explicitly notated with the use of a
{redefines <x>}
property string on the Feature or implicitly by having a Feature which cannot be distinguished using isDistinguishableFrom() from another Feature in one of the owning Classifier’s more general Classifiers.
Suppose for example that you have a class Node
with two attributes: from: Node[*]
and to[*]: Node
. You could then have a specialization FamilyMember
(a node in your genealogy) and you could redefine the members: parent : FamilyMember[*] {redefines from}
and child : FamilyMember[*] {redefines from}
Another example: you have a polymorphic class Shape
with an abstract operation draw()
. You can specialize that class into a class Circle
that will have its own draw()
. You could leave the redefinition implicit (just mentioning the operation), or you could be very explicit with draw() {redefines draw()}
.
The abstract syntax diagrams apply UML to the UML metamodel. The redefinition have the same meaning, but it is explained in a shorter manner in section 6.
Let's take an example in your diagram: let's take IntervalConstraint
:
IntervalConstraint
inherits from Contraint
. A Constraint
is composed of a property specification:ValueConstraint
(page 36), so IntervalConstraint
inherits this property.IntervalConstraint
is composed of a property specialization: Interval
that redefines the more general specification
of the constraint. It's a redefinition, because it narrows down its type (fortunately, Interval
inherits from ValueSpecification
so there's no risk of inconsistency).