**This is an old revision of the document!**
Programmier-Paradigma
Objekt-orientiere Programmierung OOP
Die objektorientierte Programmierung (ab hier abgekürzt mit OOP) ist ein Programmierparadigme oder auch einfacher ausgedrückt Programmierstil.
Aber was bedeutet Programmierstil? Es geht bei einme Programmierstil darum, eine bestimmt Denkweise zu entwickeln, wenn man programmiert.
OOP ähnelt in vielen Dingen dem menschlichen Denken - daher kann OOP sehr intuitiv angewendet werden.
Die objektorientierte Programmierung (OOP) ist ein Programmierparadigma, bei dem Software aus Objekten aufgebaut wird. Hier sind einige wichtige Konzepte der OOP:
- Objekte: Alles in der OOP wird durch Objekte abgebildet. Ein Objekt ist eine Instanz einer Klasse und enthält Daten (Attribute) sowie Methoden (Funktionen), die auf diese Daten zugreifen¹.
- Klassen: Eine Klasse ist ein Bauplan für Objekte. Sie definiert, welche Attribute und Methoden ein Objekt haben kann. Zum Beispiel könnte eine Klasse “Hund” Attribute wie “Name” und “Alter” sowie Methoden wie “Bellen” und “Laufen” haben.
- Vererbung: Vererbung ermöglicht es, eine neue Klasse (die abgeleitete Klasse) auf Basis einer vorhandenen Klasse (die Basis-Klasse) zu erstellen. Die abgeleitete Klasse erbt die Eigenschaften und Methoden der Basis-Klasse und kann sie erweitern oder überschreiben.
Die OOP ist besonders gut geeignet für komplexe Programme, die aktualisiert oder gewartet werden müssen. Sie basiert auf dem Konzept von Objekten, die Daten und den zugehörigen Code enthalten.
===== Beispielklasse Hund ===== Hier findest du ein Beispiel. Wir implementieren eine Klasse Hund. Diese Klasse soll “den Hund”, wie er in der Welt vorkommt beschreiben. Dabei geht es nicht darum, mit der Klasse einen speziellen Hund, der bei mir auf dem Sofa liegt zu beschreiben. Es geht vielmehr darum, viele Eigenschaften und Aktionen, die das Hund-Sein ausmachen, zu beschreiben.
In unserem Beispiel haben wir die
- Eigenschaften Name und Alter und die
- Aktion bellen als wichtig erachtet und implementiert.
Diese Eigenschaften oder Attribute und Aktionen oder Methoden sind so universal für alle Hunde, dass wir sie in den Bauplan für Hunde einbauen.
Wann immer wir die Klasse Hund zur Hand nehmen, können wir aus dieser Blaupause jeweils konkrete Hunde erzeugen, die diese Eigenschaften besitzen. Denke bei der Benutzung einer Klasse an eine Copy&Paste-Aktion: Ein einmal generiertes Objekt wird wieder und wieder eingefügt.
Kümmer dich zunächst nicht um Begriffe wie Konstruktor, Getter und Setter. Wir werden auf den folgenden Seiten Step by Step diese Begriffe einführen.
// Beispiel einer einfachen Klasse in OOP (Java) mit Getter- und Setter-Methoden
public class Hund { // Attribute private String name; private int alter;
// Konstruktor
public Hund(String name, int alter) {
this.name = name;
this.alter = alter;
}
// Getter-Methode für den Namen
public String getName() {
return name;
}
// Setter-Methode für den Namen
public void setName(String name) {
this.name = name;
}
// Getter-Methode für das Alter
public int getAlter() {
return alter;
}
// Setter-Methode für das Alter
public void setAlter(int alter) {
this.alter = alter;
}
// Methoden
public void bellen() {
System.out.println(name + " sagt: Wuff!");
}
public static void main(String[] args) {
Hund meinHund = new Hund("Bello", 2);
System.out.println("Der Name meines Hundes ist " + meinHund.getName() + ".");
System.out.println("Mein Hund ist " + meinHund.getAlter() + " Jahre alt.");
meinHund.bellen();
}
}
Step 1: Erzeugen der Klasse
Lass uns zunächst die Klasse vereinfachen und all die noch unbekannten Konzepte entfernen.
Übrig bleibt eine aufgeräumte Klasse mit zwei Attributen (name und alter) sowie einer Methode bellen.
public class Hund { // Attribute String name; int alter;
// Methoden
void bellen() {
System.out.println(name + " sagt: Wuff!");
}
public static void main(String[] args) {
Hund meinHund = new Hund();
meinHund.name = "Bello";
meinHund.bellen();
}
}
—→ ===== Step 2: Erzeugen eines Objekts ===== Wir können nun ein Objekt (Instanz) der Klasse Hund erzeugen.
Analog zur Vorgehensweise bei der Deklaration und Initialisierung von Variablen, bsp. einer Ganzzahlt int x = 5, erzeugen wir eine Variable meinHund.
Diese Variable meinHund hat als Datentyp die Klasse Hund und wir initialisieren die Variable, indem wir ein neues Objekt der Klasse erzeugen: new Hund(). —→
public class Hund { // Attribute String name; int alter;
// Methoden
void bellen() {
System.out.println(name + " sagt: Wuff!");
}
public static void main(String[] args) {
Hund meinHund = new Hund();
meinHund.name = "Bello";
meinHund.bellen();
}
}
—→ ===== Step 3: Zuweisung von Werten an die Attribute ===== Nun haben wir ein Objekt meinHund, das alle Eigenschaften der Klasse Hund als Anlage in sich trägt. Allerdings fehlen noch konkrete Werte.
Diese weisen wir bsp. in Zeile 13 zu: Hier bekommt das Objekt meinHund den spezifischen Namen “Bello” zugewiesen.
Spoiler: Dieser Zugriff wird in Zukunft so nicht mehr klappen. Wir werden über sog. Setter oder gleich über Konstruktoren die Werte zuweisen. Aber für den Augenblick klappt das auch so und es ist auch kein Code, den der Java-Compiler ablehnt. —→
public class Hund { // Attribute String name; int alter;
// Methoden
void bellen() {
System.out.println(name + " sagt: Wuff!");
}
public static void main(String[] args) {
Hund meinHund = new Hund();
meinHund.name = "Bello";
meinHund.bellen();
}
}
—→ ===== Step 4: Ausführen einer Methode ===== Nun, da wir ein Objekt der Klasse Hund mit richtigem, echten Hundenamen haben, können wir die Klassenmethode bellen von unserem Hund meinHund ausführen lassen. Weniger verdreht ausgedrückt lassen wir unseren Hund bellen und es wird uns auch gleich mit geliefert, wie der Hund denn heißt.
Es geht hier wohlgemerkt nicht darum, wie der Variablenname des erzeugten Objekts lautet. Es geht darum, wie der konkrete Name des erzeugten Objekts meinHund lautet.
public class Hund { // Attribute String name; int alter;
// Methoden
void bellen() {
System.out.println(name + " sagt: Wuff!");
}
public static void main(String[] args) {
Hund meinHund = new Hund();
meinHund.name = "Bello";
meinHund.bellen();
}
}