Kursinnehåll
Java OOP
Java OOP
OOP-Principer: Abstraktion
Abstraktion
Nu har vi kommit till den sista men mycket viktiga principen inom OOP: Abstraktion. Ordet "abstraktion" låter ganska abstrakt, och kortfattat innebär denna princip att vi bör förlita oss på abstraktion snarare än på en specifik implementation. Detta kan låta komplicerat nu. Låt oss börja med att titta på definitionen:
Till exempel har vi en klass som heter Person,
och många olika klasser ärver från den. Person
har olika fält och metoder som är gemensamma för alla klasser. Men när vi har en klass som BasketballPlayer,
blir egenskapen height
avgörande, medan för en klass som Driver
är height
irrelevant och inte viktig. Det är här abstraktion kommer in i bilden. Genom att ärva från en abstraktion kan vi göra parametern height
valfri, så vi behöver inte använda den där det inte är nödvändigt.
Det kan låta komplicerat, så låt oss gå vidare till ett exempel:
Car.java
public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Klassen Car
representerar inte något specifikt. Det finns inget som bara är en Car
; det finns sedaner, lastbilar, traktorer. Därför förlitar vi oss på abstraktionen som kallas Car
. För att förenkla det ytterligare:
Car
är en mall utifrån vilken vi skapar specifika bilklasser.
Observera syntaxen:
Detta är syntaxen för att deklarera en abstrakt klass. Observera även syntaxen för att deklarera en abstrakt metod:
En abstrakt metod har ingen kropp; detta är dess huvudsakliga kännetecken. Subklasser till en abstrakt klass kommer att överskrida denna abstrakta metod för att definiera sin egen implementering, med hjälp av polymorfism.
Låt oss titta närmare på vad en abstrakt klass är:
Observera att vi inte kan skapa ett objekt av en abstrakt klass; det kommer att resultera i ett fel:
Abstrakta klasser befriar oss från att bara hantera "objekt"; de ger oss ett grundläggande tillstånd och beteende. Med bil-exemplet ska varje bil ha en modell, tillverkningsår, maxhastighet och färg. De ska också kunna köra och stanna. Det är allt; därefter utformar du dina specifika klasser baserat på denna abstrakta ritning.
Regler för att skapa en abstrakt klass
En abstrakt klass är en klass som innehåller minst en abstrakt metod. Du kan skapa en abstrakt klass utan några abstrakta metoder, men då fyller den inget syfte. Du kan inte instansiera objekt av en abstrakt klass;
Abstrakta metoder kan endast existera inom en abstrakt klass; du kan inte skapa abstrakta metoder utanför en abstrakt klass;
Metoder inom en abstrakt klass kan vara antingen abstrakta metoder eller metoder med implementation;
En klass som ärver från en abstrakt klass måste överskrida alla abstrakta metoder;
Du kan ärva från maximalt en klass (abstrakt eller icke-abstrakt);
En abstrakt klass ska representera de gemensamma egenskaperna och beteendet hos dess ärvande klasser. Vi kommer att diskutera detta mer i detalj när vi studerar SOLID-principerna.
Låt oss titta på ett exempel för att förstå hur subklasser ska överskrida abstrakta metoder genom att ärva från en abstrakt klass, med exemplet på barnklassen Truck
:
Här är koden från skärmdumpen, omskriven för bättre läsbarhet och tydlighet:
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(); }
Låt oss titta närmare på vad som skrivits ovan i detalj:
Första bilden: Vi skapar en subklass
Truck
som kommer att ärva från den abstrakta klassenCar
. Vi ser att IDE:n uppmanar oss att implementera de obligatoriska metoderna;Andra bilden: Vi överskuggar de nödvändiga metoderna. Till exempel skriver vi att
Truck
har börjat köra och sedan stannat;Tredje bilden: Vi skapar ett objekt i
main
-metoden. Observera den använda syntaxen:Car name = new Truck();
. Vi börjar skapa objektet genom abstraktion och avslutar med en specifik implementation. Detta kallas komposition. Därefter tilldelar vi värden till fälten vid behov och anropar de överskuggade metoderna.
Voilà! Om du förstår allt har du lärt dig hur man använder en abstrakt klass!
Sammanfattning
Abstraktion är förmodligen den mest utmanande principen inom OOP att förstå, och det är ganska troligt att du inte har greppat allt just nu. Men tro inte att du är ensam om detta. Abstraktion är ett koncept som till en början är svårt för de flesta utvecklare att förstå. Med tiden kommer du att få en bättre förståelse för hur du arbetar effektivt med abstraktion och abstrakta klasser. Abstraktion är en avgörande princip eftersom den gör det möjligt för oss att göra våra program utbyggbara och mycket flexibla.
1. Vad är abstraktion i objektorienterad programmering?
2. Vilket av följande är sant om abstraktion?
3. Vad är syftet med en abstrakt klass i Java?
4. Hur bidrar abstraktion till kodens underhållbarhet?
Tack för dina kommentarer!