Skip to main content

Ohne Abstraktion ergibt Java Polymorphie wenig Sinn

Kennst du den Film Matrix?
Denn kennst du vielleicht auch die Botschaft, welche der Protagonist am Anfang des Filmes erhält.

„Folge dem weißen Kaninchen.“

Und so ähnlich ist es jetzt auch in diesem Beitrag.

„Wir dringen immer tiefer in den Kaninchenbau ein.“ 🙂

Ganz so wie im Film wird es nicht.
Aber bevor wir mit Java Polymorphie beginnen, lass mich dir ein Modell zeigen – Ein Informationsmodell.
Das Modell heißt Abstraktion.

Dieses Abstraktionsprinzip ist wichtig.
Denn ohne dieses Prinzip ist die ganze Polymorphie komplett wertlos.
Und deshalb ist es umso wichtiger, zuvor die Abstraktion zu verstehen und dann mit diesem Verständnis an die Umsetzung zu gehen.

Was heißt jetzt Abstraktion?
Was du siehst, hörst, schmeckst und denkst ist niemals vollkommen.
Stattdessen wird alles immer auf etwas Wesentliches reduziert.

Ein Beispiel:
Du gehst einkaufen.
Also läufst du so ganz smart durch die Regale und suchst beispielsweise Süßigkeiten – deinen Lieblingsschokoriegel.

Java Polymorphie Abstraktion Beispiel

Jetzt läufst du am Obst- und Gemüsestand vorbei.
Was passiert hier?
Wenn du Süßigkeiten suchst, nimmst du das Obst – lediglich als Obst wahr.
Mehr nicht.

Java-Polymorphie-Abstraktion-Informationen-Ausblenden

Du erkennst nicht, dass dort 35 Apfelsinen, 10 Bündel Bohnen und 26 Bananen liegen.
Das bedeutet, du blendest bewusst Informationen aus.

Jetzt kommst du bei deinen Süßigkeiten an.
Und auch hier existiert eine Riesenauswahl.
Hier liegen Schokoladentafeln, Schokoriegel und Bonbons.

Java Abstraktion Polymorphie Beispiel

Du nimmst dir deinen Lieblingsschokoriegel aus dem Regal und du interessierst dich nicht dafür, dass dort noch 32 andere liegen.
Dich interessierst nicht, was rechts und links neben deinem Lieblingsriegel liegt.
Du blendest somit bewusst wieder Informationen aus.

Und schließlich…
Wenn dein Schokoriegel in dein Denkmodell passt – also so aussieht wie immer – dann nimmst du ihn, ohne Nachzudenken mit.

Aber jetzt kommst Dicke.
Angenommen dein Riegel ist auf einmal kleiner als sonst.
Dann und erst dann interessiert dich die Größe.

Java-Abstraktion-Beispiel-Informationen-einblenden

Was bedeutet das jetzt für dich als Java Programmierer?

Abstraktion hat zur Folge, dass Informationen ganz bewusst ausgeblendet werden können.

Ein zweites Beispiel…

Abstraktion bei der Partnersuche.

Also ich steh auf Frauen.
Du vielleicht auf Männer.
Es spielt keine Rolle.

Angenommen du gehst durch die Stadt und setzt dich in dein Lieblingscaffee.
Auf einmal entdeckst du eine Gruppe des anderen Geschlechts.

Java-Polymorphie-Abstraktion-Objekte

Im Falle, dass du in einer glücklichen Beziehung steckst – nimmst du diese Gruppe unbewusst zwar war.
Du zählst aber nicht durch und du begutachtest auch nicht.
Und vor allem schätzt du deine Chancen beim anderen Geschlecht nicht ein.

In einem Java Programm könntest du also eine Klasse „Mann“ anlegen.
Und dann ein Objekt der Klasse Mann erzeugen, welcher – reden, gehen, trinken, lächeln und beobachten könnte.

Java-Polymorphie-Abstraktion-Klasse-Mann

In einer zweiten Klasse „Frau“ legst du die Frauen an.
Und diese unterhalten sich ebenfalls und diese können natürlich auch gehen, lächeln, trinken usw.
Java-Polymorphie-Abstraktion-Klasse-Frau

Aber halt…
Da beide Klassen schon die gleichen Methoden haben, bietet es sich an – dies vorerst abstrakt bzw. allgemein zu halten.
Also der abstraktere Typ wäre dann die Klasse „Mensch.“

Und die Klasse Frau und Mann könnten dann die allgemeine Klasse Mensch erweitern.

  • Der Mann als Protagonist unseres kleinen Java-Programmes könnte zum Beispiel die Eigenschaft bzw. Instanzvariable „schüchtern“ erhalten.
  • Die Frau bekommt typische Frau-Methoden, wie „kichern“ oder „haareZurueckwerfen“.

Java Polymorphie Klassen erweitern

Zurück zur Ausgangssituation.
Hier nochmal ganz kurz die Lage:

  • Du sitzt im Cafe und trinkst deinen Kaffee.
  • Es kommen mehrere Frauen ins Bild und werden von dir nur unterbewusst wahrgenommen.
  • Du scheinst in einer glücklichen Beziehung zu stecken und hast kein weiteres Interesse an den Frauen.

Wenn du dir die Ausgangslage so anschaust – wie könnte die Umsetzung in Java aussehen?
Ganz konkret….
Solltest du Frauen- und Männerobjekte anlegen oder vielleicht nur Mensch-Objekte?

Na- was denkst du?

  • Eigentlich reichen mehrere Menschobjekte.
    Denn die Frauen werden von dir nur als Menschen wahrgenommen.
  • Du interessiert dich nicht für die ganzen Frauen-Eigenschaften.
    Die typischen „Menschvariablen“ und – methoden, wie reden, trinken, beobachten – reichen jetzt völlig aus.
  • Auch du, als Mann-Objekt brauchst noch keine anderen Methoden und Variablen.

Machen wir aus den Menschen einen Mann.

Die selbe Ausgangslage.
Aber diesmal interessierst du dich für das andere Geschlecht.

Und auf einmal spielen die Frauenmethoden eine Rolle.
Du achtest jetzt auf:

  • das Kichern der Frauen
  • und darauf, wie sie die Haare zurückwerfen
  • und auch die Hübsch-Variable spielt eine Rolle.

Und auch bei dir als Mann hat sich Einiges verändert.
Jetzt kommt es darauf an – ob du schüchtern bist oder eben nicht.

Da jetzt gewisse Informationen wichtig und brisant werden, legst du für diesen speziellen Rahmen – auch speziellere Mann- und Frauobjekte an.

Jetzt braucht der Mann – Platzhirschqualitäten.

Also schaffen wir noch eine dritte Ausgangslage.

Jetzt wird es spannend, denn du bist auf Partnersuche. 🙂
Also beginnst du damit die Damen zu vergleichen.
Du beginnst abzuschätzen, welche dir gefällt.
Da die Partnersuche auf einmal wichtig für dich ist, ziehst du ganz automatisch weitere Informationen heran.

Du beschließt eine der Damen anzusprechen.
Bisher hat dein Gang und dein Auftreten dich nicht interessiert.
Jetzt schon.
Die Informationen zu deinem persönlichen Erscheinungsbild werden somit brisant.

Java Abstraktion Polymorphie Methoden

Da du jetzt die Rolle des „Platzhirsches“ einnehmen möchtest, brauchst du auch „Platzhirsch-Auftreten“.

In einem Java-Programm, welche bisher nur die Klassen Mensch, Frau und Mann hätte, bräuchtest du jetzt eine weitere abgeleitete Klasse von Mann.
Und in dieser noch spezielleren Klasse könntest du die „Gehen-Methode“ der Klasse Mann überschreiben.

Java-Polymorphie-Klassen-Erweiterung

Jetzt sind speziellere Methoden gefragt.
Also rufst du erst zu diesem Zeitpunkt eine speziellere Gehen-Methode – am spezielleren Platzhirsch-Objekt auf.
Und diese bewirkt: „Kopf nach oben, leichter Schritt und Brust raus.“

Beim lockeren Hinüberschlenkern hörst du auf einmal deinen Herzschlag.
Dein Körper sendet dir ganz plötzlich Informationen, welche bis hierher nur versteckt waren.
Somit bekommt die Platzhirschklasse eine weitere Variable – den Herzschlag.

Java Polymorphie Klassen erweitern Variablen und Methoden

Die letzten Meter zwischen dir und deinem Traumpartner – deinem Zielobjekt.
Java-Polymorphie-Ich-mach-was-klar

Jetzt setzt du dein „Heute-mach-ich-was-klar-Lächeln“ auf.
Und ab jetzt kann nichts mehr schief gehen. 🙂

Lass uns beide Abstraktionsbeispiele einmal analysieren.

Also warum blendet unser Gehirn bewusst Informationen aus.

Abstraktion schützt dich vor Beurteilungen.

Wir neigen dazu jede Information zu bewerten.
Wir stecken alles in eine Schublade bzw. Kategorie.

  • Entweder ist Jemand – Gut oder böse
  • Oder eine Sache ist immer entweder Schlecht oder gut
  • Oder das Beispiel: Frisches Obst oder gelagertes Obst
  • Hübsche Menschen oder weniger Hübsche

Wenn wir stets und ständig jede Information richtig wahrnehmen würden, würden wir Dinge immer beurteilen.
Wir würden also immer Alles und Jeden bewerten.

Und in Java.

  • Wir würden alles mit einen Wert belegen.
  • Instanzvariablen könnten verändert werden.
  • Zur Zeit unnütze Variablen würden Werte zugewiesen bekommen.

Da du durch Polymorphie bewusst unnütze Dinge ausblenden bzw. verbergen kannst, greift hier das Abstraktionskonzept der objektorientierten Programmierung. – Gleich mehr dazu.

Abstraktion sorgt für eine gute Performance.

Nimm mal an….
Du würdest beim Einkaufen alle Informationen zur Verfügung haben.
Also weißt du dann:

  • Wie viele Bananen oder Äpfel im Obststand liegen
  • Du kennst die Länge jeder einzelnen Banane.
  • Und du kennst auch die Anzahl der braunen Flecken auf der gelben Außenschale.
    Dazu noch die Größe der Verfärbungen.
  • Außerdem kennst du den Geruch der Bananen.
  • usw.

Glaub mir.
Mit so viel unnützen Informationen würdest du beim Einkaufen niemals zur Kasse kommen.
Jede unnütze Information hält dich auf und somit von deiner Schokoriegel-Mission ab.

Abstraktion sorgt dafür, dass nur die wesentlichen Informationen eines Objektes angezeigt werden.
Dadurch kommt es für den Programmierer zu weniger Verwirrung und besser lesbaren Code.

Abstraktion belässt die Dinge so einfach wie möglich.

Und das ist toll.
Einer der ersten Artikel in meinem Javablog, handelte von Instanzvariablen.
In diesem Artikel zeigte ich dir, wie du Instanzvariablen anlegst.

Dabei wurde eine String-Variable und eine Integervariable angelegt.
In diesem Artikel verwies ich lediglich darauf, dass es sich bei Strings und Integer um Datentypen für Zeichenketten und Zahlen handelt.
Mehr sagte ich zu den Datentypen nicht.

Wieso nicht?
Jetzt stell dir vor:

  • Ich hätte dir gezeigt, dass Strings in einem Pool landen.
  • Und das Strings auf zwei unterschiedliche Arten angelegt werden können.
  • Dies hätte Auswirkungen auf die Vergleichsmöglichkeiten von Strings.
  • Und und und……

Java-Abstraktion-Allgemein-halten-Polymorphie

Ist klar oder?
Zu viele „Aber-Und-Das-Gilt-Es-Noch-Zu-Beachten-Schilder“ führen immer zur Abschwächung der eigentlichen Information.

Abstraktion schützt die Objekte nach außen.

Wir haben über die Partnersuche und das „Heute-mach-ich-was-klar-Lächeln“ gesprochen.
Wenn das dein Standardlächeln bzw. dein Standardblick wäre – dann würdest du jeden so anschauen.

  • Auch deine Mutter oder deinen Vater
  • Deine Geschwister und Freunde
  • Deine Kinder und einfach jeden den du siehst.

Echt blöd oder?

Java-Polymorphie-Methoden-überschreiben-Abstraktion

Abstraktion schützt dich und auch deine Objekte – ein Stück weit nach außen.

Indem du die spezielleren Objekte nur dann erzeugst, wenn der spezielle Rahmen es erlaubt – können keine unerwarteten Methodenaufrufe oder Attributsänderungen auftreten.

So genug über Abstraktion geredet.
Kommen wir zur Polymorphie und Java.

Das Zusammenspiel zwischen Java Polymorphie und Abstraktion.

Java Polymorphie bedeutet, dass du Objekte aus spezielleren Klassen anlegen, aber dafür abstraktere Datentypen verwenden kannst.

Wie du dies konkret umsetzt – habe ich dir schon in einem anderen Artikel ausführlich gezeigt.

Wichtig ist, dass du das Abstraktionsprinzip bei deiner Software Entwicklung mit heranziehst.

Und deshalb….

„Benutze immer den abstraktesten bzw. allgemeinsten Datentypen mit dem du dein Vorhaben umsetzen kannst.
Ignoriere bzw. vermeide weitestgehend speziellere Datentypen.“

Dadurch bleibt dein Code schön allgemein und auch anpassungsfähig.
Wir haben dies bei der Partnersuche ja schon einmal durchgespielt.

Somit blendest du die unwichtigen Informationen aus und nutzt nur Datentypen, welche konkret zur Umsetzung deiner Projekte bzw. Module beitragen.
Erst dann, wenn es wirklich konkret wird – wenn es um Bananen oder Platzhirsche geht, kannst du speziellere Datentypen einführen.

Zusammenfassung:

  • Java Polymorphie bedeutet, dass du Objekte anlegen und dafür allgemeinere Datentypen nutzen kannst.
  • Das Abstraktionsprinzip besagt, dass niemals Informationsvollkommenheit vorherrscht.
  • Java Polymorphismus im Zusammenspiel mit Abstraktion bedeutet dann, dass du deine Objekte immer so allgemein wie nur möglich hältst.
    Dadurch schaffst du besseren, leicht lesbaren und leichter wartbaren Code.

Ähnliche Beiträge

Die vier wichtigen Phasen um Java Objekte zu erstellen

Java Objekte anlegen

Wie werden aus deinen Java Klassen richtig nützliche Java Objekte? Das ganze läuft in vier Phasen ab. Und diese Phasen möchte ich dir in diesem Beitrag vorstellen. Ob das nützlich ist? Schau dir das Bild an. Am Ende dieses Beitrages wirst du wissen, warum Eclipse dir hier eine Fehlermeldung gibt und wie du dieses Problem […]

Die sechs Bestandteile von Java Methoden

Java Methoden Bestandteile

Java Methoden hauchen deinem Java Programm Leben ein. Ohne eine Methode würde deine Java Klasse ein starres Konstrukt sein. Deine Objekte hätten Eigenschaften. Aber sie könnten nichts machen. Und das wäre eine trostlose Welt. Java Methoden sorgen also dafür, dass Objekte interagieren. Methoden bestehen aus bestimmten Bausteinen. Und diese Bausteine bestimmen, was die Methode darf […]

So lassen sich Java Arrays kopieren

Java Arrays kopieren

Java Arrays kopieren oder klonen…. Was heißt das eigentlich? Eine Kopie ist eine Reproduktion bzw. die Nachbildung eines Originals. Somit ist jede Fotographie – die Abbildung einer bestimmten optischen Wirklichkeit, zu einem festen Zeitpunkt. Die Kopie einer Buchseite ist das optische Abbild dieser spezifischen Buchseite – auch zu einem festen Zeitpunkt. Wichtig in diesem Zusammenhang […]

Nutze das Keyword this für deine Java Konstruktoren

Java konstruktoren this

Es ist gemein. Wahrscheinlich hast den Beitrag zu den lokalen Variablen gelesen. Vielleicht hast du auch den Artikeln zum Anlegen und Überladen von Java Konstruktoren gelesen. Und wenn du die beschriebene Inhalte selbst ausprobiert hast…… Dann hast du dir wahrscheinlich sehr viele lokale Variablennamen für die Parameterliste ausdenken müssen.

So nutzt du Methoden aus der Java String Klasse

Java Strings Methoden

In einen der letzten Beiträge haben wir darüber gesprochen, dass Java Strings – Objekte sind. Dass Strings in allen Programmen äußerst häufig vorkommen Und dass sich deshalb Referenzvariablen String-Objekte im String Pool teilen. Das Konzept hinter dem String-Pool ist die Teilung der Ressourcen. Und das bedeutet: Weniger Objekte – mehr Speicher Mehr Speicher – bessere […]

Java lernen von Kopf bis Fuß

Wenn du Java lernen möchtest, kannst du an meinem kostenlosen Java Kurs teilnehmen. Aber manch Einer hätte gern eine zweite Meinung. Und da bieten sich natürlich Java Bücher an. Eines dieser Java Bücher möchte ich dir jetzt vorstellen. Dieses Buch nennt sich „Java von Kopf bis Fuß“. Was kannst du von diesem Buch erwarten? Also […]

Java Übung 19 – Zähle die Kommastellen

Java Übung Kommastellen Zählen

In dieser Java Übung möchte ich, dass du eine Methode zum Zählen von Kommastellen schreibst. Lege dazu eine Klasse „KommaZahl“ an. Diese Klasse enthält die statische Methode „zaehleKommaStellen“, welche eine Kommazahl als übergebenen Parameter erwartet.

Java lernen durch ständiges Testen – Nutze die Testumgebung von Eclipse

Java Programmierung lernen

Probieren geht über studieren Wenn du wirklich Java Programmierung lernen möchtest, dann solltest du Java nicht aus einem Buch lernen. Du solltest auch nicht strikt von dieser oder anderen Webseiten lernen. Etwas wirklich zu lernen, setzt die Bereitschaft voraus, etwas zu probieren. Denn nur durch eigenes Probieren gelangst du zum Wesentlichen. Durch Probieren wirst du […]

Java Vererbung – Die Hierarchien richtig planen

Java Vererbung Hierarchien

Java Vererbung hat nichts mit Biologie zu tun. Die Genetik besagt, dass bestimmte Merkmalsausprägungen von den Eltern auf die Kinder übergehen. Solche Merkmalsausprägungen sind: die Hautfarbe die Haarfarbe die spezifische Größe und weitere körperliche Merkmale. Und in Java – was ist da Vererbung? Lass es uns herausfinden. Was erwartet dich in diesem Beitrag? Zuerst schauen […]

Java Polymorphie – besserer Code und mehr Möglichkeiten

Java Polymorphie Vorteile

Polymorphie ist das Herzstück jeder objektorientierten Sprache. Nicht nur in Java – auch in Python, Javascript und in anderen Sprachen. Aber was bedeutet Polymorphie eigentlich? Polymorphie oder auch Polymorphismus genannt, kommt aus dem Griechischen. Es bedeutet Vielgestaltigkeit. Etwas freier übersetzt, kannst du es auch als Facettenreichtum bezeichnen. Im Grunde genommen zielt die ganze Java Vererbung […]

So kannst du Java installieren

Java installieren

Bevor du loslegst und deine ersten Java Programme schreibst, benötigst du die entsprechende Arbeitsumgebung. Du solltest also Java installieren. Und diese Arbeitsumgebung beinhaltet dann Bibliotheken für die einzelnen Java-Standard-Klassen, Dateien um deine Programme auszuführen. Dateien um deine Programme zu packen, Logische Verzeichnisstrukturen