Was zur Hölle ist Objektorientierte Programmierung und Wofür Brauche ich das?

Mit dem Laden des Videos akzeptierst du die Datenschutzerklärung von YouTube. Wenn du die Menge an Daten reduzieren möchtest, die YouTube von dir sammelt, solltest du dich vorher aus deinem YouTube-Account ausloggen, das Speichern von Cookies für das Google-Ads-Programm deaktivieren und/oder Cookies im Browser blockieren.
YouTube immer automatisch ladenInhaltsverzeichnis
Als Text lesen
Kommen wir zum großen Thema: Objektorientierte Programmierung.
Java ist eine (sehr) objektorientierte Sprache. Wie du bereits gesehen hast, ist es nicht einmal möglich, ein einfaches Programm zu schreiben, ohne das Keyword class
zu verwenden. Um zu verstehen, was Klassen und Objekte sind, möchte ich dir zuerst zeigen, was passieren kann, wenn du nicht objektorientiert programmierst. Im Gegensatz zu anderen Tutorials werde ich dir jetzt aber nicht realitätsferne Beispiele mit Autos, oder lustigen Tieren nennen, sondern eines mit wirklicher Anwendung.
Stelle dir vor, du möchtest ein Programm schreiben, in dem du Rechtecke benötigst. Diese könnten zum Beispiel Position und Größe von Figuren in einem Spiel darstellen. Wenn du also die Eigenschaften (Attribute) eines solchen Rechtecks speichern möchtest, könntest du folgendermaßen Variablen dafür erstellen:
Je nachdem, was dein Programm machen soll, könntest du diese Werte dann verwenden um z.B. den Flächeninhalt zu berechnen:
Was aber, wenn du gerne mehrere solcher Rechtecke speichern würdest, sagen wir drei Stück?
Du siehst, dass das ganze sehr schnell sehr unübersichtlich wird. Und das sind lediglich drei Rechteck Objekte, die wir speichern wollen. Was wenn es mehrere tausend sind? Oder beliebig viele, also z.B. abhängig von einer Variable int numberOfRectangles;
?
Wir könnten jetzt anfangen, die Attribute der einzelnen Rechtecke in Arrays zusammen zu fassen. Es gibt aber eine viel bessere Variante, einzelne Basistypen zu bündeln: Klassen
Eine Klasse ist nichts anderes als eine Vorlage, wie mehrere Variablen (und Methoden*) zu einem einzelnen Objekt zusammengefasst werden können.
Eine Klasse wird nur ein einziges mal geschrieben, egal wie viele Objekte dieser Klasse man dann tatsächlich erstellen möchte. Die Erstellung eines tatsächlichen Objekts nennt man auch Instanziierung.
In unserem Beispiel ist also Rechteck bzw. Rectangle
die Klasse, firstRectangle
und secondRectangle
könnten dann zwei Objekte (Instanzen) der Klasse Rectangle
sein, und die vier Eigenschaften posX
, posY
, width
und height
die Attribute der Klasse Rectangle
Du kennst bereits eine Klasse, die in Java standardmäßig immer dabei ist: String
. Im Gegensatz dazu sind int
, boolean
und double
keine Klassen, sondern primitive Datentypen (Basistypen). Basistypen sind deutlich simpler, können nicht vom Programmierer neu erfunden werden, und unterscheiden sich in der Art und Weise wie sie im Arbeitsspeicher abgelegt werden.
Übrigens: Arrays sind auch Objekte. Allerdings nehmen diese in Java ebenfalls eine Sonderrolle ein, beispielsweise in der Art und Weise wie diese instanziiert werden.
Und so schaut dann eine Klasse im Code aus:
Die Struktur einer Klasse lässt sich in einem UML Klassendiagramm darstellen:
Um ein Objekt dieser Klasse zu erstellen, verwendet man das new
-Keyword, gefolgt von dem Klassennamen und runden Klammern:
Standardmäßig sind jedoch alle Attribute dieser drei Rechtecke 0.0
. Um auf diese zuzugreifen kann man folgende Punkt-Schreibweise verwenden:
Die main
-Methode, die du bereits in jedem Beispiel verwendet hast, muss in nur einer Klasse vorkommen. Wir können beispielsweise ein Programm folgendermaßen zusammensetzen:
Hierbei ist das public
-Keyword ein sogenannter Access Modifier und bedeutet, dass die Klasse auch von anderen Java-Dateien aus erreicht werden kann. Wenn man public
weglässt, kann der Compiler die main
-Methode nicht finden. Mehr zu Access Modifiers später.
Regeln für guten Code Style (Clean Code):
- Klassennamen immer groß
❌ class rectangle { ... }
✅ class Rectangle { ... }
- Variablennamen immer klein
❌ int Number;
✅ int number;
- Generell (fast) alle Benennungen immer in CamelCase
❌ class RECTANGLE { ... }
✅ class Rectangle { ... }
❌ class Superfancyrectangle { ... }
✅ class SuperFancyRectangle { ... }
❌ Rectangle myrectangle;
✅ Rectangle myRectangle;
- Unterstriche sind für C-Nerds
❌ String first_name;
✅ String firstName;
Wozu brauche ich das jetzt also?
Objektorientierte Programmierung ist kein Muss! Beispielsweise die Sprache C kommt (mehr oder weniger) ohne Klassen und Objekte aus. Theoretisch lässt sich jedes Programm auch direkt in Maschinencode schreiben. Allerdings ist es für uns Menschen viel einfacher, Dinge zu abstrahieren. Unter einem einzelnen Rechteck-Objekt verstehen wir mehr, als unter vier Fließkommazahlen, aus denen sich dieses zusammen baut. Objektorientierte Programmierung ist also für uns Programmierer eine Hilfe, damit wir komplexe Zusammenhänge auf möglichst einfache Weise darstellen und verstehen können.
(*Zu Methoden kommen wir gleich noch)
In einem (hypothetischen) sozialen Netzwerk werden Accounts von Menschen als Objekte im System gespeichert. Jedes dieser Objekte stellt genau einen Account (und damit einen Menschen) dar.
Erstelle eine Klasse User
, die die folgenden Attribute enthält:
id
(Einint
, das irgendeine Art von Identifikationsnummer repräsentiert)firstName
(EinString
, der einen Vornamen darstellt)lastName
(EinString
, der einen Nachnamen darstellt)
Erstelle anschließend in der main
-Methode die folgenden drei User
-Objekte:
- Parry Lage: Hat die
id
14_159_265
- Leon Tusk: Hat die
id
69_420
- Beff Jezos: Hat die
id
2
Du kannst das Programm ausführen um zu sehen ob ein Syntax- bzw. Compilerfehler vorliegt, es wird aber keine Programmausgabe geben.

Mit dem Laden des Online Editors akzeptierst du die Datenschutzerklärung von JDoodle, einem Produkt der Nutpan pty Ltd (Australien). JDoodle verwendet die Tools reCAPTCHA und Google Analytics, wodurch Daten an Google übertragen werden können. Ich habe leider keinen Einfluss auf diesen Prozess. Du kannst Google Analytics über ein Browserplugin deaktivieren.
Online Editor immer automatisch ladenDa jeder Nutzer mit anderen Nutzern befreundet sein kann, werden zusätzlich alle Freunde eines Nutzers als Array in jedem User
-Objekt gespeichert.
Ergänze die Klasse User
also nun mit einem weiteren Attribut User[] friends
und setze die folgenden Verbindungen zwischen den Objekten:
- Parry Lage ist mit Leon Tusk befreundet
- Leon Tusk ist mit Parry Lage befreundet
- Beff Jezos ist mit keinem der beiden befreundet
(Der Pfeil im Diagramm bedeutet, dass jeder User
ein zusätzliches Attribut friends
hat, das selbst 0 bis beliebig viele User
Objekte enthält.)
Füge anschließend eine Programm-Logik hinzu, die auf der Konsole ausgibt, ob Leon Tusk ein Freund von Beff Jezos ist. Verwende hierbei nicht dein eigenes Wissen, sondern hole die Informationen ausschließlich aus den User
-Objekten.
Häufige Fehlerquellen
No "public class" found
: Du hast daspublic
vorclass
vergessen, oder gar keine Klasse implementiertcannot find symbol
: Hast du den korrekten TypUser
bei jeder Variablen-Deklaration stehen? Hast du alleString
s in Gänsefüßchen?error: reached end of file
: Geschweifte Klammer am Ende vergessenjava.lang.NullPointerException
: Hast du alle Arrays zuerst übernew User[...]
erstellt, bevor du darauf zugreifst?