Gisteren "in een milde discussie" met Alarmnummer kwam dit item weer naar boven. Wanneer abstractie of interfaces te gebruiken. In mijn optiek is dat vrij simpel en wel:
Indien er sprake is van:
Interface gebruiken wanneer je het gedrag van een klasse minimaal wilt vastleggen, het contract tussen diegene die jouw als interface implementeerd.
Abstract klassen zijn een bak met abstractie, daar waar een interface veel verder/dieper zou specificeren. De mogelijkheid default gedrag te implementeren zorgt voor lichtgewichte aftreksels van abstracte klassen.
Een vogel is bv niets, een arend daarentegen weer wel (uhm naja):
ipv
Mijn ervaring met de_wat_grotere frameworks waar meerdere mensen mee werken is dat interfaces de zaak snel onduidelijk maken. Zeker als diegenen die aanpassingen maakt een goed beeld heeft van de top hierarchie kan deze al snel op gang komen op basis van de abstracte structuur, waar interfaces vaak te snel te veel detail bevatten mb.t. implementatie aspecten.
Ik ben dan ook voor structuur aanbrengen met abstractie en contracten leggen m.b.v. interfaces, anders gezegd: de interactie met de klasse borgen.
Zie ook deze discussie:
Design van een errorlogger.
Iemand een mening?
Indien er sprake is van:
Interface gebruiken wanneer je het gedrag van een klasse minimaal wilt vastleggen, het contract tussen diegene die jouw als interface implementeerd.
Abstract klassen zijn een bak met abstractie, daar waar een interface veel verder/dieper zou specificeren. De mogelijkheid default gedrag te implementeren zorgt voor lichtgewichte aftreksels van abstracte klassen.
Een vogel is bv niets, een arend daarentegen weer wel (uhm naja):
code:
1
2
3
| abstract class AbstractVogel {} class Arend : Vogel {} |
ipv
code:
1
2
3
| interface IVogel {} class Arend : IVogel {} |
Mijn ervaring met de_wat_grotere frameworks waar meerdere mensen mee werken is dat interfaces de zaak snel onduidelijk maken. Zeker als diegenen die aanpassingen maakt een goed beeld heeft van de top hierarchie kan deze al snel op gang komen op basis van de abstracte structuur, waar interfaces vaak te snel te veel detail bevatten mb.t. implementatie aspecten.
Ik ben dan ook voor structuur aanbrengen met abstractie en contracten leggen m.b.v. interfaces, anders gezegd: de interactie met de klasse borgen.
Zie ook deze discussie:
Design van een errorlogger.
Iemand een mening?