Net als parachutebroeken en Pac-Man is OOP (object-georiënteerd programmeren) ontstaan in de jaren tachtig van de vorige eeuw. Maar in tegenstelling tot trendy mode en videospelfiguren, is dit programmeermodel na al die jaren nog steeds springlevend.
OOP is een fundamenteel onderdeel van softwareontwikkeling geworden. Dankzij de alomtegenwoordigheid van talen als Java en C++ kun je geen software voor mobiel ontwikkelen als je de objectgeoriënteerde aanpak niet begrijpt. Hetzelfde geldt voor serieuze webontwikkeling, gezien de populariteit van OOP-talen als Python, PHP en Ruby.
Het idee van objectgeoriënteerd programmeren kan voor sommige IT-professionals een uitdaging zijn. Misschien vraagt u zich af waarom u zelfs objecten nodig hebt als u ook de top-down benadering van traditioneel gestructureerd programmeren in talen als Visual Basic kunt gebruiken.
Als u dit soort software hebt geschreven, bent u waarschijnlijk gewend om grote problemen op te splitsen in deelproblemen en deze op te lossen in afzonderlijke eenheden code. Of u hebt ervaring met functioneel programmeren, waarbij code-elementen worden behandeld als precieze wiskundige functies, en voorkomen wordt dat ze andere elementen beïnvloeden, d.w.z. geen neveneffecten.
Neemt u echter kennis van OOP, dan zult u zien dat het een heel nieuwe manier is om problemen op te lossen. Het basisconcept is dat je in plaats van een programma te schrijven, een klasse maakt, een soort sjabloon met variabelen en functies. Objecten zijn op zichzelf staande instanties van die klasse, en je kunt ze op leuke en spannende manieren op elkaar laten inwerken.
De voordelen van object-georiënteerd programmeren liggen in deze vorm van inkapseling. Hier volgt een gedetailleerde blik op enkele van de belangrijkste voordelen van OOP:
Modulariteit voor eenvoudiger probleemoplossing
Er is iets misgegaan en u hebt geen idee waar u moet zoeken. Zit het probleem in het Widget bestand, of is het de WhaleFlumper? Moet je door dat “sewage.c” bestand ploeteren? Hopelijk heb je je code gecommentarieerd!
Wanneer je met object-georiënteerde programmeertalen werkt, weet je precies waar je moet zoeken. “Oh, het auto-object is kapot? Het probleem moet in de auto klasse zitten!” Je hoeft je nergens anders in te verdiepen.
Dat is het mooie van inkapseling. Objecten zijn op zichzelf staand, en elk stukje functionaliteit doet zijn eigen ding en laat de andere stukjes met rust. Bovendien kan een IT-team op deze manier aan meerdere objecten tegelijk werken, terwijl de kans dat iemand de functionaliteit van een ander dupliceert tot een minimum wordt beperkt.
Wij kunnen u helpen uw volgende programmeerbaan te vinden:
Hergebruik van code door overerving
Stel dat een collega naast uw object Auto een object Raceauto nodig heeft, en een ander een object Limousine. Iedereen bouwt zijn objecten afzonderlijk, maar ontdekt overeenkomsten tussen de objecten. In feite is elk object gewoon een ander soort auto. Dit is waar de overervingstechniek tijd bespaart: Maak een generieke klasse (Car), en definieer dan de subklassen (RaceCar en Limousine) die de eigenschappen van de generieke klasse moeten erven.
Natuurlijk hebben Limousine en RaceCar nog steeds hun unieke attributen en functies. Indien het RaceCar-object een methode nodig heeft om de branders af te vuren en het Limousine-object een Chauffeur nodig heeft, zou elke klasse afzonderlijke functies voor zichzelf kunnen implementeren. Maar omdat beide klassen belangrijke aspecten erven van de Car klasse, bijvoorbeeld de “drive” of “fillUpGas” methoden, kunnen uw overervende klassen eenvoudig bestaande code hergebruiken in plaats van deze functies helemaal opnieuw te schrijven.
Wat als u een wijziging wilt aanbrengen in alle Car objecten, ongeacht het type? Dat is een ander voordeel van de OO-benadering. U brengt gewoon een wijziging aan in de klasse Auto, en alle auto-objecten erven de nieuwe code.
Flexibiliteit door polymorfisme
Op basis van dit voorbeeld hebt u nu slechts een paar coureurs nodig, of functies, zoals “driveCar”, “driveRaceCar” en “DriveLimousine”. RaceCarDrivers delen sommige eigenschappen met LimousineDrivers, maar andere dingen, zoals RaceHelmets en BeverageSponsorships, zijn uniek.
Dit is waar object-georiënteerd programmeren het zoete polymorfisme in het spel komt. Omdat een enkele functie zich kan aanpassen aan de klasse waarin zij is ondergebracht, zou je in de bovenliggende klasse Auto een functie kunnen maken die “rijden” heet – niet “driveCar” of “driveRaceCar”, maar gewoon “rijden”. Deze ene functie zou werken met de RaceCarDriver, LimousineDriver, enz. In feite zou je zelfs “raceCar.drive(mijnRaceCarDriver)” of “limo.drive(mijnChauffeur)” kunnen hebben.”
Effectief problemen oplossen
Een taal als C heeft een verbazingwekkende erfenis in de programmeergeschiedenis, maar software schrijven in een top-down taal is als Jenga spelen terwijl je wanten aan hebt. Hoe complexer het wordt, hoe groter de kans dat het in elkaar stort. Ondertussen kan het schrijven van een functioneel-stijl programma in een taal als Haskell of ML een hele klus zijn.
Object-georiënteerd programmeren is vaak de meest natuurlijke en pragmatische aanpak, als je het eenmaal onder de knie hebt. Met OOP-talen kunt u uw software opsplitsen in hapklare problemen die u vervolgens kunt oplossen – één object tegelijk.
Dit wil niet zeggen dat OOP de enige ware manier is. Maar de voordelen van object-georiënteerd programmeren zijn legio. Wanneer je complexe programmeeruitdagingen moet oplossen en code-tools aan je vaardigheden wilt toevoegen, is OOP je vriend – en heeft het een veel langere levensduur en een veel groter nut dan Pac-Man of een parachutebroek.