Polymorfisme is een programmeerprincipe waarbij één instructie op veel verschillende soorten objecten kan worden toegepast, en elk type op zijn eigen passende manier reageert. Het woord betekent ‘veel vormen’, en dat is het hele idee: één commando, veel correcte gedragingen afhankelijk van wat het ontvangt.
Stel je een dirigent voor die simpelweg ‘speel’ zegt. De violist strijkt een snaar, de drummer slaat op een trom, de pianist drukt toetsen in. De dirigent geeft één instructie en hoeft niet te weten hoe elk instrument werkt. In code is het hetzelfde: je kunt een cirkel, een vierkant en een driehoek opdragen om ‘jezelf te tekenen’, en elke vorm bevat zijn eigen versie van die stap. Dit idee zit in het hart van object-oriented programming en werkt meestal via een gedeelde interface die vastlegt wat elk object belooft te doen.
Het voordeel is flexibiliteit. Code die deze objecten gebruikt heeft geen lange lijst met uitzonderingen nodig. Voeg je later een nieuwe vorm toe, dan blijft de bestaande code werken, omdat hij het object alleen vraagt te reageren en niet welk type het is.
Een echt voorbeeld maakt het concreet. Stel, een checkout moet een klant afrekenen en je ondersteunt kaart, PayPal en bankoverschrijving. Zonder polymorfisme schrijf je een wirwar van if- en else-checks voor elk type. Mét polymorfisme heeft elk type zijn eigen pay()-stap, en de checkout roept gewoon pay() aan zonder te weten welke het kreeg. Voeg je volgende maand Apple Pay toe, dan schrijf je één nieuwe klasse. De checkout-code verandert nooit, en daar werkt polymorfisme samen met abstraction: de aanroeper leunt op de belofte, niet op de details.
De keerzijde is dat het gedrag lastig te volgen kan worden. Omdat de juiste versie pas tijdens het draaien wordt gekozen, zie je niet altijd aan één regel welke code straks loopt, dus heldere namen en een goede interface tellen juist zwaarder.
Bij TopDevs gebruiken we polymorfisme om klantsystemen makkelijk uitbreidbaar te houden, zodat later een nieuw producttype of een nieuwe betaalmethode toevoegen geen herschrijven betekent van code die al werkt.