Zijn

Maandag, 15 oktober 2001
Hebben of zijn? Dat is de vraag.

Deze vraag is minder filosofisch dan u denkt. Bij elk OO model koment deze vraag terug bij het classificeren van relaties. Een eenvoudig voorbeeld: OO model van bekertje, pen en potlood

  • Een bekertje heeft een paar pennen en potloden.
  • Een pen is schrijfgerij.
  • Een potlood is ook schrijfgerij.
Hebben of zijn, het is modeltechnisch het verschil tussen
  1. Een associatie

    Een associatie is altijd iets 'hebberigs'. Een huis heeft bewoners. Een krant heeft lezers. Een lezer heeft abonnementen. Een bekertje heeft pennen. Een bekertje heeft potloden.

    Een associatie is specifiek voor een instance. Het ene huis heeft andere bewoners dan het andere, de ene krant heeft andere lezers dan de andere, etc. Technisch gesproken is een associatie specifiek voor een object of een row in een database.

    Een associatie kan tijdens de levensduur wijzigen. Een huis kan ander bewoners krijgen. Een krant kan er nieuwe lezers bij krijgen. Een potlood kan van het ene bekertje naar het andere gaan. Een row kan een andere waarde krijgen voor een foreign key.

  2. Een verbijzondering

    Een verbijzondering heeft te maken met 'zijn', met identiteit. Elke pen is schrijfgerei, elk potlood ook. Een pen die geen schrijfgerei is, is geen pen. Technisch gesproken is het een definitie op classe niveau. Die classe kan abstract zijn, zoals schrijfgerij. Van schrijfgerij zelf bestaan er geen instances.

    Een verbijzondering geldt levenslang. Het is iets dat het object bij de geboorte meekrijgt en nooit meer verandert. Een potlood is zijn hele leven lang schrijfgerei. Wie als pen geboren is zal nooit een bekertje zijn.

Een quiz

Goed, tot zover de theorie, hoogste tijd voor een korte, flauwe en hoogst verwarrende quiz:
  • Heeft u een huurhuis of bent u een huizenbezitter?
  • Heeft u een baan of bent u ondernemer?
  • Heeft u een auto of bent u een fervent treinreiziger?
Tot de volgende week,
Henk Jan Nootenboom

Gerelateerd verhaal: Specialisatie