Als je naar het scherm van je computer kijkt, of van je iPhone of je iPad, zie je plaatjes. Het kunnen foto’s of tekeningen zijn. Maar ook de knoppen waarop je klikt, of de teksten die je aanraakt, zijn grafische afbeeldingen. Wat je ziet op het computerscherm wordt daarom de “graphical user interface” genoemd, kortweg GUI (spreek uit als goewie, met de g van “Glassgow”). Maar hoe werkt zo’n GUI?

We hebben het over computers, en ik wil eerst even duidelijk vaststellen dat iPhones en iPads (en zo) ook computers zijn. Ze zijn alleen wat kleiner, en wat aaibaarder. Dat is ook letterlijk wat je doet, aaien, aanraken. Het scherm van een iDing heet daarom een touch screen. In plaats van een muis gebruik je je vingers als je iets wilt aanwijzen. Dat is het belangrijkste verschil.

Terug naar de GUI. Op het scherm staat een heleboel informatie, die er bij de ene app (als ik alle computerprogramma’s voor het gemak even zo mag noemen) totaal anders zal uitzien dan bij de andere. Maar altijd heeft die informatie twee doeleinden:

  • je iets laten zien (een tekst, een foto, een knop, een menu, …)
  • je iets erin laten aanwijzen, iets selecteren, iets activeren (met de muis of met je vinger)

Het is de taak van de app om deze twee functies mogelijk te maken. Om dat overzichtelijk te houden is de scherminhoud niet één grote brij. Wat je ziet op het scherm is opgebouwd uit zgn. “componenten”. Iedere component speelt zijn eigen rol, heeft zijn eigen kleine taakje uit te voeren. De ene component is een knop, misschien wel de Verstuur-knop waarmee je een e-mail verstuurt. De andere component is een tekst, misschien wel de tekst van de web-pagina die je leest. En weer een andere component is een boze vogel in een spelletje.

Iedere component zijn eigen taak. Hé, doet dat je ergens aan denken? Precies, objecten. Deeltjes van een systeem die elk hun eigen kleine maar onmisbare taakje vervullen. En dat is precies hoe een GUI is gemaakt: voor iedere zichtbare component is er een onzichtbaar object dat de genoemde twee taken vervult. Omdat er op een scherm meestal veel componenten zichtbaar zijn, zijn er evenveel objecten, ergens tot leven geroepen in de software. Van al die objecten zijn sommige standaard: alle knoppen op het scherm werken hetzelfde, bijvoorbeeld. De objecten die tot taak hebben die knoppen te laten werken zijn daarom allemaal van hetzelfde type (dezelfde class, zoals dat heet). De programmeur van de app kan kiezen uit een grote verzameling standaard object-typen (vakterm: een class library). Vervolgens kan hij (of zij) van een gekozen type één of meer objecten tot leven brengen. Ieder object zal voor zijn eigen component op het scherm de bovengenoemde twee taken vervullen: iets laten zien, en reageren op een klik of een aanraking.

Eén (belangrijk) detail nog: de programmeur wil natuurlijk niet dat alle knoppen hetzelfde doen. De ene knop moet misschien een e-mail versturen, terwijl een andere knop iemand moet opbellen. Daarom werken de standaard-objecten samen met hulp-objecten, die een gedelegeerde taak uitvoeren. Als de knop wordt aangeraakt zal zijn object een boodschap sturen aan zijn hulpje: hé jij, wakker worden, er is werk aan de winkel. Wat voor werk dat is interesseert het knop-object niet; dat is de taak van het hulp-object. De hulp-objecten zijn van een type dat meestal niet standaard is: de programmeur moet dat type eerst programmeren (de code ervoor schrijven), en daarna kunnen de objecten worden gemaakt. Meer technisch: eerst moet de class worden geschreven, daarna kunnen er (één of meer) objecten van worden gemaakt. Vergelijk het maar met het bouwen van een huis: eerst moet er een bouwtekening worden gemaakt, daarna kunnen er (één of meer) huizen volgens die tekening worden gebouwd.

Het is eigenlijk net het leven zelf. Sommige mensen zitten achter een balie; zij zijn het gezicht van een bedrijf. Ze praten tegen de klanten en luisteren naar ze. Precies de twee taken die we hierboven zagen: iets laten zien (of horen), en wachten tot er een verzoek van de klant komt. Vervolgens moeten ze ervoor zorgen dat de wens van de klant wordt uitgevoerd. Dat doen ze niet zelf, nee, ze delegeren het aan iemand anders. Een collega, of een andere afdeling. Een ander object. En wij maar denken dat we uniek zijn. Niks daarvan, we zijn objecten van voorgeprogrammeerde types, we komen van de grote hoop. Vervangbaar ook nog. Maar laten we ons er niks van aantrekken. Met een beetje geluk is er ergens iemand die van ons houdt. Daar hebben objecten tot nog toe geen verstand van.

Advertenties