Ik heb nu al een paar dagen een discussie lopen met wat mensen op het werk over het begrip inheritance. Deze heren hebben een heel unieke kijk op het concept. Ik wil mensen vragen die thuis zijn in de materie, en het liefst er ervaring mee hebben qua design/implementatie, eens te reageren op onderstaande. Graag zoveel mogelijk onderbouwing natuurlijk.
Hier komt het probleem:
We hebben 3 classes, Person, Man en Woman. Vanzelfsprekend erven Man en Woman van Person, en hebben daarnaast nog wat attributen. Voor het gemak maar een slordig paintbrush plaatje.

Alleen Man heeft dus een secret, en alleen een vrouw heeft kinderen. Vraag me niet waarom, het gaat ff om het voorbeeld.
De discussie gaat nu eigenlijk over wie de functie GetSecret() moet gaan implementeren
Hun stelling:
Omdat in het echte leven Person een verzameling van mannen en vrouwen is, immers een persoon is altijd een man of vrouw, is het object Person ook de verzameling van Man en Woman. Met andere woorden, Person moet de implementatie leveren van GetSecret() (en ook van GetNrOfChildren() uiteindelijk). Als iemand een object van type Person heeft, en GetSecret() roept, zal dit object zichzelf gaan downcasten naar Man en de secret returnen.
Mijn stelling:
Juist niet, secret is specifiek voor Man, dus daar heeft Person niks mee te maken. Sterker nog, het druist zo'n beetje tegen alle regels in die met OO te maken hebben. Derhalve moet Man de implementatie van GetSecret() leveren.
Ik heb al wat argumenten liggen van beide partijen, maar die geef ik nog ff niet, ik wil graag eerst wat reacties hebben.
Hier komt het probleem:
We hebben 3 classes, Person, Man en Woman. Vanzelfsprekend erven Man en Woman van Person, en hebben daarnaast nog wat attributen. Voor het gemak maar een slordig paintbrush plaatje.

Alleen Man heeft dus een secret, en alleen een vrouw heeft kinderen. Vraag me niet waarom, het gaat ff om het voorbeeld.
De discussie gaat nu eigenlijk over wie de functie GetSecret() moet gaan implementeren
Hun stelling:
Omdat in het echte leven Person een verzameling van mannen en vrouwen is, immers een persoon is altijd een man of vrouw, is het object Person ook de verzameling van Man en Woman. Met andere woorden, Person moet de implementatie leveren van GetSecret() (en ook van GetNrOfChildren() uiteindelijk). Als iemand een object van type Person heeft, en GetSecret() roept, zal dit object zichzelf gaan downcasten naar Man en de secret returnen.
Mijn stelling:
Juist niet, secret is specifiek voor Man, dus daar heeft Person niks mee te maken. Sterker nog, het druist zo'n beetje tegen alle regels in die met OO te maken hebben. Derhalve moet Man de implementatie van GetSecret() leveren.
Ik heb al wat argumenten liggen van beide partijen, maar die geef ik nog ff niet, ik wil graag eerst wat reacties hebben.