`AbstractConcept`s can specialize the `type` of a `Link` of all transitively extended `AbstractConcept`s. * Can a specialization change the link's cardinality? * Can a specialization change the link's name? ## Specializing cardinality Pro: * consistent if we can also change type and name Con: * Few use cases * Supporting changes between singular and multi-valued containments unfeasible ## Specializing name Pro: * Closer alignment to domain ("NeedleTree.needles" vs. "NeedleTree.greenTreeThings") Con: * Interferes with regular OO method overriding (Java class `NeedleTree` defines method `getNeedles` and inherits `getGreenTreeThings`) ## Example A: Only change type ```mermaid classDiagram Tree --> "0..*" GreenTreeThing: greenThings <<abstract>> GreenTreeThing Tree <|-- NeedleTree GreenTreeThing <|-- Needle NeedleTree --> Needle: greenThings specialized ``` ## Example B: Change type, cardinality, name ```mermaid classDiagram Tree --> "0..*" GreenTreeThing: greenThings <<abstract>> GreenTreeThing Tree <|-- NeedleTree GreenTreeThing <|-- Needle NeedleTree --> "1..*" Needle: needles specializes greenThings ```
AbstractConcepts can specialize thetypeof aLinkof all transitively extendedAbstractConcepts.Specializing cardinality
Pro:
Con:
Specializing name
Pro:
Con:
NeedleTreedefines methodgetNeedlesand inheritsgetGreenTreeThings)Example A: Only change type
Example B: Change type, cardinality, name