Closed DieterDePaepe closed 7 years ago
Een subklasse is een "is een" relatie. Waarom zou specialisatie in dit geval niet mogen?
Definitie uit de 2.5 UML specificatie (p198):
Specialization is, in contrast to subsetting, a relationship in the domain of intentional semantics, which is to say it characterizes the criteria whereby membership in the collection is defined, not by the membership. In the case of Associations, specialization means that a link classified by the specializing Association is also classified by the specialized Association. Semantically this implies that sets calculated by eliminating duplicates from the collections representing the ends of the specializing Association are subsets of the corresponding sets calculated by eliminating duplicates from collections representing the ends of the specialized Association; this fact of subsetting may or may not be explicitly declared in a model.
Verder wordt op pagina 197 een diagram getoond waarin een specialisatie meermaals voorkomt.
Bij de voorbeelden waarom men UML zou willen uitbreiden, wordt volgend voorbeeld gegeven: "Add Constraints that restrict the way UML’s constructs are used (such as disallowing multiple inheritance)."
Ter info: Yvan zegt hierover in een comment op het verslag nog:
Is reeds uit het model af te leiden doordat een specialisatie wordt gebruikt. Subclasses van dezelfde parentclass sluiten elkaar per definitie uit.
Dat was vroeger (pre UML 2.5) het geval als je geen generealisatieset gebruikte. Standaard stond de property voor de default generalisatieset toen op Disjoint, maw dit:
Was toen verkeerd. Maar sinds 2.5 staat isDisjoint op Overlapping en is dit niet langer fout. Sowieso kun je generalisatiesets gebruiken om de verschillende classificaties beter te onderscheiden, vb:
Binnen eenzelfde generalisatieset kan je dan aangeven of de verschillende subklassen Disjoint of Overlapping zijn, bv:
Met als enig probleem dat EA die constraint niet toont. Daarom spreken we binnen OSLO af om indien disjoint de shared target style te gebruiken:
In de UML specs vind je gelijkaardige voorbeelden, vb:
Opmerking van Yvan S. op een fragment uit het interne verslag van Organisatie 3:
Opmerking: In dat geval klopt het model niet volgens de UML-standaard. Mijn opmerking gaat niet over de inhoud, maar over de modellering. (Als je een standaard wil definiëren, moet je bestaande standaarden daarbij correct gebruiken, vind ik.) In dit geval kan je geen specialisatie gebruiken. Vervang de relaties door een associatie met als naam "is een" en een cardinaliteit van 1 op 0 of 1.