Als je wat programmeerwerk hebt gedaan voor beginners of zelfs bent gaan kijken naar verschillende talen, ben je waarschijnlijk de uitdrukking "objectgeoriënteerd programmeren" (of "OOP") tegengekomen.
Er zijn allerlei technische verklaringen over wat het is, maar vandaag gaan we kijken naar het definiëren van objectgeoriënteerd programmeren op een eenvoudige manier.
Voordat we beginnen: proceduretalen
Om te begrijpen wat een objectgeoriënteerde programmeertaal is, moet u weten wat deze heeft vervangen. Vroege programmeertalen werden procedureel genoemd omdat de programmeur een heel specifieke reeks procedures zou definiëren die de computer zou uitvoeren.
In de vroegste dagen werden procedures geschreven op ponskaarten. Die stappen namen gegevens op, voerden een reeks acties uit op die gegevens en leverden vervolgens nieuwe gegevens.
Proceduretalen werkten een tijdlang goed (en sommige zijn nog steeds in gebruik). Maar als u iets meer wilt programmeren dan een standaardvolgorde, kunnen proceduretalen moeilijk te beheren zijn. Dat is waar objectgeoriënteerd programmeren binnenkomt.
Het doel van objectgeoriënteerd programmeren
Dus wat is objectgericht programmeren?
De eerste object-georiënteerde taal (algemeen overeengekomen om Simula te zijn) introduceerde het idee van objecten . Objecten zijn verzamelingen van informatie die worden behandeld als een unieke entiteit.
We zullen dieper ingaan op wat dat eigenlijk in een seconde met een voorbeeld betekent, maar eerst moeten we het hebben over klassen . Klassen zijn een soort van als pre-objecten. Ze bevatten een lijst met kenmerken die, indien gedefinieerd, een object worden.
Laten we het voorbeeld nemen van het programmeren van een schaakspel. We hebben misschien een klasse genaamd Piece. Binnen Piece hebben we een lijst met attributen:
- Kleur
- Hoogte
- Vorm
- Beweging toegestaan
Een object definieert eenvoudig een bepaald exemplaar van een ding dat tot die klasse behoort.
We kunnen dus een object hebben dat WhiteQueen heet. Dat object zou definities hebben voor alle vier attributen (wit, hoog, cilindrisch met kantelen, een willekeurig aantal spaties in elke richting). Het kan ook methoden of functies hebben.
Wat maakt dit zoveel beter dan de procedurele aanpak?
Kortom, objectgeoriënteerde programmeertalen (zoals Java) maken het eenvoudiger om gegevens en code te organiseren op een manier die veelzijdiger is voor een groter project.
Om het wat gedetailleerder te bespreken, zullen we het hebben over de vier basisprincipes van objectgeoriënteerd programmeren.
Object-georiënteerd programmeren: abstractie
Alleen omdat u iets wilt gebruiken, hoeft u niet te weten hoe het werkt. Een espressomachine, bijvoorbeeld, is complex. Maar je hoeft niet te weten hoe het werkt. Je moet gewoon weten dat wanneer je op "On" drukt, je espresso krijgt.
Hetzelfde geldt voor objecten in objectgeoriënteerd programmeren. In ons schaakvoorbeeld hebben we mogelijk een methode move (). Die methode kan veel gegevens en andere methoden vereisen. Mogelijk zijn de beginpositie en de variabelen voor de eindpositie nodig. Het kan een andere methode gebruiken om te bepalen of het een stuk heeft vastgelegd.
Maar dat hoeft u niet te weten. Alles wat je moet weten is dat wanneer je het stuk laat bewegen, het beweegt. Dat is abstractie.
Object-georiënteerd programmeren: inkapseling
Inkapseling is een van de manieren waarop objectgericht programmeren abstractie creëert. Elk object is een verzameling gegevens die als een enkele entiteit wordt behandeld. En binnen die objecten bevinden zich gegevens - zowel variabelen als methoden.
De variabelen binnen een object worden over het algemeen privé gehouden, wat betekent dat andere objecten en methoden er geen toegang toe hebben. Objecten kunnen alleen worden beïnvloed door hun methoden te gebruiken.
Een Bishop-object kan verschillende stukjes informatie bevatten. Het kan bijvoorbeeld een variabele hebben die 'positie' wordt genoemd. Die variabele is nodig om de methode move () te gebruiken. En, natuurlijk, het heeft een kleur.
Door de positievariabele privé te maken en de methode move () openbaar te maken, beschermt een programmeur de verplaatsingsvariabele tegen beïnvloeding door iets anders. En als de kleur een privévariabele is, kan een ander object dit niet wijzigen tenzij er een methode is die de wijziging toestaat. (Wat je waarschijnlijk niet zou hebben, omdat de kleur van het stuk constant zou moeten blijven.)
Deze variabelen en methoden worden bewaard binnen het object Bishop. Omdat ze ingekapseld zijn, kan een programmeur de structuur of inhoud van het object wijzigen zonder zich zorgen te maken over de openbare interface.
Object-Oriented Programming: Inheritance
Naast klassen hebben objectgeoriënteerde programmeertalen ook subklassen. Deze bevatten alle kenmerken van de bovenliggende klasse, maar ze kunnen ook andere kenmerken bevatten.
In ons schaakspel hebben de pionstukken een methode nodig die ze in andere stukken kan veranderen als ze het einde van het bord halen. We noemen dit de methode transformPiece ().
Niet elk stuk heeft de methode transformationPiece () nodig. Dus we zouden het niet in de Piece-klasse willen plaatsen. In plaats daarvan kunnen we een subklasse maken met de naam Pawn. Omdat het een subklasse is, neemt het alle kenmerken van Piece over. Dus een exemplaar van de subklasse Pion bevat een toegestane kleur, hoogte, vorm en beweging.
Maar het bevat ook de methode transformPiece (). Nu hoeven we ons nooit zorgen te maken over het per ongeluk gebruiken van die functie op een toren. Hier is een technische uitleg:
Het maken van subklassen bespaart ook veel tijd. In plaats van voor alles nieuwe klassen te maken, kunnen programmeurs een basisklasse maken en deze vervolgens uitbreiden naar nieuwe subklassen wanneer dat nodig is. (Het is echter vermeldenswaard dat overmatig vertrouwen op overerving slecht is 10 Basisprincipes voor programmeren Elke programmeur moet 10 basisprincipes voor programmeren volgen Elke programmeur moet volgen Schrijf altijd code die kan worden onderhouden door iedereen die mogelijk met uw software werkt. einde, hier zijn verschillende programmeerprincipes om je act op te ruimen. Lees meer.)
Object-georiënteerd programmeren: polymorfisme
Polymorfisme is een gevolg van overerving. Volledig begrip van polymorfisme vereist enige programmeerkennis, dus we houden ons hier gewoon aan de basis. Kortom, door polymorfisme kunnen programmeurs methoden van dezelfde naam gebruiken, maar met verschillende objecten .
Onze klasse Piece kan bijvoorbeeld een methode move () hebben die een stuk een spatie in een willekeurige richting verplaatst. Dat werkt voor het koningsstuk, maar niet voor iets anders. Om dit probleem te verhelpen, kunnen we een nieuwe move () -methode definiëren in de subklasse Rook, die beweging definieert als een onbeperkt aantal spaties vooruit, achteruit, links of rechts.
Wanneer een programmeur de methode move () aanroept en een stuk als argument gebruikt, weet het programma precies hoe het stuk moet bewegen. Dit bespaart een hoop tijd om te proberen uit te vinden welke van de vele verschillende methoden u zou moeten gebruiken.
Object-georiënteerd programmeren in een notendop
Als je een beetje draait na die laatste vier definities, maak je dan niet al te veel zorgen. Dit zijn de belangrijkste dingen die je moet onthouden:
- Objectgeoriënteerd programmeren verzamelt informatie in afzonderlijke entiteiten die objecten worden genoemd.
- Elk object is een enkele instantie van een klasse.
- Abstractie verbergt de innerlijke werking van een object wanneer het niet nodig is om ze te zien.
- Encapsulation slaat gerelateerde variabelen en methoden in objecten op en beschermt ze.
- Met overerving kunnen subklassen kenmerken uit bovenliggende klassen gebruiken.
- Polymorfisme stelt objecten en methoden in staat om met verschillende interfaces met verschillende situaties om te gaan.
Als je die punten kunt onthouden, heb je een goede grip op wat objectgeoriënteerd programmeren is. De vier basisprincipes van objectgeoriënteerd programmeren, zoals ik al zei, kunnen een beetje moeilijk zijn om aan te pakken. Maar zodra u begint met programmeren, worden ze duidelijker.
Bedenk dat we alleen in dit artikel over algemeenheden hebben gesproken. Verschillende objectgerichte talen hebben hun eigen eigenaardigheden en manieren om dingen te laten gebeuren. Zodra u de juiste taal voor u hebt gekozen Op zoek naar de beste programmeertalen? Begin hier! Op zoek naar de beste programmeertalen? Begin hier! Of je nu helemaal nieuw bent in programmeertalen of op zoek bent naar een nieuw soort programmeren, een van de belangrijkste vragen die je kunt stellen is: "Welke programmeertaal is geschikt voor mij?" Lees Meer, je zult leren hoe het OOP-principes in de praktijk brengt.