Concepten; Klassen, Waardetypen, Eigenschappen en Individuen#
Wat is een concept?#
De OTL-manager is de tool om een datamodel te modelleren, ontsluiten en visueel te presenteren. De bouwblokken van zo’n datamodel noemen we ‘Concepten’. Hieronder verstaan we Klassen, Waardetypen, Eigenschappen en Individuen. Deze concepten kunnen per model worden geclassificeerd zodat ze aansluiten bij de belevingswereld van het domein waarin het model wordt gebruikt. Denk hierbij o.a. aan Assets, Informatieproducten, kenmerken etc.
In de Bibliotheek-ingang van de applicatie krijg je een overzicht van alle concepten uit het datamodel.
Welke soorten concepten bestaan er?#
De OTL kent verschillende soorten Concepten, namelijk Klassen, Eigenschappen, Waardetypen, en Individuen. In de komende alinea’s wordt ieder type verder uitgelegd.
Klasse#
Een Klasse beschrijft een begrip uit de werkelijkheid of uit een mentaal model. De Naam en de metadata (bijv. omschrijving, alias, afbeeldingen, etc.) van een Klasse zijn bedoeld om een begrip eenduidig uit te leggen. Een Klasse geeft een definitie van iets wat in de werkelijkheid kan voorkomen, maar gaat niet over een concreet object uit de werkelijkheid. Bijvoorbeeld: de Klasse ‘Woonhuis’ in een datamodel beschrijft wat de definitie van een Woonhuis is. Je zult echter geen Klasse maken voor het huis dat aan de Adriaan Goekooplaan 10 in Den Haag staat. Een Klasse definieert een begrip dus in abstracte termen en gaat niet over concrete instanties.
In de OTL is het mogelijk om Klassen aan elkaar te relateren in een taxonomie. Dat betekent dat je kunt aangeven dat de ene Klasse een specifiekere variant (subtype) van een andere Klasse is.
Klassen kunnen door Eigenschappen worden gerelateerd aan andere Klassen en Waardetypen. Voor meer informatie daarover, zie ‘Eigenschappen’.
Stel dat je een datamodel hebt, waarin je wilt beschrijven hoe een woonhuis eruitziet. Verschillende Klassen die je in dat datamodel waarschijnlijk aan zult treffen zijn ‘Ruimte’, ‘Muur’, en ‘Slaapkamer’. De Klasse ‘Slaapkamer’ zou je kunnen zien als een specifiekere definitie van de Klasse ‘Ruimte’: alles wat in dit model in de definitie van Ruimte staat, geldt ook voor Slaapkamer. Slaapkamer kan dus worden aangemerkt als subtype van Ruimte.
Waardetype#
Waar een Klasse een complex begrip beschrijft, beschrijft een Waardetype een ‘eenvoudige waarde’. De OTL ondersteund verschillende soorten Waardetypen:
- Tekst
- Numeriek
- Booleaans (d.i., waarheidswaarden= waar/onwaar)
- Datum
- Geometrie (Punt, Lijn, 3D)
- Enumeratie (zie ook Enumeratie als Waardetype of met Individuen)
Ook aan Waardetypen kunnen definities, aliassen e.d. worden toegevoegd, om de betekenis van het Waardetype te duiden.
In de OTL kun je nadere beperkingen opleggen aan een Waardetype. Wil je bijvoorbeeld een Waardetype voor ‘Voltage’ maken, dan kun je daar de beperking aan toevoegen dat Voltages nooit lager dan 0 mogen zijn.
Een aantal voorbeelden van eenvoudige waarden:
- De tekst ‘Gelukkige gezinnen lijken allemaal op elkaar, maar elk ongelukkig gezin is ongelukkig op zijn eigen manier’;
- Het getal ’42’;
- De waarheidswaarde ‘onwaar’.
Eigenschappen#
Eigenschappen zijn de verbindingen die je tussen Klassen onderling, en tussen Klassen en Waardetypen kunt leggen. Een Eigenschap tussen twee Klassen noemen we ook wel een ‘Relatie’. Een Eigenschap die je tussen een Klasse en een Waardetype legt heet ook wel een ‘Kenmerk’.
Een Eigenschap heeft een richting: hij gaat van zijn startpunt (Domein) naar zijn eindpunt (Bereik).
Een aantal voorbeelden:
- Gegeven een Klasse ‘Huis’, en een Klasse ‘Ruimte’, kun je een Eigenschap ‘Huis bestaat uit Ruimte’ definiëren. Zo leg je vast dat een ‘Huis’ bestaat uit ‘Ruimtes’.
- Gegeven een Klasse Ruimte en een Waardetype ‘Getal (m2)’. Je kunt nu de een Eigenschap ‘Ruimte heeft Oppervlakte’ maken met Domein ‘Ruimte’ en Bereik ‘Getal (m2)’.
Een Eigenschap kan nooit een Waardetype als startpunt hebben, een Waardetype kan alleen als eindpunt van een Eigenschap gebruikt worden.
Kardinaliteit#
In sommige gevallen wil je definiëren hoe vaak een Eigenschap per instantie van een Klasse mag of moet voorkomen. Dit noemen we de Kardinaliteit van een Eigenschap. In het bovenstaande voorbeeld zou het logisch zijn om te vereisen dat een Huis altijd tenminste uit één ruimte bestaat, maar op voorhand weten we nog niet het maximum aantal ruimtes. De Kardinaliteit van de Eigenschap ‘Huis bestaat uit Ruimte’ is dan minimaal 1, en het maximum is onbeperkt. Of, in wiskundige notatie: 1..∞.
Een Ruimte heeft per definitie altijd maar één Oppervlakte. De kardinaliteit van de Eigenschap ‘Ruimte heeft Oppervlakte’ zouden we dus kunnen definiëren als minmaal en maximaal 1, of: 1..1.
Inverse#
Eigenschappen kunnen ook elkaars ‘inversen’ zijn. In het ‘Huis bestaat uit Ruimte’ voorbeeld, kun je ook een tegenovergestelde Eigenschap ‘Ruimte is onderdeel van Huis’ definiëren. Als je deze twee Eigenschappen elkaars Inverse maakt, geef je aan: als de ene Eigenschap geldt, geldt ook altijd de andere. Twee Eigenschappen die een tegengesteld Domein en Bereik hebben, zijn niet automatisch elkaars Inversen: het aanmerken hiervan is een expliciete stap.
Inversen zijn handig wanneer je de Kardinaliteit van beide kanten van de relatie wilt beperken. In het ‘Huis bestaat uit Ruimte’ voorbeeld kun je uitdrukken dat een Huis bestaat uit 1 of meerdere Ruimten. Om uit te drukken dat een Ruimte ook altijd maar van één Huis een onderdeel mag zijn, kun je een relatie ‘Ruimte is onderdeel van Huis’ maken, en daar vervolgens de Kardinaliteit op 1..1 zetten en de relatie ‘Ruimte is onderdeel van Huis’ de inverse maken van ‘Huis bestaat uit Ruimte’. Zie de afbeelding van een grafische uitwerking van deze constructie.
Individuen#
Het laatste type wat de OTL ondersteund is het Individu. Het Individu kun je zien als een verzamelbak van alle concepten die niet vallen onder de andere typen (Klassen, Eigenschappen, Waardetypen), maar die wel in het datamodel thuishoren.
Vaak wordt een Individu aangemerkt als ‘Instantie van’ een Klasse. Dat betekent dat de zo’n Individu een concrete vorm is van de definitie van die Klasse. Een voorbeeld is de Klasse ‘Materiaal’. Stel dat het datamodel alvast een aantal ‘vooraf gedefinieerde’ materialen heeft, zoals Hout, Beton en Staal. Hout, Beton en Staal zijn geen Klassen: ze verwijzen immers naar concrete materialen. Het zijn ook geen Eigenschappen: ze verbinden geen Klassen met Klassen of Waardetypen. Ook zijn het geen Waardetypen, want ze zijn niet te vatten in een ‘simpele waarde’. In dit geval zou je dus Hout, Beton en Staal definiëren als Individu, waarbij ze een Instantie zijn van de Klasse ‘Materiaal’.
Een specifieke use case voor het gebruik van Individuen kan het uitmodelleren van enumeraties zijn, zie daarvoor Enumeratie als Waardetype of met Individuen.