"Hei, Amigo! I dag skal jeg åpne en ny og interessant verden for deg. Jeg snakker om objektorientert programmering (OOP) . Du har allerede blitt kjent med klasser og objekter. I dag skal du gå for å lære mer om dem, mye mer."

Vi starter med de fire pilarene i OOP. De er abstraksjon, innkapsling, arv og polymorfisme. (Det pleide å være tre, men abstraksjon ble lagt til senere)

1) Abstraksjon.

Et godt eksempel på abstraksjon i det virkelige liv er stillingsbeskrivelser i en bedrift. En stillingstittel er én ting, men dens plikter er en helt annen sak.

Tenk deg at du lager organisasjonskartet for ditt fremtidige selskap. Du kan dele opp oppgavene til en sekretær, spre dem på flere andre stillinger. Du kan dele opp administrerende direktørs jobb i flere separate stillinger: økonomisjef, teknologisjef, markedssjef, personalsjef. Eller du kan kombinere stillingene som kontorsjef og rekrutterer til én.

Tenk deg at du finner på navn på stillinger ved din bedrift, og så «disker opp» ansvaret for disse stillingene. Det er abstraksjon – å dele opp noe stort og monolittisk i flere små deler.

OOP: grunnleggende prinsipper - 1

Fra en programmerers perspektiv er abstraksjon å dele et program inn i objekter.

Et stort program kan vanligvis representeres som samvirkende objekter på et dusin forskjellige måter. Abstraksjon lar deg velge ut et objekts hovedegenskaper og utelate noe mindre viktig.

Abstraksjon er som en militær strategi. Hvis du velger feil strategi, vil ingen genial taktikk redde dagen.

2) Innkapsling.

Innkapsling er ment å forbedre samspillet mellom objekter ved å forenkle dem.

OOP: grunnleggende prinsipper - 2

Den beste måten å forenkle noe på er å skjule noe komplisert for de som ikke trenger å vite om det. Hvis du for eksempel satte deg bak pilotkontrollene til et Boeing-jetfly, ville det ta lang tid å forstå hvordan de fungerer:

OOP: grunnleggende prinsipper - 3

På den annen side ser alt enklere ut for passasjerene på flyet: de kjøper en billett og går ombord på flyet, som så tar av og lander. Du kan enkelt fly fra kontinent til kontinent, bare vite hvordan du «kjøper billett» og «border et fly». Vi ser ikke noe av kompleksiteten knyttet til å klargjøre flyet for flyging, start, landing og ulike potensielle nødsituasjoner. Og vi har ikke nevnt noe om satellittnavigasjon, autopilot og flykontrollsentraler. Dette forenkler livet vårt.

Når det gjelder programmering, er innkapsling «å skjule implementeringen». Jeg liker den definisjonen. Klassen vår kan inneholde hundrevis av metoder og implementere svært kompleks atferd i ulike situasjoner. Men vi kan skjule alle metodene for nysgjerrige øyne (ved å merke dem som « private »), og etterlate bare to eller tre metoder for interaksjon med andre klasser (ved å merke dem « offentlige »). Da vil alle de andre klassene i programmet vårt bare se – og kalle – disse få metodene på denne klassen . All kompleksiteten til klassen vil være skjult inne, akkurat som cockpiten holdes unna blide passasjerer.

3) Arv.

Arv er et konsept innen programmering og det virkelige liv. I programmering er arv et spesielt forhold mellom to klasser. Men arv i det virkelige liv er langt mer interessant.

Hvis vi trenger å skape noe i det virkelige liv, har vi to alternativer:

1) lage det vi trenger fra bunnen av, og bruke mye tid og krefter på det.

2) lage det vi trenger ved å bruke ting som allerede eksisterer.

Den beste strategien er denne: Vi tar en eksisterende god løsning, omarbeider og tilpasser den for å møte våre behov, og bruker den deretter.

Tenk på menneskelig evolusjon. Hvis vi sporer begynnelsen deres tilbake til begynnelsen av livet på planeten, ser vi at milliarder av år har gått. Men hvis vi tenker på mennesker som starter fra aper, så har bare et par millioner år gått. Å lage noe fra bunnen av tar lengre tid. Mye lenger.

På samme måte kan vi i programmering lage en klasse basert på en annen. Den nye klassen blir en etterkommer (arving) av en eksisterende klasse. Dette er veldig nyttig når du allerede har en klasse som inneholder 80-90% av de nødvendige dataene og metodene. Vi erklærer ganske enkelt en passende klasse som forelder til vår nye klasse. Alle overordnede klassens data og metoder blir automatisk en del av den nye klassen. Praktisk, ikke sant?

4) Polymorfisme.

Polymorfisme er programmeringskonsept som beskriver situasjonen der ulike implementeringer er skjult bak samme grensesnitt. For å finne en analog i det virkelige liv, kan vi se på prosessen med å kjøre bil.

Hvis en person kan kjøre en lastebil, kan han eller hun også bli satt bak rattet i en ambulanse eller en sportsbil. En person kan kjøre bil uavhengig av hva slags bil det er, fordi de alle har samme kontrollgrensesnitt: et ratt, pedaler og en girspak. Biler er organisert forskjellig innvendig, men de deler alle samme kontrollgrensesnitt.

Gå tilbake til programmering, polymorfisme lar oss samhandle med objekter av forskjellige klasser (vanligvis med en felles stamfar) på samme måte. Betydningen av dette kan ikke overvurderes. Det blir viktigere etter hvert som et program vokser seg større.

OOP er prinsipper. Programmeringslover. Hver av dem begrenser oss på en eller annen måte, men gir til gjengjeld enorme fordeler etter hvert som programmene vokser seg store. De fire prinsippene til OOP er som de fire bena på en stol. Hvis du tar bort én av dem, blir hele systemet ustabilt.