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

Nutze die Fernbedienung für deine Java Objekte

Auf Java Objekte greifst du mit einer Art Fernsteuerung zu. Diese bezeichnet man als Referenz oder als Verweis. Und diese Referenzvariablen möchte ich dir jetzt einmal vorstellen. Doch bevor wir loslegen, lass mich noch ein paar Dinge loswerden. 🙂 Ich habe es ja schon einmal in einem früheren Beitrag erwähnt. Java unterscheidet zwischen primitiven und […]

So kannst du Java Arrays anlegen

Java Arrays anlegen

Java Arrays– Was ist das? Stell es dir einmal als ein Bücherregal vor. In einem Bücherregal befinden sich sämtliche Bücher. Und diese befinden sich schön nebeneinander. Jedes Buch hat seinen festen Platz. Du kannst die Bücher ganz genau lokalisieren. Zum Beispiel kannst du sagen. Das erste Buch von links Das dritte von rechts usw. Und […]

Hier sind ein paar richtig nette Features, die dich beim Java lernen unterstützen

Java lernen Eclipse

Was ist das Wichtigste beim Einstieg in ein neues Wissensgebiet? Nein, kein gutes Sachbuch oder ein besonders guter Lehrer. Es ist Spaß. Beim Java Lernen brauchst du Spaß. Es gibt Lehrer, welche ihren Stoff so vermitteln, dass Lernen Spaß bereitet. Aber die Grundvoraussetzung ist und bleibt der Spaß. Und nichts ist so spaßhemmend wie Langeweile […]

Java Übung 26 – Das erste kleine Java Spiel

Java Übung Zahlenraten

In dieser Java Übung geht es darum ein kleines Java-Spiel zu erstellen. Und zwar Zahlen raten. Was kannst du dir darunter vorstellen? Du gibst einen bestimmten Wertebereich an. Zum Beispiel 0 bis 100. Und das Java Programm erstellt eine Zufallszahl in diesem Bereich. Dann fordert dich das Programm auf, die Zahl zu raten. Du gibst […]

Eine Java Konsoleneingabe machst du über den Scanner

Es wird Zeit für die erste Java Konsoleneingabe. Und diese Eingaben machst du über den Java Scanner. Was ist das? Der Scanner ist eine vorgefertigte Java Klasse, welche Java mit seiner API anbietet. Das heißt du musst nichts selbst erschaffen. Du musst nur wissen, wie du darauf zugreifst. Erst einmal musst du einen Scanner anlegen. […]

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