Abstrakte Basisklasse

Abstrakte Klasse ist ein Begriff aus der objektorientierten Programmierung. Er bezeichnet eine Klasse, die abstrakte Methoden (Methoden ohne „Rumpf“, also nur die Signatur, keine Implementierung) enthalten kann und von der daher keine Objekte instantiiert werden können.

Interfaces (Schnittstellen) sind rein abstrakte Klassen, die nur Methodensignaturen deklarieren. Eine Klasse gilt dagegen bereits als abstrakt, sobald eine Methode vorhanden ist, die durch eine erbende Klasse implementiert werden muss. In einer abstrakten Klasse können also auch Variablen definiert und Methoden implementiert werden.

Als Basisklassen in einer Klassenhierarchie können abstrakte Klassen grundlegende Eigenschaften ihrer Unterklassen festlegen, ohne diese bereits konkret zu implementieren. Leitet eine Klasse von einer abstrakten Klasse ab, müssen alle vererbten abstrakten Methoden überschrieben und implementiert werden, damit die erbende Klasse selbst nicht abstrakt ist.

Abstrakte Klassen können nicht selbst instantiiert werden, nur Spezialisierungen von diesen. Dennoch können Teile des Programmcodes allgemein gehalten werden und nur unter Verwendung der Eigenschaften des abstrakten Basistyps implementiert werden. Durch Polymorphie kommen dabei die speziellen Implementierungen der nicht abstrakten Unterklassen zur Ausführung.

Inhaltsverzeichnis

Beispiele

Geometrie

Zweidimensionale geometrische Figuren haben gemeinsam, dass sie über eine Fläche verfügen. Je nach Figur wird diese Fläche aber unterschiedlich berechnet.

Wird eine abstrakte Basisklasse namens "GeometrischeFigur" angelegt, kann mit einem Methodenrumpf für eine Funktion "berechneFlaeche" festgelegt werden, dass alle Unterklassen eine entsprechende Methode implementieren müssen. Zum Beispiel wird eine Klasse "Rechteck" die Länge mit der Breite multiplizieren, in einer Klasse "Rechtwinkliges Dreieck" wird die Länge mit der Höhe multipliziert und dann halbiert.

Durch die Klassenhierarchie mit einer abstrakten Basisklasse hat man sich nun die Möglichkeit eröffnet, andernorts Funktionen zu erstellen, die ein Objekt vom Typ "GeometrischeFigur" entgegennehmen und auf ihm die Funktion "berechneFlaeche" aufrufen, völlig unabhängig davon, ob es sich um Dreiecke, Rechtecke oder Kreise handelt. Die Funktionen sind somit für sämtliche geometrische Figuren nutzbar und weisen einen hohen Grad an Flexibilität und Wiederverwendbarkeit auf.

Programmbeispiel

Die folgenden Beispiele sind in der Programmiersprache Java geschrieben. Als Datentyp wird eine Gleitkommazahl double verwendet.

A. Die Definition des Interfaces:

public interface GeometrischeFigur {
 
    public abstract double berechneFlaeche();
 
}

B. Kreation einer Basisklasse für Höhen- und Längenangabe:

public abstract class BasisFigur implements GeometrischeFigur {
 
    double laenge;
    double hoehe;
 
    public BasisFigur(double laenge, double hoehe) {
        this.laenge = laenge;
        this.hoehe = hoehe;
    }
 
    public double getLaenge() {
        return laenge;
    }
 
    public void setLaenge(double laenge) {
        this.laenge = laenge;
    }
 
    public double getHoehe() {
        return hoehe;
    }
 
    public void setHoehe(double hoehe) {
        this.hoehe = hoehe;
    }
}

C. Beispielhafte Implementierung einer konkreten Figur Rechteck:

public class Rechteck extends BasisFigur {
 
    public Rechteck(double laenge, double hoehe) {
        super(laenge, hoehe);
    }
 
    @Override
    public double berechneFlaeche() {
        return getLaenge() * getHoehe();
    }
}

D. Beispielhafte Implementierung einer weiteren konkreten Figur rechtwinkliges Dreieck:

public class RechtwinkligesDreieck extends BasisFigur {
 
    public RechtwinkligesDreieck(double laenge, double hoehe) {
        super(laenge, hoehe);
    }
 
    @Override
    public double berechneFlaeche() {
        return ( getLaenge()*getHoehe() ) / 2;
    }
}


E. Eine Beispielklasse zur erweiterten Verwendung, welche Operationen auf Basis des Interfaces ausführt:

public class GeometrischerRechner {
 
    public static double berechneGesamtFlaeche(GeometrischeFigur[] f) {
        double ergebnis = 0;
        for( GeometrischeFigur figur : f ) {
            ergebnis += figur.berechneFlaeche();
        }
        return ergebnis;
    }
}

F. Beispiel einer Ausführung liefert die folgende Klasse:

public class GeometrischesFigurenBeispiel {
 
    public static void main(String[] args) {
        // 1.1. Erstellung einzelner Objekte
        GeometrischeFigur rechteck = new Rechteck(10,20);
        GeometrischeFigur dreieck = new RechtwinkligesDreieck(10,20);
 
        // 1.2. Separate Berechnung der Flächen 
        System.out.println("Rechtecksfläche: " + 
                           rechteck.berechneFlaeche() );
        System.out.println("Dreiecksfläche: " + 
                           dreieck.berechneFlaeche() );
 
        // 2.1. Parameter für die Übergabe an den 'GeometrischerRechner'
        GeometrischeFigur[] figuren = new GeometrischeFigur[]{
                                          rechteck, dreieck};
 
        // 2.2. Berechnung und Ausgabe der Gesamtfläche
        System.out.println("Gesamtfläche: " + 
               GeometrischerRechner.berechneGesamtFlaeche( figuren ) );
        }
}

G. Wird dieses Programm kompiliert und ausgeführt, so erscheint auf in der Konsole die folgende Ausgabe:

 Rechtecksfläche: 200.0
 Dreiecksfläche: 100.0
 Gesamtfläche: 300.0

Datenbank-Zugriff

Ein klassisches Beispiel für die Anwendung abstrakter Klassen kommt aus dem Bereich der Datenbank-Applikationen. Sämtliche Methoden für den Zugriff auf die Datenbank werden in einer abstrakten Klasse definiert. Für jeden Datenbank-Typen kann man nun eine konkrete Klasse programmieren, die alle geerbten Zugriffsmethoden implementiert. In der Applikation muss nur an einer einzigen Stelle die konkret implementierte Klasse bekannt sein - dort wird das Objekt erzeugt. Anschließend wird es im gesamten restlichen Programmcode als Objekt vom Typ der abstrakten Klasse behandelt.

Die konkrete Klasse kann als Eigenschaft, einer sogenannten Property, in einer Datei außerhalb des Programmcodes angegeben werden. So ist kein erneutes Kompilieren nach ausgetauschter Datenbank nötig und es entsteht eine hohe Wiederverwendbarkeit der Applikation.


Wikimedia Foundation.

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Abstrakte Klasse — Eine abstrakte Klasse bezeichnet in der objektorientierten Programmierung eine spezielle Klasse, die mindestens eine, aber auch mehrere abstrakte Methoden enthalten (also Methoden ohne „Rumpf“ (Implementierung) nur mit der Signatur). Per… …   Deutsch Wikipedia

  • Basisklasse — Als Basisklasse,[1][2][3] Oberklasse,[4][5][6] Superklasse[1][5] …   Deutsch Wikipedia

  • Aktivitätsträger — Ein Thread (auch: Aktivitätsträger oder leichtgewichtiger Prozess, vereinzelt auch: Faden) bezeichnet in der Informatik einen Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms. Ein Thread ist Teil eines… …   Deutsch Wikipedia

  • Faden (Informatik) — Ein Thread (auch: Aktivitätsträger oder leichtgewichtiger Prozess, vereinzelt auch: Faden) bezeichnet in der Informatik einen Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms. Ein Thread ist Teil eines… …   Deutsch Wikipedia

  • Kernel Thread — Ein Thread (auch: Aktivitätsträger oder leichtgewichtiger Prozess, vereinzelt auch: Faden) bezeichnet in der Informatik einen Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms. Ein Thread ist Teil eines… …   Deutsch Wikipedia

  • Thread (Informatik) — Ein Thread (auch: Aktivitätsträger oder leichtgewichtiger Prozess) bezeichnet in der Informatik einen Ausführungsstrang oder eine Ausführungsreihenfolge in der Abarbeitung eines Programms. Ein Thread ist Teil eines Prozesses. Man unterscheidet… …   Deutsch Wikipedia

  • ABC — bezieht sich auf: ABC Straße, eine Straße in der Hamburger Innenstadt ABC Ausrüstung, die Basis Tauchausrüstung zum Sporttauchen und Schnorcheln ABC Analyse, ein betriebswirtschaftliches Analyseverfahren ABC Studio audiovisuelle… …   Deutsch Wikipedia

  • Is-a — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • Vererbung (objektorientierte Programmierung) — Vererbung dargestellt mittels UML. Die abgeleitete Klasse hat die Attribute x und y und verfügt über die Methoden a und b (im UML Sprachgebrauch Operationen a und b). Die Vererbung (engl. Inheritance) ist eines der grundlegenden Konzepte der… …   Deutsch Wikipedia

  • J2SE — Die Java Platform, Standard Edition oder kurz Java SE (deutsch „Java Plattform, Standardausgabe“ bis Version 5.0 „Java 2 Platform, Standard Edition“, J2SE [ˌdʒeɪˈtuː ˌɛsˈiː]) ist eine Sammlung von Java APIs. Die Java SE dient als Grundlage für… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”