Kursusindhold
Java OOP
Java OOP
OOP-Principper: Abstraktion
Abstraktion
Vi er nu nået til det sidste, men meget vigtige princip i OOP: Abstraktion. Ordet "abstraktion" lyder ret abstrakt, og kort sagt fortæller dette princip os, at vi bør afhænge af abstraktion frem for en specifik implementering. Dette kan dog virke komplekst nu. Lad os starte med at se på definitionen:
For eksempel har vi en klasse kaldet Person,
og mange forskellige klasser er afledt af den. Person
har forskellige felter og metoder, der er fælles for alle klasser. Men når vi har en klasse kaldet BasketballPlayer,
bliver egenskaben height
afgørende, mens Driver
for en klasse som height
er irrelevant og ikke vigtig. Det er her, abstraktion kommer ind i billedet. Ved at arve fra en abstraktion kan vi gøre height
-parameteren valgfri, så vi ikke behøver at bruge den, hvor det ikke er nødvendigt.
Det kan lyde komplekst, så lad os 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(); }
Car
-klassen repræsenterer ikke noget specifikt. Der findes ikke bare en Car
; der findes sedaner, lastbiler, traktorer. Derfor afhænger vi af abstraktionen kaldet Car
. For at forenkle det yderligere:
Car
er en skabelon, som vi bruger til at oprette specifikke bilklasser.
Bemærk syntaksen:
Dette er syntaksen for at erklære en abstrakt klasse. Bemærk også syntaksen for at erklære en abstrakt metode:
En abstrakt metode har ikke en krop; dette er dens hovedkarakteristik. Subklasser af en abstrakt klasse vil overskrive denne abstrakte metode for at definere deres egen implementering ved hjælp af polymorfi.
Lad os se nærmere på, hvad en abstrakt klasse er:
Bemærk, at vi ikke kan oprette et objekt af en abstrakt klasse; det vil resultere i en fejl:
Abstrakte klasser frigør os fra kun at arbejde med "objekter"; de giver os en grundlæggende tilstand og adfærd. Med bil-eksemplet bør hver bil have en model, produktionsår, maksimal hastighed og farve. De skal også kunne køre og stoppe. Det er alt; derfra designer du dine specifikke klasser baseret på denne abstrakte skabelon.
Regler for oprettelse af en abstrakt klasse
En abstrakt klasse er en klasse, der indeholder mindst én abstrakt metode. Du kan oprette en abstrakt klasse uden abstrakte metoder, men så tjener den ikke noget formål. Du vil ikke kunne instantisere objekter af en abstrakt klasse;
Abstrakte metoder kan kun eksistere inden for en abstrakt klasse; du kan ikke oprette abstrakte metoder uden for en abstrakt klasse;
Metoder i en abstrakt klasse kan enten være abstrakte metoder eller metoder med implementering;
En klasse, der arver fra en abstrakt klasse, skal overskrive alle abstrakte metoder;
Du kan arve fra maksimalt én klasse (abstrakt eller ikke-abstrakt);
En abstrakt klasse bør repræsentere de fælles egenskaber og adfærd for dens afledte klasser. Vi vil diskutere dette mere detaljeret, når vi gennemgår SOLID-principperne.
Lad os se på et eksempel for at forstå, hvordan subklasser skal overskrive abstrakte metoder ved at arve fra en abstrakt klasse, med eksemplet på barneklassen Truck
:
Her er koden fra skærmbilledet, omskrevet for bedre læsbarhed og klarhed:
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(); }
Lad os se nærmere på, hvad der er skrevet ovenfor i detaljer:
Første slide: Vi opretter en underklasse
Truck
, der arver fra den abstrakte klasseCar
. Vi kan se, at IDE'en beder os om at implementere de pågældende metoder;Anden slide: Vi overskriver de nødvendige metoder. For eksempel skriver vi, at
Truck
er begyndt at køre og derefter er stoppet;Tredje slide: Vi opretter et objekt i
main
-metoden. Bemærk den anvendte syntaks:Car name = new Truck();
. Vi starter med at oprette objektet gennem abstraktion og afslutter med en specifik implementering. Dette kaldes komposition. Derefter tildeler vi værdier til felterne efter behov og kalder de overskrevne metoder.
Voilà! Hvis du forstår det hele, har du lært at bruge en abstrakt klasse!
Resumé
Abstraktion er sandsynligvis det mest udfordrende princip i OOP at forstå, og det er ret sandsynligt, at du ikke har forstået alt på nuværende tidspunkt. Men tro ikke, at du er alene om dette. Abstraktion er et begreb, som de fleste udviklere i starten har svært ved at forstå. Med tiden vil du få en bedre forståelse for, hvordan du arbejder effektivt med abstraktion og abstrakte klasser. Abstraktion er et afgørende princip, fordi det gør det muligt for os at gøre vores programmer udvidelige og meget fleksible.
1. Hvad er abstraktion i objektorienteret programmering?
2. Hvilke af følgende udsagn er sande om abstraktion?
3. Hvad er formålet med en abstrakt klasse i Java?
4. Hvordan bidrager abstraktion til vedligeholdelse af kode?
Tak for dine kommentarer!