EfBe schreef op 21 november 2003 @ 17:30:
[...]
Dit is theoretisch geneuzel natuurlijk

Interfaces zijn niet alleen een syntactisch middel maar ook een semantisch middel. Dit houdt in dat wanneer je IFoo.Bar() definieert, IEDERE implementatie van IFoo.Bar() dezelfde
functionaliteit levert die is gedefineerd bij IFoo.Bar(). Je kunt nu wel zeggen dat iedere implementatie van IFoo.Bar() geoorloofd is, maar dat is onzin.
Iedere implementatie die zich aan het contract houdt is geoorloofd. Dit leek me wel vrij voor de hand liggend.
Erm, een class heeft OOK een interface, een abstract class met louter abstract methods is net zo dwingend als een interface.
Idd. En een puur abstracte class is in principe een interface. Een interface kan alleen gebruikt worden bij multiple inheritance en een abstract class niet.
Ieder type gebruikt in een method signature bv impliceert een contract, of dat expliciet door een interface wordt gedefinieerd of indirect door de class definitie, dat maakt niet uit).
Mijn voornaamste probleem met een abstracte class die niet puur is, is dat je vast zit aan allerlei zaken van die abstracte class waar je zelf geen controle meer over uit kan oefenen. Niet dat dit altijd nodig is, maar ik heb regelmatig software van anderen van... hmmm. Had me nou even een interface gegeven, dan had ik makkelijk nog een paar toevoegingen kunnen doen, bv decorators, proxies, composition etc etc.
Wat houdt 'goed ontwerp' in? Ondefinieerbaar. Ik vind de kunstgrepen die ik hier zie langskomen zo langzamerhand op mierenneuken lijken, sorry.

Ik bedoel, waar gaat het in gotsnaam over, 4 classes.

Nou, pak een patterntje, bv strategy, (wat al abstract methods impliceert) en in 2 minuten kan ik dat zelfs designen. Voor de purist wellicht niet helemaal perfect (die prakt er wellicht 2 interfaces en 3 classes tussen), maar voegt dat WEZENLIJK iets toe?
Voor dit kleine ding maakt het geen klap uit, maar het ging over interfaces/abstract classes.
Je kunt ook ieder datamodel uitnormaliseren tot 5th form, (NIAM levert 3e) maar het is al een teken aan de wand dat weinig mensen weten hoe dat moet zodat je kunt aannemen dat tever doorschieten niet nuttig is, ja voor theoretische discussies, niet voor praktische oplossingen.
Tja. Ik zie dat ik je niet kan bekeren, en ik vind het nog steeds jammer dat je me ziet als purist. Ik lees idd veel over design patterns omdat ik anders niet zou weten hoe een goed ontwerp neer te kunnen zetten. En dat goeie ontwerp vind ik gedeeltelijk iets waar ik natuurlijk trots op ben, maar aan de andere kant.. het is in de praktijk gewoon makkelijk een goed ontwerp neer te zetten.
Een goed ontwerp heb je in de praktijk gewoon iets aan en bespaard je gewoon veel ellende. Ik zit ook niet tot in den treure te neuken over hoe iets precies moet. Als ik het vaker heb gedaan, dan neem ik dat over. Als een ontwerp begint te groeien dan begin ik een simpel ontwerp (dat op den duur begint te stinken) ook aan te passen zodat het volledig voldoet aan de eisen die eraan gesteld worden, niet meer.. en niet minder.
Ik ga niet van alles inbouwen waarvan ik denk... dat zou er misschien ooit nog eens mee gedaan kan worden. Het ontwerp blijft gewoon simpel. Alleen bij hulp libraries zorg ik er wel altijd voor dat ik alle belangrijke onderdelen opzet vanuit interfaces. Ik heb het al zo vaak meegemaakt dat ik heb lopen vloeken dat er geen interfaces beschikbaar waren (vooral uit een ander zijn stuff), dat deze kleine moeite me gewoon te veel ellende (lees tijd geld en hoge bloeddruk) kan besparen.
Ik denk verder ook niet dat we er echt uitkomen. Ik werk op de manier die voor mij het meest praktisch is, en dit geldt zonder twijfel ook voor jou.
[
Voor 5% gewijzigd door
Alarmnummer op 25-11-2003 09:33
]