"Hallo, Amigo! Vandaag ga ik een nieuwe en interessante wereld voor je openen. Ik heb het over Object-Oriented Programming (OOP) . Je hebt al kennis gemaakt met klassen en objecten. Vandaag ga je om meer over hen te leren, veel meer."

We beginnen met de vier pijlers van OOP. Het zijn abstractie, inkapseling, overerving en polymorfisme. (Vroeger waren het er drie, maar later is abstractie toegevoegd)

1) Abstractie.

Een goed voorbeeld van abstractie in het echte leven zijn functiebeschrijvingen bij een bedrijf. Een functietitel is één ding, maar de taken zijn een heel andere zaak.

Stel je voor dat je het organigram voor je toekomstige bedrijf aan het maken bent. Je zou de taken van een secretaresse kunnen verdelen over meerdere andere functies. U kunt de taak van de CEO opsplitsen in verschillende afzonderlijke functies: chief financial officer, chief technology officer, chief marketing officer, chief human resources officer. Of combineer de functies van officemanager en recruiter tot één.

Stel dat u namen bedenkt voor functies bij uw bedrijf en dat u de verantwoordelijkheden voor deze functies "uitdeelt". Dat is abstractie - iets groots en monolithisch opsplitsen in verschillende kleine delen.

OOP: basisprincipes - 1

Vanuit het perspectief van een programmeur is abstractie het correct verdelen van een programma in objecten.

Een groot programma kan gewoonlijk op tientallen verschillende manieren worden weergegeven als interactieve objecten. Met abstractie kun je de belangrijkste kenmerken van een object uitkiezen en al het minder belangrijke weglaten.

Abstractie is als een militaire strategie. Als je de verkeerde strategie kiest, zal geen enkele ingenieuze tactiek de dag redden.

2) Inkapseling.

Inkapseling is bedoeld om de interactie tussen objecten te verbeteren door ze te vereenvoudigen.

OOP: basisprincipes - 2

De beste manier om iets te vereenvoudigen is alles wat ingewikkeld is te verbergen voor degenen die er niets van hoeven te weten. Als u bijvoorbeeld achter de pilootbesturing van een Boeing-jet zou gaan zitten, zou het lang duren om te begrijpen hoe ze werken:

OOP: basisprincipes - 3

Aan de andere kant ziet alles er eenvoudiger uit voor de passagiers in het vliegtuig: ze kopen een kaartje en stappen in het vliegtuig, dat vervolgens opstijgt en landt. U kunt gemakkelijk van continent naar continent vliegen, alleen wetend hoe u "een kaartje moet kopen" en "in een vliegtuig moet stappen". We zien niets van de complexiteit die verband houdt met het voorbereiden van het vliegtuig op vliegen, opstijgen, landen en verschillende mogelijke noodsituaties. En we hebben het nog niet gehad over satellietnavigatie, automatische piloot en luchtverkeersleidingscentra. Dit vereenvoudigt ons leven.

In termen van programmeren is inkapseling "de implementatie verbergen". Ik hou van die definitie. Onze klas kan honderden methoden bevatten en zeer complex gedrag in verschillende situaties implementeren. Maar we kunnen al zijn methoden verbergen voor nieuwsgierige blikken (door ze als " privé " te markeren), waardoor er slechts twee of drie methoden overblijven voor interactie met andere klassen (door ze als " openbaar " te markeren). Dan zullen alle andere klassen in ons programma alleen deze paar methoden in deze klasse zien en aanroepen . Alle complexiteit van de klasse wordt binnenin verborgen, net zoals de cockpit wordt onttrokken aan het zicht van gelukkige passagiers.

3) Overerving.

Overerving is een concept in de programmering en het echte leven. Bij het programmeren is overerving een speciale relatie tussen twee klassen. Maar overerving in het echte leven is veel interessanter.

Als we iets in het echte leven moeten creëren, hebben we twee opties:

1) vanaf nul maken wat we nodig hebben en er veel tijd en moeite aan besteden.

2) maken wat we nodig hebben met dingen die al bestaan.

De beste strategie is deze: we nemen een bestaande goede oplossing, herwerken en tweaken deze om aan onze behoeften te voldoen, en gebruiken hem dan.

Overweeg de menselijke evolutie. Als we hun begin herleiden tot het begin van het leven op de planeet, zien we dat er miljarden jaren zijn verstreken. Maar als we mensen beschouwen als beginnend bij apen, dan zijn er nog maar een paar miljoen jaar verstreken. Iets helemaal opnieuw maken duurt langer. Veel langer.

Evenzo kunnen we bij het programmeren de ene klasse maken op basis van de andere. De nieuwe klasse wordt een afstammeling (erfgenaam) van een bestaande klasse. Dit is erg handig als je al een klasse hebt die 80-90% van de benodigde gegevens en methoden bevat. We declareren gewoon een geschikte klas als ouder van onze nieuwe klas. Alle gegevens en methoden van de bovenliggende klasse worden automatisch onderdeel van de nieuwe klasse. Handig toch?

4) Polymorfisme.

Polymorfisme is een programmeerconcept dat de situatie beschrijft waarin verschillende implementaties verborgen zijn achter dezelfde interface. Om een ​​analoog in het echte leven te vinden, kunnen we kijken naar het autorijden.

Als iemand een vrachtwagen kan besturen, kan hij of zij ook achter het stuur van een ambulance of een sportwagen worden gezet. Een persoon kan een auto besturen, ongeacht wat voor soort auto het is, omdat ze allemaal dezelfde bedieningsinterface hebben: een stuur, pedalen en een versnellingspook. Auto's zijn van binnen anders georganiseerd, maar ze delen allemaal dezelfde besturingsinterface.

Terug naar programmeren, polymorfisme laat ons op dezelfde manier communiceren met objecten van verschillende klassen (meestal met een gemeenschappelijke voorouder). Het belang hiervan kan niet genoeg worden benadrukt. Het wordt belangrijker naarmate een programma groter wordt.

OOP is principes. Programmeerwetten. Elk van hen beperkt ons op de een of andere manier, maar biedt in ruil daarvoor enorme voordelen als programma's groot worden. De vier principes van OOP zijn als de vier poten van een stoel. Als je er ook maar één weghaalt, wordt het hele systeem onstabiel.