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 erstellst du deine ersten Java Klassen mit Eclipse

Java Klassen sind Baupläne für Java Objekte. Und da Java eine objektorientierte Programmiersprache ist, sind Java Klassen somit ein elementarer Bestandteil. In diesem Beitrag möchte ich dir zeigen, wie du eine Java Klasse in Eclipse erstellen kannst. Ich möchte dir außerdem zeigen, was physikalisch in deinem Projekt passiert. Ganz zum Schluss zeige ich dir noch, […]

So verwendest du den Java Oder Operator

Java Oder Operator

Kennst du das auch aus deiner Schulzeit? Du schreibst eine Klassenarbeit in irgendeinem Fach. Nehmen wir einfach mal an – Mathe. Jetzt bist gerade fertig mit deiner Arbeit. Und zu Hause wirst du gefragt: „Und wie lief es?“ Du antwortet:“ Ganz gut. Es wird bestimmt eine Eins oder eine Zwei.“ Drei oder vier Tage später […]

Du bekommst was du vereinbarst – Die Rückgabewerte von Java Methoden

Java Methoden Rückgabetypen

Was du vereinbarst, das bekommst du zurück. Ach wäre es schön, wenn alles im Leben so funktionieren würde. Aber zum Glück funktioniert dieses Prinzip bei deinen Java Methoden. Denn du kannst den Rückgabetypen im Methodenkopf vereinbaren. Doch bevor ich dir zeige, wie du den Rückgabetypen anlegen kannst…. Lass mich dir zeigen, wofür du den Kram […]

Java Übung 11 – Java Objekte in Java Methoden übergeben

Java Übung Java Methoden Objekte

In dieser Java Übung möchte ich dir zeigen, dass du auch in Klassenmethoden auf Objekte und deren Instanzvariablen zugreifen kannst. Schau dir dazu einmal diesen Java Code an. public class Umwandlung { private int x; public int getX() { // getter Methode return x; } public void setX(int x) { // setter Methode this.x = […]

So nutzt du das Java Keyword public

Java Keyword public

Java Programme bestehen aus Java Klassen. Und der Zugriff auf eine Java Klasse sollte nach außen immer gewährleistet sein. Was bedeutet das? Du solltest in jeder Klasse die Möglichkeit haben, ein Objekt einer anderen Klasse anzulegen. Gerade durch diese Möglichkeit macht doch das ganze Klassenkonstrukt erst Sinn.

Die drei Bestandteile aller Java Klassen

Java Klassen Bestandteile

Java ist eine objektorientierte Programmiersprache. Was heißt das? Ja… Anscheinend hat es etwas mit Objekten zu tun. Also was ist ein Objekt? Ein Objekt ist ein bestimmtes Konstrukt im Programm. Bauen wir ein Spiel. Ein Grafik-Adventure. Du kennst das. Ein Held wird in eine bestimmte Spielwelt hinein gesteckt. Der Held muss mit bestimmten Personen sprechen. […]

So kannst du in den Java Klassen Attribute anlegen

Java Klassen Attribute

Die bisherigen Java Klassen in unserem Einführungsbeispiel besitzen noch keine Attribute. Das ändern wir und legen diese jetzt an. In diesem Beitrag erfährst du: Warum Variablen in deinen Klassen eine entscheidende Rolle spielen. Was es bedeutet eine Variable zu deklarieren. Wo du Attribute in den Java Klassen anlegen darfst und wo nicht. Wie du durch […]