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

So richtest du einen Schreibschutz für deine Java Variablen ein

Stell dir vor: Du hast erfolgreich dein erstes Programm für die Personalabteilung aufgesetzt. Du hast deine ersten 1000 Datensätze schön sauber angelegt. Und nun kommt dein Kollege und überschreibt die Vornamen der ersten 100 Mitarbeitern. Na schöne Sch…. 🙂 Wie kann das passieren? Wie kann man das verhindern? Du brauchst eigentlich nur deine Java Variablen […]

Heap & Stack – Die Speicherverwaltung in Java

Java Speicher

Java nutzt eine interne Speicherverwaltung. Eigentlich sind es mehrere. Uns interessieren lediglich zwei. Da das Thema Speicherverwaltung recht umfangreich ist, habe ich dir im Folgenden einmal die wichtigsten Artikel zusammengestellt. Die zwei Speichersysteme von Java Java Methoden werden auf dem Stack gestapelt. Der Speicher auf dem Java Methoden zu Hause sind, nennt sich Stack Speicher. […]

Nutze das Java Switch Case Statement für komplexe Verzweigungen

Java Switch case

Java switch case statement – was ist das? Wozu brauchst du das? Lass mich anders beginnen… 🙂 In einen meiner früheren Beiträge habe ich schon einmal über bedingte Anweisungen oder Zuweisungen geschrieben. Diese if und else Konstrukte funktionieren eigentlich ganz gut. Aber was ist, wenn du mehrere Parameter abfangen möchtest. Okay ein Beispiel…

Lexikalik, Syntax und Semantik in Programmiersprachen

Programmiersprachen Semantik Programmiersprachen Syntax Programmiersprachen Lexikalik Java

Java ist eine Programmiersprache. Und wie jede andere Programmiersprache ist auch Java, lediglich eine künstliche Sprache.   Normalerweise bieten künstliche Projekte immer jede Menge Spielraum für Eigenkreationen. Bei der Programmierung ist dies nicht ganz so. Denn Programmiersprachen sind auch immer sehr exakt.   Jede Programmiersprache und auch jede gesprochene Sprache folgt immer einer Abstraktionsreihenfolge, welche […]

Den Java Vererbungsbaum nach dem Ist-Es-Prinzip richtig entwerfen

Java Vererbungsbaum

Vererbungsbaum in Java – klingt erstmal komisch. Dennoch wird dies so bezeichnet. Gemeint sind damit – die einzelnen Hierarchiestufen oder Vererbungsebenen – von der Superklasse bis runter zu den Kindklassen. Wie sieht das nun konkret aus? Vererbung bedeutet: Du definierst einen allgemeinen Typen – zB. Möbel Und dann implementierst du eine Unterklasse, welche die Oberklasse […]

3 Möglichkeiten um Vererbung von Java Klassen zu verhindern, zu verbieten oder ausschließen

Java Vererbung verhindern

Die ganze Java Vererbung für bestimmte Klassen ausschließen bzw. verhindern oder verbieten. Was soll das? Für bestimmte Java Klassen soll die Vererbung ausgeschlossen werden. Es soll also verhindert werden, dass Elternklassen – Kindklassen bekommen können. Klingt ein bisschen wie Verhütung, oder? Denn wie auch im echten Leben, können Kinder zu kleinen Tyrannen werden. Sie bedienen […]

So kannst du deine Java Methoden ausführen

Java Methoden ausführen

Du hast die ersten Java Methoden erstellt. Doch wie greifst du jetzt auf diese zu? Wie kannst du diese Methoden in einer anderen Klassen aufrufen? Welcher Unterschied, hinsichtlich des Methodenaufrufes, besteht eigentlich zwischen deinen Java Methoden? Diese Fragen möchte ich gern in diesem Beitrag beantworten. Gehen wir dazu in den Garten und schauen uns Blumen […]

So kannst du deine Eclipse Oberfläche anpassen

Eclipse anpassen

In diesem Beitrag möchte ich dir zwei ganz nette Features von Eclipse vorstellen. Es geht um Views und um Perspektiven. Wie du schon weißt, besteht Eclipse aus einer grafischen Oberfläche. Und in dieser Oberfläche stehen dir verschiedene Views zur Verfügung. Was ist so ein View?

So lassen sich aus Java Klassen Instanzen erstellen

Java Klassen Instanzen erstellen

Lass uns jetzt aus den Java Klassen heraus Objekte anlegen. Im Einführungsbeispiel hast du bereits gelernt, wie du: Instanzvariablen bzw. Attribute anlegst Wie du aus einer normalen Java Klasse eine Programmstart Klasse machst In diesem Artikel erfährst du: Was Objekte bzw. Instanzen sind. Wie sich Objekte zusammensetzen. Wo und wie du Instanzen aus Java Klassen […]

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 […]