Dat wil je niet weten

Door Arjen Uittenbogaard

In deze stukjes leg ik uit hoe object-oriëntatie naar de wereld kijkt en wat dat oplevert. Een OO-model van een systeem, of het nu een IT-systeem is of een organisatie, gaat uit van verantwoordelijkheden en samenwerking en is flexibel genoeg om complexe en veranderende situaties aan te kunnen. In de vorige stukjes beschreef ik de essentie van OO en het principe van liever lui dan moe. Objecten zien we als zelfstandig handelende wezentjes met een scherp afgebakende verantwoordelijkheid. Ze werken met elkaar samen en realiseren zo makkelijk aanpasbare systemen. Een gouden regel in een OO-model is dat objecten zich niet bemoeien met hóe een ander doet wat hij moet doen: dat wil je niet weten!

Laten we na de deuren en liften die in de vorige stukjes figureerden nu eens naar een orkest kijken. Violen en andere strijkinstrumenten, trompetten, klarinetten, fluiten, allerlei soorten slagwerk én een dirigent die aangeeft wanneer er gespeeld gaat worden, in welk tempo, enzovoorts. Stel dat de dirigent weet hoe elk instrument werkt en ze dus ook de bijbehorende opdrachten geeft. Bij een inzet zegt hij tegen de strijkers: “Strijk!”, tegen de blazers: “Blaas!” en: “Sla!” tegen het slagwerk. Niks aan de hand. Totdat we, in een volgende versie van het orkest, besluiten dat er ook een piano mee gaat spelen. Daar kan de dirigent niet mee uit de voeten, want wat zeg je tegen zo’n instrument? Deze uitbreiding aan het orkest vraagt een aanpassing van de dirigent. Deze moet leren dat piano’s moeten worden aangesproken met, pak ‘m beet: “Druk die toetsen in!” De dirigent wist meer van de objecten met wie hij samenwerkte dan goed voor hem was en daarom moet hij bij uitbreiding met nieuwe objecten ook over die objecten weer nieuwe dingen aan de weet komen.

In vaktermen: een dergelijke realisatie van de dirigent is een schending van het Open-Closed principe. Dit principe stelt dat systemen uitgebreid moeten kunnen worden zónder aanpassingen aan bestaande onderdelen. Een goed ontworpen systeem is open voor aanpassingen en gesloten voor wijzigingen aan al functionerende objecten. In het orkest is dat als volgt te bereiken. Als alle instrumenten met elkaar afspreken dat ze naar een en dezelfde opdracht luisteren, bijvoorbeeld: “Speel!”, en dat ze die opdracht elk op hun eigen manier uitvoeren, dan zijn de problemen opgelost. De dirigent hoeft niet meer te weten hóe de instrumenten spelen, maar alleen dát een instrument kan spelen. Zolang nieuwe instrumenten zoals de piano zich maar aan deze afspraak houden, kan het orkest worden uitgebreid met de piano zonder dat de dirigent hoeft te worden bijgepraat. Een dirigent die een stuk moet dirigeren doet wat hij altijd al deed: hij gaat naar z’n orkest en zegt tegen elk instrument in dat orkest: “Speel!”. En het orkest speelt.

Het belang: hechte, los gekoppelde netwerken
De dirigent moet dus niet willen weten hoe de instrumenten spelen. Dat is de verantwoordelijkheid van die instrumenten. Het enige dat de dirigent weet is dat ze hun speel-verantwoordelijkheid waarmaken als hij het hen vraagt. Dit is een toepassing van de regel ‘dat wil je niet weten’: objecten die samenwerken hoeven niet te weten hóe de ander doet wat ze gevraagd wordt. Ze kunnen ervan op aan dat de ander het doet, hoe dan ook. Objecten die zich toch willen bemoeien met hóe een ander object functioneert zijn verkeerd bezig. Ze maken zichzelf afhankelijk van de huidige manier van functioneren van de ander. Stel dat ik erachter ben gekomen dat een lift door kabels opgetrokken wordt en stel dat ik bedenk dat ik dan net zo goed zelf aan die kabels kan gaan trekken om omhoog te komen (en stel dat ik sterk genoeg zou zijn). Zou ik dan ook aan alle veiligheidsmaatregelen denken die de lift en de kabels hebben afgesproken? Wat zou er gebeuren als ik nog steeds aan die kabels trek als de lift intussen door stuwraketten wordt voortbewogen?
Laat ik een nog wat indringender analogie te schetsen van wat er mis is aan het teveel willen weten over hoe een ander object functioneert. Een goede ouder voedt haar baby door het de borst te geven of eten met een speen of lepeltje aan te bieden. Een ontaarde ouder, een die zich niet houdt aan ‘dat wil je niet weten’, zou kunnen denken: “Ach, uiteindelijk moet dat eten in het maagje terecht komen,” en vervolgens met een scherp mes buikje en maagje opensnijden om het eten daar rechtstreeks te bezorgen. Veel efficiënter én effectiever, toch? De gruwel die dit beeld oproept, is de gruwel die past bij het overtreden van de ‘dat wil je niet weten’ regel.

Een consequentie van ‘dat wil je niet weten’, is dat het, nu ik het modelleren toch in het ethische aan het trekken ben, immoreel is om andere objecten om informatie over henzelf te vragen. Waarom zou je willen weten hoe oud een ander object is? Misschien omdat je het onder een bepaalde leeftijd bepaalde producten niet mag verkopen? Maar zou je dan die beslissing niet gewoon door de koper laten nemen: een klant kóópt simpelweg geen alcohol als hij onder de achttien is. Waarom zou je iemand om zijn schadehistorie willen vragen? Misschien omdat je die moet weten om de premie te bepalen? Maar zou je dan niet gewoon aan verzekerden willen zeggen dat ze die informatie moeten meesturen als ze jou de opdracht geven om een verzekering af te sluiten? Nu begint het subtiel te worden en misschien wel te genuanceerd voor deze introductie. Want er zijn tal van gevallen waar het gedrag van een object afhangt van kennis van zowel de klant als de leverancier. In dergelijke gevallen denken we weer terug aan waar het bij ‘liever lui dan moe’ om ging: als dat zo is, wordt het misschien tijd om deze verantwoordelijkheid apart te benoemen, en speciaal hiervoor een nieuw object te introduceren. Misschien wordt het dan tijd voor makelaar-, of onderhandelaarobjecten.
De basisgedachte blijft steeds: degene die de kennis heeft, gebruikt die kennis; anderen bemoeien zich daar niet mee. Alleen zo blijft het systeem beheersbaar, want: nieuw gedrag kan worden toegevoegd zonder dat je in het huidige systeem objecten hoeft te veranderen.

Arjen Uittenbogaard

Arjen is verhalenverteller. Een training van hem is een ervaring die je niet licht vergeet. Hij is ook regisseur van improvisatietoneel. Dat vindt hij een mooie metafoor voor zijn werk in het coachen van teams en individuen in organisaties die meer agile willen worden. Want dat is zijn expertise: agile werken. Daar heeft hij al twintig jaar ervaring mee en daar is hij goed in. Zijn hart gaat uit naar de menselijke kant van het werk, naar de communicatie en de samenwerking. Daarbij weet hij alles van complexe adaptieve systemen: omgevingen waarin niets is wat het lijkt, waar best practices je op het verkeerde been kunnen zetten en waar je steeds zult moeten experimenteren en leren. Ook heeft hij nog steeds lol van zijn achtergrond in object georiënteerde softwareontwikkeling: hij mag ontwikkelaars graag uitdagen op hun ontwerpen en de toepassing van design patterns daarin.

06 - 59 443 440

Andere posts

Klik hier