OOP-Prinzipien: Abstraktion
Abstraktion
Wir sind nun beim letzten, aber sehr wichtigen Prinzip der OOP angekommen: Abstraktion. Das Wort "Abstraktion" klingt recht abstrakt, und kurz gesagt besagt dieses Prinzip, dass wir uns auf Abstraktionen und nicht auf konkrete Implementierungen stützen sollten. Das mag zunächst kompliziert erscheinen. Beginnen wir mit der Definition:
Zum Beispiel haben wir eine Klasse namens Person, von der viele verschiedene Klassen abgeleitet werden. Person besitzt verschiedene Felder und Methoden, die allen Klassen gemeinsam sind. Wenn wir jedoch eine Klasse namens BasketballPlayer, haben, wird das Merkmal height entscheidend, während es für eine Klasse wie Driver, height irrelevant und nicht wichtig ist. Genau hier kommt die Abstraktion ins Spiel. Durch Vererbung von einer Abstraktion können wir den Parameter height optional machen, sodass wir ihn dort, wo er nicht benötigt wird, nicht verwenden müssen.
Das klingt vielleicht kompliziert, daher sehen wir uns ein Beispiel an:
Car.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Die Klasse Car stellt nichts Konkretes dar. Es gibt kein allgemeines Car; es gibt Limousinen, Lastwagen, Traktoren. Daher verlassen wir uns auf die Abstraktion namens Car. Zur weiteren Vereinfachung:
Car ist eine Vorlage, auf deren Basis wir spezifische Fahrzeugklassen erstellen.
Beachten Sie die Syntax:
public abstract class className{ }.
Dies ist die Syntax zur Deklaration einer abstrakten Klasse. Beachten Sie auch die Syntax zur Deklaration einer abstrakten Methode:
public abstract returnValue methodName();
Eine abstrakte Methode besitzt keinen Rumpf; dies ist ihr Hauptmerkmal. Unterklassen einer abstrakten Klasse werden diese abstrakte Methode überschreiben, um ihre eigene Implementierung zu definieren, unter Verwendung von Polymorphie.
Werfen wir einen genaueren Blick darauf, was eine abstrakte Klasse ist:
Beachten Sie, dass kein Objekt einer abstrakten Klasse erstellt werden kann; dies führt zu einem Fehler:
Abstrakte Klassen befreien uns davon, uns nur mit "Objekten" zu beschäftigen; sie bieten uns einen grundlegenden Zustand und Verhalten. Am Beispiel von Autos sollte jedes Auto ein Modell, ein Baujahr, eine Höchstgeschwindigkeit und eine Farbe besitzen. Außerdem sollten sie sich bewegen und anhalten können. Das ist alles; darauf aufbauend entwirfst du deine spezifischen Klassen basierend auf dieser abstrakten Vorlage.
Regeln zur Erstellung einer abstrakten Klasse
- Eine abstrakte Klasse ist eine Klasse, die mindestens eine abstrakte Methode enthält. Du kannst eine abstrakte Klasse ohne abstrakte Methoden erstellen, aber dann hätte sie keinen Zweck. Es ist nicht möglich, Objekte einer abstrakten Klasse zu instanziieren;
- Abstrakte Methoden können nur innerhalb einer abstrakten Klasse existieren; du kannst keine abstrakten Methoden außerhalb einer abstrakten Klasse erstellen;
- Methoden innerhalb einer abstrakten Klasse können entweder abstrakte Methoden oder Methoden mit Implementierungen sein;
- Eine Klasse, die von einer abstrakten Klasse erbt, muss alle abstrakten Methoden überschreiben;
- Es kann von maximal einer Klasse (abstrakt oder nicht-abstrakt) geerbt werden;
- Eine abstrakte Klasse sollte die gemeinsamen Eigenschaften und das Verhalten ihrer erbenden Klassen repräsentieren. Dies wird im Detail besprochen, wenn wir die SOLID-Prinzipien behandeln.
Betrachten wir ein Beispiel, um zu verstehen, wie Unterklassen abstrakte Methoden durch Vererbung von einer abstrakten Klasse überschreiben sollten, am Beispiel der Kindklasse Truck:
Hier ist der Code aus dem Screenshot, zur besseren Lesbarkeit und Klarheit umgeschrieben:
Car.java
Truck.java
Main.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Werfen wir einen genaueren Blick auf die oben genannten Details:
-
Erste Folie: Wir erstellen eine Unterklasse
Truck, die von der abstrakten KlasseCarerbt. Es ist zu sehen, dass die IDE uns auffordert, die erforderlichen Methoden zu implementieren; -
Zweite Folie: Wir überschreiben die notwendigen Methoden. Zum Beispiel schreiben wir, dass der
Trucklosfährt und dann anhält; -
Dritte Folie: Wir erstellen ein Objekt in der
main-Methode. Beachten Sie die verwendete Syntax:Car name = new Truck();. Wir beginnen mit der Objekterstellung durch Abstraktion und enden mit einer konkreten Implementierung. Dies wird als Komposition bezeichnet. Anschließend weisen wir den Feldern nach Bedarf Werte zu und rufen die überschriebenen Methoden auf.
Voilà! Wenn Sie alles verstanden haben, wissen Sie nun, wie man eine abstrakte Klasse verwendet!
Zusammenfassung
Abstraktion ist wahrscheinlich das am schwierigsten zu verstehende Prinzip der OOP, und es ist durchaus möglich, dass Sie im Moment noch nicht alles erfasst haben. Aber denken Sie nicht, dass Sie damit allein sind. Abstraktion ist ein Konzept, das den meisten Entwicklern anfangs schwerfällt. Mit der Zeit werden Sie besser verstehen, wie Sie effektiv mit Abstraktion und abstrakten Klassen arbeiten können. Abstraktion ist ein entscheidendes Prinzip, da sie es ermöglicht, Programme erweiterbar und hochgradig flexibel zu gestalten.
1. Was ist Abstraktion in der objektorientierten Programmierung?
2. Welche der folgenden Aussagen über Abstraktion sind zutreffend?
3. Was ist der Zweck einer abstrakten Klasse in Java?
4. Wie trägt Abstraktion zur Wartbarkeit von Code bei?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 4.76
OOP-Prinzipien: Abstraktion
Swipe um das Menü anzuzeigen
Abstraktion
Wir sind nun beim letzten, aber sehr wichtigen Prinzip der OOP angekommen: Abstraktion. Das Wort "Abstraktion" klingt recht abstrakt, und kurz gesagt besagt dieses Prinzip, dass wir uns auf Abstraktionen und nicht auf konkrete Implementierungen stützen sollten. Das mag zunächst kompliziert erscheinen. Beginnen wir mit der Definition:
Zum Beispiel haben wir eine Klasse namens Person, von der viele verschiedene Klassen abgeleitet werden. Person besitzt verschiedene Felder und Methoden, die allen Klassen gemeinsam sind. Wenn wir jedoch eine Klasse namens BasketballPlayer, haben, wird das Merkmal height entscheidend, während es für eine Klasse wie Driver, height irrelevant und nicht wichtig ist. Genau hier kommt die Abstraktion ins Spiel. Durch Vererbung von einer Abstraktion können wir den Parameter height optional machen, sodass wir ihn dort, wo er nicht benötigt wird, nicht verwenden müssen.
Das klingt vielleicht kompliziert, daher sehen wir uns ein Beispiel an:
Car.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Die Klasse Car stellt nichts Konkretes dar. Es gibt kein allgemeines Car; es gibt Limousinen, Lastwagen, Traktoren. Daher verlassen wir uns auf die Abstraktion namens Car. Zur weiteren Vereinfachung:
Car ist eine Vorlage, auf deren Basis wir spezifische Fahrzeugklassen erstellen.
Beachten Sie die Syntax:
public abstract class className{ }.
Dies ist die Syntax zur Deklaration einer abstrakten Klasse. Beachten Sie auch die Syntax zur Deklaration einer abstrakten Methode:
public abstract returnValue methodName();
Eine abstrakte Methode besitzt keinen Rumpf; dies ist ihr Hauptmerkmal. Unterklassen einer abstrakten Klasse werden diese abstrakte Methode überschreiben, um ihre eigene Implementierung zu definieren, unter Verwendung von Polymorphie.
Werfen wir einen genaueren Blick darauf, was eine abstrakte Klasse ist:
Beachten Sie, dass kein Objekt einer abstrakten Klasse erstellt werden kann; dies führt zu einem Fehler:
Abstrakte Klassen befreien uns davon, uns nur mit "Objekten" zu beschäftigen; sie bieten uns einen grundlegenden Zustand und Verhalten. Am Beispiel von Autos sollte jedes Auto ein Modell, ein Baujahr, eine Höchstgeschwindigkeit und eine Farbe besitzen. Außerdem sollten sie sich bewegen und anhalten können. Das ist alles; darauf aufbauend entwirfst du deine spezifischen Klassen basierend auf dieser abstrakten Vorlage.
Regeln zur Erstellung einer abstrakten Klasse
- Eine abstrakte Klasse ist eine Klasse, die mindestens eine abstrakte Methode enthält. Du kannst eine abstrakte Klasse ohne abstrakte Methoden erstellen, aber dann hätte sie keinen Zweck. Es ist nicht möglich, Objekte einer abstrakten Klasse zu instanziieren;
- Abstrakte Methoden können nur innerhalb einer abstrakten Klasse existieren; du kannst keine abstrakten Methoden außerhalb einer abstrakten Klasse erstellen;
- Methoden innerhalb einer abstrakten Klasse können entweder abstrakte Methoden oder Methoden mit Implementierungen sein;
- Eine Klasse, die von einer abstrakten Klasse erbt, muss alle abstrakten Methoden überschreiben;
- Es kann von maximal einer Klasse (abstrakt oder nicht-abstrakt) geerbt werden;
- Eine abstrakte Klasse sollte die gemeinsamen Eigenschaften und das Verhalten ihrer erbenden Klassen repräsentieren. Dies wird im Detail besprochen, wenn wir die SOLID-Prinzipien behandeln.
Betrachten wir ein Beispiel, um zu verstehen, wie Unterklassen abstrakte Methoden durch Vererbung von einer abstrakten Klasse überschreiben sollten, am Beispiel der Kindklasse Truck:
Hier ist der Code aus dem Screenshot, zur besseren Lesbarkeit und Klarheit umgeschrieben:
Car.java
Truck.java
Main.java
123456789public abstract class Car { String model; int year; int maxSpeed; String color; public abstract void move(); public abstract void stop(); }
Werfen wir einen genaueren Blick auf die oben genannten Details:
-
Erste Folie: Wir erstellen eine Unterklasse
Truck, die von der abstrakten KlasseCarerbt. Es ist zu sehen, dass die IDE uns auffordert, die erforderlichen Methoden zu implementieren; -
Zweite Folie: Wir überschreiben die notwendigen Methoden. Zum Beispiel schreiben wir, dass der
Trucklosfährt und dann anhält; -
Dritte Folie: Wir erstellen ein Objekt in der
main-Methode. Beachten Sie die verwendete Syntax:Car name = new Truck();. Wir beginnen mit der Objekterstellung durch Abstraktion und enden mit einer konkreten Implementierung. Dies wird als Komposition bezeichnet. Anschließend weisen wir den Feldern nach Bedarf Werte zu und rufen die überschriebenen Methoden auf.
Voilà! Wenn Sie alles verstanden haben, wissen Sie nun, wie man eine abstrakte Klasse verwendet!
Zusammenfassung
Abstraktion ist wahrscheinlich das am schwierigsten zu verstehende Prinzip der OOP, und es ist durchaus möglich, dass Sie im Moment noch nicht alles erfasst haben. Aber denken Sie nicht, dass Sie damit allein sind. Abstraktion ist ein Konzept, das den meisten Entwicklern anfangs schwerfällt. Mit der Zeit werden Sie besser verstehen, wie Sie effektiv mit Abstraktion und abstrakten Klassen arbeiten können. Abstraktion ist ein entscheidendes Prinzip, da sie es ermöglicht, Programme erweiterbar und hochgradig flexibel zu gestalten.
1. Was ist Abstraktion in der objektorientierten Programmierung?
2. Welche der folgenden Aussagen über Abstraktion sind zutreffend?
3. Was ist der Zweck einer abstrakten Klasse in Java?
4. Wie trägt Abstraktion zur Wartbarkeit von Code bei?
Danke für Ihr Feedback!