Skip to main content

So funktioniert das Abstraktionsprinzip bei Polymorphie im Java Programm


java programmierung abstraktionsprinzip

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 bedeutet Abstraktion bei der Java Programmierung

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. Oder einen anderen Vertreter deiner Zielgruppe.

Was passiert?
Ja genau, dein Radar geht an.

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 Java-Artikel auf Sciodoo, 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

Java Anfänger Übung: Hello World

Java-Übung-Hello-World

Alles beginnt mit „Hello World“. Sämtliche Java Bücher beginnen mit diesem ersten Beispiel. Auch die Java Übungen sollen mit diesem ersten Programm starten. Definiere eine Klasse „Hello World“. Implementiere die Main Methode. Die Main Methode soll bei Programmaufruf die Bildschirmanzeige „Hallo Welt“ zurückgeben. Die Lösung zur Java Übung „Hallo Welt“ […]

Namenskonventionen bei der Java Programmierung

java-programmierung-namenskonvention-lowercasecamelcase

Beiderjavaprogrammierungsolltestduaufdierichtigenamensvergabeachten. indennnamengebendeinenjavaprogrammeinegrundlegendestruktur. Was sagen dir die beiden oberen Sätze? Häh? Da steht: Bei der Java Programmierung solltest du auf die richtige Namensvergabe achten. Denn Namen geben deinem Java Programm eine grundlegende Struktur. Jede Sprache braucht Regeln. Diese Regeln, wie Grammatik oder Rechtschreibung geben der Sprache eine Struktur. Jeder Leser, welcher […]

So sorgt Java Polymorphie für besseren Code und mehr Möglichkeiten

java programmierung polymorphie code möglichkeiten

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

So funktioniert die Java Konsoleneingabe über den Scanner

java programmierung konsoleneingabe 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 […]

Lokale Variablen im Java Programm: Lebensdauer und Nutzung

lokale variablen im java programm

Lass uns über die Lebensdauer einer lokalen Variablen sprechen. Warum ausgerechnet die Lebensdauer? Alle Java Variablen, unterscheiden sich in folgenden Punkten: wo diese deklariert werden können, wie du diese aufrufen kannst, welchen Bereich diese abdecken, und Ihre Lebensdauer Und eine lokale Java Variable hat eine relativ kurze Lebensdauer. Schauen wir […]

So funktioniert der Java Programmstart mit Argumenten-Übergabe

java programmierung programmstart argumente

Um ein Java Programm starten zu können, benötigst du immer die main-Methode. Das Programm startet immer genau an dieser Stelle. Alle lokalen Variablen, welche du in der Main Methode anlegst, kannst du dann im Programm nutzen. Auch alle Methoden, welche du innerhalb des Methodenrumpfes der main-Methode aufrust, werden ausgeführt. Was […]

So kannst du Konstanten in Java Programmen anlegen und nutzen

java programmierung konstanten anlegen und nutzen

Java Konstanten – was kann man sich darunter vorstellen? Du kennst Konstanten in der Mathematik. Die Kreiszahl Pi ist so eine konstante Zahl. Diese Zahl ändert sich niemals. Sie beträgt immer rund 3,141592. In der Physik gelten die Lichtgeschwindigkeit, der Erdradius oder der absolute Nullpunkt als konstant. Selbst die Geschwindigkeit […]

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

Java Konsolenausgaben mit formatierten Zahlen

java programmierung konsolenausgabe mit formatierten zahlen

Java Konsolenausgaben erzeugst du mit der System.out.println()-Anweisung. Dies ist relativ einfach. Aber es ist mitunter nicht ganz praktisch. Und zwar immer dann, wenn Zahlen im Spiel sind. Die Zahlen welche dann auf deiner Java Konsole erscheinen, sind unformatiert. Sie haben zu viele Kommastellen. Oder für eine bessere Darstellung benötigst du […]

Die 5 verschiedenen Zahlensysteme in der Java Programmierung

java programmierung zahlensysteme

Java Zahlensysteme – Was soll das? In sämtlichen Programmiersprachen werden Zahlen in Variablen abgespeichert. Wenn du dir die einzelnen primitiven Datentypen in Java einmal anschaust – wirst du feststellen – dass die Masse der Datentypen Zahlen annehmen und speichern können. Zahlen und die Mathematik dahinter spielen in der Programmierung eine […]

Syntax, Semantik und Lexikalik in der Java Programmierung

java programmierung lexikalik syntax semantik

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

So kannst du spielend Java Programmierung lernen

java programmierung lernen

Ich lernte die Java Programmierung auf die klassische Art. Ich kaufte mir das erste Buch und los ging es. „Jetzt wirst du Java lernen“ – sagte ich zu mir. Ich war relativ schnell ziemlich frustriert, denn irgendwie fehlten mir ein paar Zusammenhänge. Kennst du das? Du hast ein Wissensfetzen und […]

So solltest du Kommentare im Java Programm einsetzen

java programmierung kommentare

Bei der Java Programmierung sind Kommentare mitunter genauso wichtig wie der eigentliche Code. Denn ein guter Kommentar zeigt dir sofort, was mit dem Code gemeint ist, was dieser bewirkt und was sich der Entwickler dabei dachte. Wie werden Kommentare in Java gesetzt? Die Kommentare werden in Eclipse immer grün dargestellt. […]

Dies sind die Vorteile von polymorphen Java Arrays

java programmierung polymorphie arrays

Wenn Java Arrays, Schubladen oder Container sein sollen… Dann wäre der Gebrauch einer solchen Schublade ziemlich einseitig und festgefahren. Denn in jedes Array passen zwar mehrere Daten – aber immer nur vom gleichen Datentyp. Immer gleicher Datentyp? Also eine Schublade nur für Socken, Unterwäsche und der ganze andere Kram passt […]

So kannst du in Java eine Binärzahl in eine Dezimalzahl umwandeln

java programmierung binärzahl in dezimalzahl umwandeln

Erinnerst du dich? In einer der letzten Beiträge haben wir uns die Zusammenhänge zwischen dem dualen und dem dezimalen Zahlensystem angeschaut. Aber wir haben noch keine Java Binärzahl in eine Dezimalzahl verwandelt. Zumindestens nicht praktisch…. Stattdessen…. Haben wir festgestellt, dass beide Zahlensysteme im Grunde genommen sehr ähnlich sind. Beim Dezimalsystem […]

Unterschied zwischen Klassenvariable und Instanzvariable im Java Programm

unterschied klassenvariable instanzvariable java programmierung

Bei der Java Programmierung unterscheidet man drei Arten von Variablen. Als erste Gruppe sind die lokalen Variablen zu nennen. Auf diese gehe ich in einem separaten Artikel ein. Mich interessieren die zwei anderen Variablentypen. Zum einen existieren Klassenvariablen. Und dann sind da noch die Instanzvariablen. Wo liegt der Unterschied zwischen […]

Zwei smarte Möglichkeiten eine Java Zufallszahl zu erzeugen

java zufallszahl anlegen erzeugen

Java Zufallszahl – Wieso? In der Java Programmierung benötigst du immer wieder einmal Zufallszahlen. Du möchtest deine Software mit Daten testen und dir keine Zahlen ausdenken. Du benötigst Stichproben, welche ein reales Verhalten simulieren. Du hast ein Spiel entworfen und die Akteure sollen mit zufälligen aber unterschiedlichen Größen, Rüstungsleveln usw. […]