1. Introduksjon av prinsippene for OOP

I dag vil du oppdage en ny og interessant verden. En verden av objektorientert programmering ( OOP ). Du har tidligere lært om klasser og objekter. I dag vil du lære mer om dem, mye mer.

OOP dukket opp som et svar på den økende kompleksiteten til programmer. Da variabler og metoder i programmer begynte å telle titusener, ble det klart at noe måtte gjøres. En løsning var å kombinere data og tilhørende metoder til separate objekter.

Nå måtte programmerere separat beskrive hvordan objekter samhandler eksternt og hvordan de oppfører seg internt. Dette gjorde det mye lettere å forstå og skrive programmer. Imidlertid gjensto et spørsmål: hvilke metoder bør være interne i et objekt og hvilke bør være tilgjengelige for andre objekter?

Mange tilnærminger ble forsøkt. Og basert på de oppdagede beste praksisene, dukket det opp 4 prinsipper for OOP . De er abstraksjon, innkapsling, arv og polymorfisme . Tidligere var det bare tre, men eksperter bestemte seg senere for å legge til abstraksjon også.


2. Abstraksjon

Folk på Internett krangler fortsatt om definisjonen av abstraksjon i OOP . Problemet er ikke at alle tar feil. Det er at alle har rett . Jo mindre et program er, jo mer abstraksjon er knyttet til Java-språket. Jo større et program er, jo mer abstraksjon er knyttet til modellering/forenkling av virkelige objekter.

Men de beste hodene ser ut til å være enige om at:

Abstraksjon er bruken av bare de egenskapene til et objekt som representerer det tilstrekkelig nøyaktig i et program. Hovedideen er å representere objektet med det minste settet av felt og metoder som samtidig lar oppgavene dine løses med tilstrekkelig nøyaktighet .

I Java oppnås abstraksjon gjennom abstrakte klasser og grensesnitt.

Abstraksjon i det virkelige liv

Et godt eksempel på abstraksjon i det virkelige liv er stillingsbeskrivelser i en bedrift eller organisasjon. Tittelen på en stilling er én ting, men det spesifikke ansvaret som er tillagt en stilling er en helt annen sak.

Tenk deg at du designer organisasjonsstrukturen til ditt fremtidige selskap. Du kan dele sekretæransvaret ved å spre dem på flere forskjellige stillinger. Du kan dele opp CEO-stillingen i flere separate stillinger: CFO, CTO, CMO, HR Director. Eller du kan for eksempel slå sammen stillingene som kontorsjef og rekrutterer til én.

Du finner på stillingsbetegnelser og deler deretter opp ansvaret for disse stillingene. Abstraksjon er å bryte bort fra objektet som helhet og velge de essensielle egenskapene og komponentene vi trenger.

Vi introduserer prinsippene for OOP.  Abstraksjon

Fra et programmeringssynspunkt er abstraksjon den riktige inndelingen av et program i objekter . Vanligvis er det dusinvis av måter å representere et hvilket som helst stort program som samvirkende objekter. Abstraksjon lar deg velge de essensielle egenskapene og ignorere de ikke-essensielle.


3. Innkapsling

Målet med innkapsling er å forbedre interaksjoner ved å gjøre objekter enklere.

Og den beste måten å forenkle noe på er å skjule noe komplisert fra nysgjerrige øyne. Hvis du for eksempel blir satt inn i cockpiten til en Boeing jumbojet, vil du ikke umiddelbart forstå hvordan du betjener den:

Men for passasjerene på flyet er alt enklere: du kjøper en billett og setter deg på flyet, som tar av og deretter lander. Du kan enkelt fly fra ett kontinent til et annet med kun muligheten til å "kjøpe en billett" og "komme på et fly". All kompleksiteten med å forberede flyet for flyvning, start, landing og ulike nødsituasjoner er skjult for deg. For ikke å snakke om satellittnavigasjons-, autopilot- og lufttrafikksentralene. Og dette forenkler livet for oss.

Fra et programmeringssynspunkt er innkapsling å "skjule implementeringen". Jeg liker denne 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 med den private modifikatoren), og la bare to eller tre metoder være i samhandling med andre klasser (ved å merke dem med den offentlige modifikatoren). Da vil alle andre klasser i programmet vårt bare se de tre offentlige metodene og kalle dem, men ikke andre. Og all kompleksiteten vil være skjult inne i klassen, akkurat som cockpiten er skjult for glade passasjerer.


4. Arv

Det er to sider ved arv . Arv i programmering og arv i 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. Lag det vi trenger fra bunnen av, bruk mye tid og krefter.
  2. Skap det vi trenger basert på noe som allerede eksisterer.

Den optimale strategien er denne: ta en eksisterende god løsning, modifiser den litt, juster den for å passe våre behov, og bruk den deretter.

Hvis vi sporer menneskets historie tilbake til dens begynnelse, oppdager vi at det har gått milliarder av år siden livet begynte på planeten. Men hvis vi anser utgangspunktet for mennesker som våre primatforfedre (dvs. mennesker er "basert på" primatforfedre), så har det bare gått et par millioner år. Å bygge fra bunnen av tar lengre tid. Mye lenger.

I programmering kan du gjøre noe lignende ved å lage en klasse basert på en annen. Den nye klassen stammer fra (arver) den eksisterende klassen. Dette er veldig fordelaktig når en eksisterende klasse har 80-90 % av dataene og metodene vi trenger. Vi erklærer rett og slett den riktige klassen som overordnet for den nye klassen vår, og alle dataene og metodene til den overordnede klassen vises automatisk i den nye klassen. Praktisk, ikke sant?


5. Polymorfisme

Polymorfisme er et programmeringskonsept. Den beskriver en situasjon der ulike implementeringer er skjult bak et enkelt grensesnitt. Ser vi til det virkelige liv for en motpart, finner vi at det passer godt å kjøre et kjøretøy.

Hvis noen kan kjøre lastebil, kan hun også settes bak rattet i en ambulanse eller bak rattet i en sportsbil. En person kan betjene en bil, uavhengig av type bil, fordi alle biler har samme kontrollgrensesnitt: et ratt, pedaler og girskift. Bilenes indre er forskjellig, men de har alle samme kontrollgrensesnitt.

Tilbake til programmeringsverdenen lar polymorfisme objekter av forskjellige klasser (som vanligvis har en felles stamfar) få tilgang til på samme måte, en egenskap hvis verdi knapt kan overvurderes. Verdien øker etter hvert som programmet vokser seg større.

OOP betyr prinsipper. Interne lover. Hver av dem begrenser oss på en eller annen måte, men gir store fordeler tilbake når programmet blir stort. De fire prinsippene for OOP er som fire ben på et bord. Ta en bort og hele systemet blir ustabilt.