Waar kwam objectgeoriënteerde programmering zijn naam vandaan?
Object georiënteerd is niet zomaar een willekeurig buzzwoord dat je in programmeerkringen hoort. Er zit een reden achter de naam - maar wat? Ga met me mee als ik een paar basisprincipes van programmeerconcepten verken en uitleg waarom het objectgeoriënteerd programmeren de technologie achter moderne software stuurt en contrasteert met Procedural en Logic Based Programming.
Geschiedenis van procedurele programmering
Toen computers voor het eerst werden uitgevonden, moesten ze expliciet worden geprogrammeerd met eenvoudige instructies - en “software” was slechts een verzameling van deze uiterst eenvoudige commando's die aan elkaar geregen waren en die zouden lopen achter elkaar.
In eerste instantie moest deze machine-code geschreven worden - verplaats deze “beetje” van dit geheugen naar deze locatie en voer een logische uit “en” operatie op dit met dit bit, enz. - maar snel genoeg werden deze geabstraheerd naar een hoger niveau met behulp van BASIC.
Ik vermoed dat de meesten van jullie BASIC (Beginners Universele Symbolische Instructie Code) op school zijn tegengekomen. Het is een perfect voorbeeld van een procedurele programmeertaal. Zelfs mijn eerste programmeertrip was het gebruik van BASIC op een Amstrad CPC-64. Elke regel begint met een regelnummer, gevolgd door een eenvoudige instructie in voor de mens leesbare taal.
Omdat proceduretalen de commando's na elkaar volgen, is het over het algemeen eenvoudig voor mensen om mee te volgen met wat er in het programma aan de hand is. Het is echter ook moeilijk om iets te maken dat verder gaat dan een eenvoudige leeroefening - wat ons tot het creëren van objectgeoriënteerde programmering leidt.
Object georiënteerd?
Met objectgeoriënteerd programmeren is het de bedoeling om gerelateerde variabelen en functionaliteit samen te brengen in één object, wat een soort complexe datastructuur vertegenwoordigt. Dat object kan dan meerdere keren worden hergebruikt of uitgebreid om iets nog complexer te zijn.
Een game kan bijvoorbeeld een spelerobject hebben. Elk spelerobject in het spel vertegenwoordigt een enkele, unieke, echte speler in ons imaginaire online multiplayer-spel. Elk spelerobject heeft een bijnaam, een huidige locatie, een inventaris en een bewegingssnelheid. Hoewel elke speler uniek is, willen we toch dat ze dezelfde functionaliteit op basisniveau delen. Elke speler heeft misschien een verhuizing functie, waardoor de speler X aantal vakjes vooruit beweegt. Elke speler kan een andere verplaatsingssnelheid hebben, maar wanneer we de speler vertellen om in één opdracht te bewegen, weet hij hoe hij moet reageren volgens zijn eigen internetmechanica.
Waarom is dit nuttig? Een meer realistisch voorbeeld - omdat moderne grafische gebruikersinterfaces onmogelijk zouden zijn zonder objecten - bieden alle besturingssystemen een Window-object. Het is daarom gemakkelijk om een nieuwe te hebben “venster” compleet met knoppen op het volledige scherm en op het volledige scherm en de mogelijkheid om te worden verplaatst - zonder dat u dat zelf hoeft te programmeren. Het enige wat u hoeft te doen is zeggen maak een venster.
Moderne software bestaat feitelijk uit duizenden en duizenden objecten - niet alleen vensters, maar ook knoppen en formuliervelden, en waarschuwingsvakken (die zelf een speciaal soort vensterobject zijn) - en het is alleen de manier waarop ze zijn gerangschikt en de logica van interactie tussen hen waardoor deze software anders is dan anderen. Het betekent dat programmeurs en softwareontwerpers zich kunnen concentreren op het maken van de kernmechanica van hun programma zonder telkens opnieuw het wiel opnieuw uit te vinden.
Een ander voordeel van objectgeoriënteerd ontwerp is dat functionaliteit is gescheiden en onzichtbaar voor elkaar. Dus wanneer de speler op de voorwaartse toets drukt in onze game, het calls de verplaats functie in de speler object. Als we een kleine wijziging aanbrengen in hoe die beweging precies in het spelerobject wordt uitgevoerd - zoals springen in plaats van lopen - dan hoeven we de toetsenbordluisteraar niet aan te passen. Hij belt nog steeds “verhuizing” ongeacht wat er intern in het spelerobject gebeurt - dus we kunnen de functionaliteit veranderen zonder al het andere te verbreken.
Hetzelfde geldt voor besturingssystemen - als de gebruiker plotseling de vensterkleur verandert in rood, hoeft u dat niet te detecteren en het venster ook rood te maken - het is allemaal ingebouwd in het vensterobject.
Erfenis
Zodra we objecten hebben, kunnen we ze ook uitbreiden en erven om meer bruikbare objecten met ander gedrag of extra functionaliteit te produceren. U kan opnieuw het wiel uitvinden - als je wilt. In ons spelersvoorbeeld willen we misschien een maken “superman” voorwerp. Superman is nog steeds een speler, hetzelfde als iedereen - hij wil ook een bijnaam en wil worden vermeld op dezelfde spelersleaderborden - maar in plaats van de standaard verplaatsingsactie die het spelerobject X naar voren laat lopen, willen we dat hij vlieg in plaats daarvan - verplaats 10 vierkanten tegelijk over de top van objecten die onderweg zijn. Door het basisspelersobject uit te breiden “erven” al die nuttige functionaliteit zonder alles opnieuw te hoeven schrijven - maar we kunnen het nog steeds “override” de bewegingsfunctie met onze speciale superman vliegende beweging!
Object georiënteerd programmeren is een absolute openbaring als je alleen maar procedurele programmering hebt meegemaakt, en ik persoonlijk vind het een schande dat een eenvoudige vorm van OOP-taal niet wordt onderwezen op de middelbare school.
One Last Thing: op logica gebaseerde programmeertalen
Deze zijn van bijzonder belang voor mij, omdat ze over het algemeen het meest bruikbaar zijn voor alles wat te maken heeft met kunstmatige intelligentie. Op logica gebaseerde programmeertalen, zoals Prolog, gebruiken geen opdrachten en instructies in de traditionele betekenis. In plaats daarvan zullen ze een probleem oplossen, gezien een reeks regels en voorwaarden.
Denk aan een etentje dat u voor uw gezin host. Je tante kan niet naast je oom zitten omdat ze ruzie maken; je wilt niet dat twee kinderen bij elkaar zitten omdat het kleine boefjes zijn; je wilt zeker niet tussen twee kinderen in zitten. Dat is het daar - dat is uw Prolog-programma geschreven. Geef het nu een lijst met kinderen en volwassenen die naar het feest komen en het geeft een lijst met mogelijke suggesties voor zitplaatsen!
Ik hoop dat je deze beginnersinitiatie op programmeerconcepten leuk vond. Het spijt me dat ik niet meer in detail kon treden en natuurlijk zijn er een miljoen dingen die ik niet heb aangeroerd. Als u meer wilt weten, kunt u me dit laten weten in de opmerkingen. Misschien kunnen we een reeks beginnersgeoriënteerde programmeerinstructies voor verschillende talen doen als er genoeg belangstelling is? Bekijk ook onze programmeergerelateerde archieven, met verschillende hulpmiddelen en programmeerwebsites.
Beeldcredits: ShutterStock
Ontdek meer over: Programmeren.