logo

Abstraktion in Java

Abstraktion in Java ist der Prozess, bei dem wir dem Benutzer nur wesentliche Details/Funktionalität zeigen. Die nicht wesentlichen Implementierungsdetails werden dem Benutzer nicht angezeigt.

In diesem Artikel erfahren wir etwas über Abstraktion und was abstrakt bedeutet.



Einfaches Beispiel zum Verständnis der Abstraktion:

Fernbedienung für den Fernseher ist ein ausgezeichnetes Beispiel für Abstraktion . Es vereinfacht die Interaktion mit einem Fernseher, indem es die Komplexität hinter einfachen Tasten und Symbolen verbirgt, sodass es einfach ist, die technischen Details der Funktionsweise des Fernsehers zu verstehen.

Was ist Abstraktion in Java?

In Java wird Abstraktion erreicht durch Schnittstellen Und abstrakte Klassen . Mithilfe von Schnittstellen können wir eine 100-prozentige Abstraktion erreichen.

Datenabstraktion kann auch als der Prozess definiert werden, bei dem nur die erforderlichen Merkmale eines Objekts identifiziert werden und die irrelevanten Details ignoriert werden. Die Eigenschaften und Verhaltensweisen eines Objekts unterscheiden es von anderen Objekten ähnlichen Typs und helfen auch bei der Klassifizierung/Gruppierung der Objekte.



Abstraktionsbeispiel aus dem wirklichen Leben:

Betrachten Sie ein reales Beispiel eines Mannes, der ein Auto fährt. Der Mann weiß nur, dass das Betätigen des Gaspedals die Geschwindigkeit eines Autos erhöht oder das Betätigen der Bremsen das Auto anhält, aber er weiß nicht, wie sich die Geschwindigkeit beim Betätigen des Gaspedals tatsächlich erhöht, er weiß nichts über den inneren Mechanismus des Autos oder die Implementierung des Gaspedals, der Bremsen usw. im Auto. Das ist Abstraktion.

Java Abstract-Klassen und Java Abstract-Methoden

  1. Eine abstrakte Klasse ist eine Klasse, die mit einem abstrakten Schlüsselwort deklariert wird.
  2. Eine abstrakte Methode ist eine Methode, die ohne Implementierung deklariert wird.
  3. Eine abstrakte Klasse kann über alle abstrakten Methoden verfügen oder auch nicht. Einige davon können konkrete Methoden sein
  4. Eine durch eine Methode definierte Zusammenfassung muss in der Unterklasse immer neu definiert werden, wodurch Folgendes entsteht überragend obligatorisch oder die Unterklasse selbst abstrakt machen.
  5. Jede Klasse, die eine oder mehrere abstrakte Methoden enthält, muss auch mit einem abstrakten Schlüsselwort deklariert werden.
  6. Es kann kein Objekt einer abstrakten Klasse geben. Das heißt, eine abstrakte Klasse kann nicht direkt mit instanziiert werden neuer Betreiber .
  7. Eine abstrakte Klasse kann parametrisierte Konstruktoren haben und der Standardkonstruktor ist in einer abstrakten Klasse immer vorhanden.

Algorithmus zur Implementierung der Abstraktion in Java

  1. Bestimmen Sie die Klassen oder Schnittstellen, die Teil der Abstraktion sein werden.
  2. Erstellen Sie eine abstrakte Klasse oder Schnittstelle, die das gemeinsame Verhalten und die Eigenschaften dieser Klassen definiert.
  3. Definieren Sie abstrakte Methoden innerhalb der abstrakten Klasse oder Schnittstelle, die keine Implementierungsdetails haben.
  4. Implementieren Sie konkrete Klassen, die die abstrakte Klasse erweitern oder die Schnittstelle implementieren.
  5. Überschreiben Sie die abstrakten Methoden in den konkreten Klassen, um deren spezifische Implementierungen bereitzustellen.
  6. Verwenden Sie die konkreten Klassen, um die Programmlogik zu implementieren.

Wann werden abstrakte Klassen und abstrakte Methoden verwendet?

Es gibt Situationen, in denen wir eine Superklasse definieren möchten, die die Struktur einer bestimmten Abstraktion deklariert, ohne eine vollständige Implementierung jeder Methode bereitzustellen. Manchmal möchten wir eine Oberklasse erstellen, die nur eine Generalisierungsform definiert, die von allen Unterklassen gemeinsam genutzt wird, und es jeder Unterklasse überlassen, die Details auszufüllen.

Betrachten Sie ein klassisches Formbeispiel, das möglicherweise in einem computergestützten Designsystem oder einer Spielsimulation verwendet wird. Der Basistyp ist die Form und jede Form hat eine Farbe, Größe usw. Daraus werden bestimmte Arten von Formen abgeleitet (vererbt) – Kreis, Quadrat, Dreieck usw. – von denen jede zusätzliche Eigenschaften und Verhaltensweisen aufweisen kann. Beispielsweise können bestimmte Formen gespiegelt werden. Einige Verhaltensweisen können unterschiedlich sein, beispielsweise wenn Sie die Fläche einer Form berechnen möchten. Die Typenhierarchie verkörpert sowohl die Ähnlichkeiten als auch die Unterschiede zwischen den Formen.



Abstrakte Klasse in Java

Beispiel für eine Java-Abstraktion

Beispiel 1:

Java


Typoskript-Datumstyp



// Java program to illustrate the> // concept of Abstraction> abstract> class> Shape {> >String color;> > >// these are abstract methods> >abstract> double> area();> >public> abstract> String toString();> > >// abstract class can have the constructor> >public> Shape(String color)> >{> >System.out.println(>'Shape constructor called'>);> >this>.color = color;> >}> > >// this is a concrete method> >public> String getColor() {>return> color; }> }> class> Circle>extends> Shape {> >double> radius;> > >public> Circle(String color,>double> radius)> >{> > >// calling Shape constructor> >super>(color);> >System.out.println(>'Circle constructor called'>);> >this>.radius = radius;> >}> > >@Override> double> area()> >{> >return> Math.PI * Math.pow(radius,>2>);> >}> > >@Override> public> String toString()> >{> >return> 'Circle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> class> Rectangle>extends> Shape {> > >double> length;> >double> width;> > >public> Rectangle(String color,>double> length,> >double> width)> >{> >// calling Shape constructor> >super>(color);> >System.out.println(>'Rectangle constructor called'>);> >this>.length = length;> >this>.width = width;> >}> > >@Override> double> area() {>return> length * width; }> > >@Override> public> String toString()> >{> >return> 'Rectangle color is '> +>super>.getColor()> >+>'and area is : '> + area();> >}> }> public> class> Test {> >public> static> void> main(String[] args)> >{> >Shape s1 =>new> Circle(>'Red'>,>2.2>);> >Shape s2 =>new> Rectangle(>'Yellow'>,>2>,>4>);> > >System.out.println(s1.toString());> >System.out.println(s2.toString());> >}> }>

>

Java-Version Linux
>

Ausgabe

Shape constructor called Circle constructor called Shape constructor called Rectangle constructor called Circle color is Redand area is : 15.205308443374602 Rectangle color is Yellowand area is : 8.0>

Beispiel 2:

Java




// Java Program to implement> // Java Abstraction> > // Abstract Class declared> abstract> class> Animal {> >private> String name;> > >public> Animal(String name) {>this>.name = name; }> > >public> abstract> void> makeSound();> > >public> String getName() {>return> name; }> }> > // Abstracted class> class> Dog>extends> Animal {> >public> Dog(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' barks'>);> >}> }> > // Abstracted class> class> Cat>extends> Animal {> >public> Cat(String name) {>super>(name); }> > >public> void> makeSound()> >{> >System.out.println(getName() +>' meows'>);> >}> }> > // Driver Class> public> class> AbstractionExample {> >// Main Function> >public> static> void> main(String[] args)> >{> >Animal myDog =>new> Dog(>'Buddy'>);> >Animal myCat =>new> Cat(>'Fluffy'>);> > >myDog.makeSound();> >myCat.makeSound();> >}> }>

>

>

Ausgabe

Buddy barks Fluffy meows>

Erklärung des obigen Java-Programms:

Dieser Code definiert eine abstrakte Tierklasse mit einer abstrakten Methode makeSound(). Die Klassen Dog und Cat erweitern Animal und implementieren die Methode makeSound(). Die main()-Methode erstellt Instanzen von Dog und Cat und ruft für sie die makeSound()-Methode auf.

Dies veranschaulicht das Abstraktionskonzept in Java, bei dem wir eine Vorlage für eine Klasse (in diesem Fall Animal) definieren, die Implementierung bestimmter Methoden jedoch durch Unterklassen (in diesem Fall makeSound()) definieren lassen.

Schnittstelle

Schnittstellen sind eine weitere Methode zur Implementierung der Abstraktion in Java. Der Hauptunterschied besteht darin, dass wir durch die Verwendung von Schnittstellen eine 100-prozentige Abstraktion in Java-Klassen erreichen können. In Java oder einer anderen Sprache umfassen Schnittstellen sowohl Methoden als auch Variablen, verfügen jedoch nicht über einen Methodenkörper. Neben der Abstraktion können Schnittstellen auch zur Implementierung von Schnittstellen in Java verwendet werden.

Implementierung: Um eine zu implementieren Schnittstelle Wir verwenden das Schlüsselwort implementiert mit Klasse.

Java


relationale Algebra in RDBMS



schnelle Sorte
// Define an interface named Shape> interface> Shape {> >double> calculateArea();>// Abstract method for> >// calculating the area> }> > // Implement the interface in a class named Circle> class> Circle>implements> Shape {> >private> double> radius;> > >// Constructor for Circle> >public> Circle(>double> radius) {>this>.radius = radius; }> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea()> >{> >return> Math.PI * radius * radius;> >}> }> > // Implement the interface in a class named Rectangle> class> Rectangle>implements> Shape {> >private> double> length;> >private> double> width;> > >// Constructor for Rectangle> >public> Rectangle(>double> length,>double> width)> >{> >this>.length = length;> >this>.width = width;> >}> > >// Implementing the abstract method from the Shape> >// interface> >public> double> calculateArea() {>return> length * width; }> }> > // Main class to test the program> public> class> Main {> >public> static> void> main(String[] args)> >{> >// Creating instances of Circle and Rectangle> >Circle myCircle =>new> Circle(>5.0>);> >Rectangle myRectangle =>new> Rectangle(>4.0>,>6.0>);> > >// Calculating and printing the areas> >System.out.println(>'Area of Circle: '> >+ myCircle.calculateArea());> >System.out.println(>'Area of Rectangle: '> >+ myRectangle.calculateArea());> >}> }>

>

>

Ausgabe

Area of Circle: 78.53981633974483 Area of Rectangle: 24.0>

Vorteile der Abstraktion

Hier sind einige Vorteile der Abstraktion:

  1. Es reduziert die Komplexität der Betrachtung von Dingen.
  2. Vermeidet Codeduplizierung und erhöht die Wiederverwendbarkeit.
  3. Trägt dazu bei, die Sicherheit einer Anwendung oder eines Programms zu erhöhen, da dem Benutzer nur wesentliche Details bereitgestellt werden.
  4. Es verbessert die Wartbarkeit der Anwendung.
  5. Es verbessert die Modularität der Anwendung.
  6. Die Verbesserung wird sehr einfach sein, da wir, ohne Auswirkungen auf die Endbenutzer, jede Art von Änderungen in unserem internen System durchführen können.
  7. Verbessert die Wiederverwendbarkeit und Wartbarkeit des Codes.
  8. Versteckt Implementierungsdetails und zeigt nur relevante Informationen an.
  9. Bietet dem Benutzer eine klare und einfache Benutzeroberfläche.
  10. Erhöht die Sicherheit, indem der Zugriff auf interne Kursdetails verhindert wird.
  11. Unterstützt die Modularität, da komplexe Systeme in kleinere und besser verwaltbare Teile unterteilt werden können.
  12. Abstraktion bietet eine Möglichkeit, die Komplexität der Implementierungsdetails vor dem Benutzer zu verbergen und so das Verständnis und die Verwendung zu erleichtern.
  13. Abstraktion ermöglicht Flexibilität bei der Implementierung eines Programms, da Änderungen an den zugrunde liegenden Implementierungsdetails vorgenommen werden können, ohne die Benutzeroberfläche zu beeinträchtigen.
  14. Abstraktion ermöglicht Modularität und Trennung von Belangen, wodurch Code wartbarer und einfacher zu debuggen ist.

Nachteile der Abstraktion in Java

Hier sind die Hauptnachteile der Abstraktion in Java:

  1. Abstraktion kann es schwieriger machen, die Funktionsweise des Systems zu verstehen.
  2. Insbesondere bei unsachgemäßer Anwendung kann es zu einer erhöhten Komplexität führen.
  3. Dies kann die Flexibilität der Implementierung einschränken.
  4. Abstraktion kann den Code unnötig komplex machen, wenn sie nicht richtig eingesetzt wird, was zu mehr Zeit und Aufwand bei der Entwicklung führt.
  5. Abstraktion kann es schwieriger machen, Code zu debuggen und zu verstehen, insbesondere für diejenigen, die mit den Abstraktionsebenen und Implementierungsdetails nicht vertraut sind.
  6. Übermäßiger Einsatz der Abstraktion kann aufgrund der zusätzlichen Code- und Indirektionsebenen zu Leistungseinbußen führen.

Lesen Sie auch:

Abstraktion in Java – FAQs

Q1. Warum verwenden wir abstrakt?

Ein Hauptgrund, warum wir abstrakte Konzepte verwenden, ist die Vereinfachung der Komplexität. Stellen Sie sich vor, Sie versuchen, das gesamte Universum mit jedem einzelnen Atom und Stern zu erklären! Mit Abstracts können wir herauszoomen, die wichtigsten Ideen wie Schwerkraft und Energie erfassen und alles verstehen, ohne uns in den Details zu verlieren.

Hier sind einige weitere Gründe, warum wir Abstract in Java verwenden:

1. Abstraktion : Abstrakte Klassen werden verwendet, um eine generische Vorlage zu definieren, der andere Klassen folgen können. Sie definieren eine Reihe von Regeln und Richtlinien, denen ihre Unterklassen folgen müssen. Durch die Bereitstellung einer abstrakten Klasse können wir sicherstellen, dass die Klassen, die sie erweitern, eine konsistente Struktur und ein konsistentes Verhalten aufweisen. Dadurch wird der Code besser organisiert und einfacher zu warten.

2. Polymorphismus : Abstrakte Klassen und Methoden ermöglichen Polymorphismus in Java. Polymorphismus ist die Fähigkeit eines Objekts, viele Formen anzunehmen. Das bedeutet, dass eine Variable eines abstrakten Typs Objekte jeder konkreten Unterklasse dieser abstrakten Klasse enthalten kann. Dadurch wird der Code flexibler und an unterschiedliche Situationen anpassbar.

3. Frameworks und APIs: Java verfügt über zahlreiche Frameworks und APIs, die abstrakte Klassen verwenden. Durch die Verwendung abstrakter Klassen können Entwickler Zeit und Aufwand sparen, indem sie auf vorhandenem Code aufbauen und sich auf die für ihre Anwendungen spezifischen Aspekte konzentrieren.

Q2. Was ist der Unterschied zwischen Kapselung und Datenabstraktion?

Hier sind einige wichtige Unterschiede zwischen S/W-Kapselung und Abstraktion:

Verkapselung

Abstraktion

Bei der Kapselung werden Daten ausgeblendet (Informationen werden ausgeblendet). Abstraktion ist detailliertes Verstecken (Implementierungsverstecken).
Bei der Kapselung werden Daten und Methoden zusammengefasst, die auf die Daten einwirken Bei der Datenabstraktion geht es darum, die Schnittstelle dem Benutzer zugänglich zu machen und die Details der Implementierung zu verbergen
Gekapselte Klassen sind Java-Klassen, die das Ausblenden und Abstrahieren von Daten verfolgen Die Implementierung der Abstraktion erfolgt über abstrakte Klassen und Schnittstellen
Bei der Kapselung handelt es sich um einen Vorgang, der auf der Implementierungsebene stattfindet Abstraktion ist ein Prozess auf Designebene

Q3. Was ist ein reales Beispiel für Datenabstraktion?

Fernbedienung für den Fernseher ist ein hervorragendes Beispiel für Abstraktion aus dem wirklichen Leben. Es vereinfacht die Interaktion mit einem Fernseher, indem es die Komplexität hinter einfachen Tasten und Symbolen verbirgt, sodass es einfach ist, die technischen Details der Funktionsweise des Fernsehers zu verstehen.

Q4. Was ist der Unterschied zwischen abstrakten Klassen und Schnittstellen in Java?

Hier sind einige wichtige Unterschiede zwischen abstrakten Klassen und Schnittstellen in Java:

Abstrakte Klasse

Unterschied zwischen einem Tiger und einem Löwen

Schnittstellen

Abstrakte Klassen unterstützen abstrakte und nicht abstrakte Methoden Schnittstellenunterstützungen verfügen nur über abstrakte Methoden.
Unterstützt keine Mehrfachvererbung Unterstützt Mehrfachvererbung
Abstrakte Klassen können durch Java-Klassen und mehrere Schnittstellen erweitert werden Die Schnittstelle kann nur um eine Java-Schnittstelle erweitert werden.
Abstrakte Klassenmitglieder in Java können privat, geschützt usw. sein. Schnittstellen sind standardmäßig öffentlich.

Beispiel:

öffentliche abstrakte Klasse Vechicle{
öffentliches abstraktes void-Laufwerk()
}

Beispiel:

öffentliche Schnittstelle Tier{
void speak();
}