Kursinnhold
Java OOP
Java OOP
OOP-Prinsipper: Abstraksjon
Abstraksjon
Vi har nå kommet til det siste, men svært viktige prinsippet i OOP: Abstraksjon. Ordet "abstraksjon" høres ganske abstrakt ut, og kort fortalt sier dette prinsippet at vi bør avhenge av abstraksjon heller enn en spesifikk implementasjon. Dette kan virke komplisert nå. La oss starte med å se på definisjonen:
For eksempel har vi en klasse kalt Person,
og mange ulike klasser er avledet fra denne. Person
har ulike felt og metoder som er felles for alle klassene. Men når vi har en klasse kalt BasketballPlayer,
blir egenskapen height
avgjørende, mens for en klasse som Driver
er height
irrelevant og ikke viktig. Det er her abstraksjon kommer inn i bildet. Ved å arve fra en abstraksjon kan vi gjøre height
-parameteren valgfri, slik at vi ikke trenger å bruke den der det ikke er nødvendig.
Dette kan virke komplisert, så la oss gå videre til et eksempel:
Car.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Klassen Car
representerer ikke noe spesifikt. Det finnes ikke bare en Car
; det finnes sedaner, lastebiler, traktorer. Derfor benytter vi oss av abstraksjonen kalt Car
. For å forenkle det ytterligere:
Car
er en mal som vi bruker for å lage spesifikke bilklasser.
Vær oppmerksom på syntaksen:
Dette er syntaksen for å erklære en abstrakt klasse. Merk også syntaksen for å erklære en abstrakt metode:
En abstrakt metode har ingen kropp; dette er dens hovedkarakteristikk. Subklasser av en abstrakt klasse vil overstyre denne abstrakte metoden for å definere sin egen implementasjon, ved bruk av polymorfisme.
La oss se nærmere på hva en abstrakt klasse er:
Merk at vi ikke kan opprette et objekt av en abstrakt klasse; det vil føre til en feil:
Abstrakte klasser frigjør oss fra å forholde oss til kun "objekter"; de gir oss en grunnleggende tilstand og atferd. Med bil-eksempelet bør hver bil ha en modell, produksjonsår, maksimal hastighet og farge. De skal også kunne bevege seg og stoppe. Det er alt; derfra designer du dine spesifikke klasser basert på denne abstrakte malen.
Regler for å lage en abstrakt klasse
En abstrakt klasse er en klasse som inneholder minst én abstrakt metode. Du kan lage en abstrakt klasse uten abstrakte metoder, men da har den ingen hensikt. Du vil ikke kunne instansiere objekter av en abstrakt klasse;
Abstrakte metoder kan kun eksistere innenfor en abstrakt klasse; du kan ikke lage abstrakte metoder utenfor en abstrakt klasse;
Metoder i en abstrakt klasse kan være enten abstrakte metoder eller metoder med implementasjon;
En klasse som arver fra en abstrakt klasse må overstyre alle abstrakte metoder;
Du kan arve fra maksimalt én klasse (abstrakt eller ikke-abstrakt);
En abstrakt klasse bør representere de felles egenskapene og atferden til sine arveklasser. Vi vil diskutere dette mer detaljert når vi studerer SOLID-prinsippene.
La oss se på et eksempel for å forstå hvordan subklasser skal overstyre abstrakte metoder ved å arve fra en abstrakt klasse, ved å bruke eksempelet med barneklassen Truck
:
Her er koden fra skjermbildet, omskrevet for bedre lesbarhet og klarhet:
Car.java
Truck.java
Main.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
La oss se nærmere på det som er skrevet ovenfor i detalj:
Første lysbilde: Vi oppretter en underklasse
Truck
som arver fra den abstrakte klassenCar
. Vi ser at IDE-en ber oss implementere de påkrevde metodene;Andre lysbilde: Vi overstyrer de nødvendige metodene. For eksempel skriver vi at
Truck
har startet å kjøre og deretter stoppet;Tredje lysbilde: Vi oppretter et objekt i
main
-metoden. Legg merke til syntaksen som brukes:Car name = new Truck();
. Vi begynner å opprette objektet gjennom abstraksjon og avslutter med en spesifikk implementasjon. Dette kalles komposisjon. Deretter tildeler vi verdier til feltene etter behov og kaller de overstyrte metodene.
Voilà! Hvis du forstår alt, har du lært hvordan du bruker en abstrakt klasse!
Sammendrag
Abstraksjon er sannsynligvis det mest utfordrende prinsippet innen OOP å forstå, og det er ganske sannsynlig at du ikke har fått med deg alt akkurat nå. Men ikke tro at du er alene om dette. Abstraksjon er et konsept som i starten er vanskelig for de fleste utviklere å forstå. Over tid vil du få en bedre forståelse av hvordan du kan arbeide effektivt med abstraksjon og abstrakte klasser. Abstraksjon er et avgjørende prinsipp fordi det gjør det mulig å gjøre programmene våre utvidbare og svært fleksible.
1. Hva er abstraksjon i objektorientert programmering?
2. Hvilke av følgende påstander om abstraksjon er riktige?
3. Hva er formålet med en abstrakt klasse i Java?
4. Hvordan bidrar abstraksjon til vedlikeholdbarhet av kode?
Takk for tilbakemeldingene dine!