Object Thinking
Het duurt vaak een tijdje om echt in OO te denken. Het komt vaak door de associaties die we met software ontwikkeling hebben en misschien moeten we betere metaforen hebben.
We hebben het vaak over bouw en architectuur en dan leg je de associatie met de bouw wereld. In de bouw werk je met blauwdrukken en UML diagrammen hebben wat weg hiervan. Alleen zijn de objecten die je in de bouw gebruikt heel erg statisch, ze hebben alleen attributen, geen gedrag. Een steen kan wel gewicht dragen, een raam kan open gaan, maar toch zul je bij een gebouw niet denken een compositie van objecten met gedrag. Je kunt ook denken aan een machine. Heeft wel wat meer gedrag en zo, maar de individuele tandwieltjes en moertjes niet zo.
Een fabriek komt misschien beter in de buurt. Je hebt de verschillende componenten die met elkaar interactie hebben, er is dus gedrag. Je kunt de data zien als de grondstof die verwerkt wordt door de fabriek. Maar ook hier hebben de grondstoffen geen gedrag. De machines hebben dat en dan krijg je het structureel denken. Procedures die bewerkingen uitvoeren op data.
Oorspronkelijk zat de informatica in de hoek van de wiskunde. In de wiskunde ben je heel veel bezig met functies en algortimes. Dit kun je makkelijk vertalen naar code. Maar in de wiskunde leer je niet echt in objecten denken en het ligt toch meer tegen het functioneel programmeren of sql aan.
Ik heb weleens geprobeerd software te zien als een leger met soldaten. Het is opgedeeld in verschillende onderdelen met verschillende eigenschappen en verantwoordingen. Het delegeren van verantwoordelijkheden is heel natuurlijk, een generaal gaat niet micro managen. Je hebt een duidelijke base class, iedereen is soldaat en je denkt heel natuurlijk in termen van gedrag.
Je ontwikkelt je software net zoals je een leger ontwikkeld: je definieert gedrag in je objecten. Je bereid ze voor op actie. In plaats van architecten heb je nu strategen.
Ondanks mijn morele bezwaren tegen dit metafoor vind ik dat heb beter past bij object georienteerd denken dan de bouw of proces metafoor. De volgende keer dat ik een class ontwerp, zal ik denken aan een soldaatje dat een taak moet uitvoeren.
