Modul 7 von 16 · 📖 7 min Lesezeit · ⏱ 30 min gesamt
FI-AE 07 Objektorientierte Programmierung
Inhaltsverzeichnis (6 Abschnitte)
FI-AE 07 Objektorientierte Programmierung
Die objektorientierte Programmierung (OOP) bildet das Fundament moderner Softwareentwicklung. In diesem Modul vertiefen Sie die Kernkonzepte der OOP – Kapselung, Vererbung und Polymorphie – und lernen, diese anzuwenden, um robuste und wartbare Softwarearchitekturen zu entwerfen. Anhand eines durchgehenden Beispiels erarbeiten Sie sich praktische Fähigkeiten in der Anwendung der SOLID-Prinzipien, die die Basis für professionelles, erweiterbares Code-Design bilden.
Konzepte und Hintergrund
- Kapselung
- Die Kapselung verbirgt die internen Zustände und Implementierungen eines Objekts und macht nur über definierte Schnittstellen (Methoden) zugänglich. Sie schützt Daten vor unbefugtem Zugriff und reduziert Abhängigkeiten zwischen Komponenten.
- Vererbung
- Vererbung ermöglicht die Bildung neuer Klassen (abgeleitete Klassen) auf Basis bestehender Klassen (Basisklassen). Die abgeleitete Klasse erbt Eigenschaften und Methoden der Basisklasse und kann diese erweitern oder überschreiben.
- Polymorphie
- Polymorphie ("Vielgestaltigkeit") erlaubt es, Objekte verschiedener Klassen über eine gemeinsame Schnittstelle zu behandeln. Methoden können je nach Objekttyp unterschiedlich implementiert sein, was zur Laufzeit dynamisch aufgelöst wird.
- SOLID-Prinzipien
- Die SOLID-Prinzipien sind fünf Design-Richtlinien für objektorientierte Software: Single Responsibility Principle, Open/Closed Principle, Liskov Substitution Principle, Interface Segregation Principle und Dependency Inversion Principle. Sie gewährleisten flexible, wartbare und erweiterbare Systeme.
Architektur-Diagramm
classDiagram
class Fahrzeug {
+geschwindigkeit: int
+position: Punkt
+beschleune(delta: int)
+bremsen(delta: int)
+getPosition(): Punkt
}
class Punkt {
+x: int
+y: int
+verschiebe(dx: int, dy: int)
}
class Auto extends Fahrzeug {
+anzahlTueren: int
+oeffneTuer(tuerNr: int)
}
class Motorrad extends Fahrzeug {
+hatBeifahrer: boolean
+setzeBeifahrer(status: boolean)
}
Fahrzeug "1" *-- "1" Punkt
Fahrzeug <|-- Auto
Fahrzeug <|-- Motorrad
Praktische Schritte
- Definieren Sie eine Basisklasse
Fahrzeugmit gemeinsamen Attributen wiegeschwindigkeitundpositionsowie Methoden zur Geschwindigkeitskontrolle. Dies legt den Grundstein für spätere Vererbung. - Implementieren Sie die Kapselung durch Zugriffsmodifikatoren (z.B.
privatefür interne Daten undpublicfür Methoden), um direkten Zugriff auf Objektzustände zu verhindern. - Leiten Sie spezifische Klassen wie
AutoundMotorradvon der BasisklasseFahrzeugab und fügen Sie klassenspezifische Attribute und Methoden hinzu. - Überschreiben Sie Methoden der Basisklasse in den abgeleiteten Klassen, um polymorphes Verhalten zu realisieren – z.B. unterschiedliche Implementierungen der
beschleune-Methode. - Wenden Sie das Single Responsibility Principle an, indem Sie separate Klassen für verschiedene Verantwortlichkeiten erstellen (z.B.
Punktfür Positionsdaten). - Implementieren Sie das Open/Closed Principle, indem Sie die Basisklasse so gestalten, dass sie erweitert, aber nicht geändert werden muss.
- Verwenden Sie Interfaces, um das Interface Segregation Principle zu erfüllen – z.B. ein
IFahrzeug-Interface mit nur den notwendigen Methoden. - Wenden Sie Dependency Injection an, um Abhängigkeiten von konkreten Implementierungen zu lösen und das Dependency Inversion Principle zu realisieren.
Häufige Fallstricke
Weiterführende Ressourcen
- Microsoft-Dokumentation zur objektorientierten Programmierung in C#
- SOLID-Prinzipien – Wikipedia
- Refactoring Guru – Design Patterns und SOLID-Prinzipien
- Head First Object-Oriented Programming (Buch)
- Udemy-Kurs: OOP mit Python
Wissens-Check
Vier Fragen zur Selbstkontrolle. Klicken Sie jede Frage an, um die richtige Antwort und Erklärung zu sehen.
Was ist der Hauptzweck der Kapselung in der objektorientierten Programmierung?
- A) Maximale Wiederverwendbarkeit von Code durch Vererbung
- B) Verbergen interner Implementierungsdetails und Schutz von Daten
- C) Erleichterung der Kommunikation zwischen verschiedenen Objekten
- D) Reduzierung der Anzahl von Klassen in einem System
Richtige Antwort: B. Kapselung verbirgt interne Zustände und macht nur über definierte Schnittstellen zugänglich, während A und C eher andere OOP-Konzepte betreffen und D nicht das Hauptziel ist.
Welches SOLID-Prinzip besagt, dass eine Klasse nur einen Grund zur Änderung haben sollte?
- A) Open/Closed Principle
- B) Interface Segregation Principle
- C) Single Responsibility Principle
- D) Liskov Substitution Principle
Richtige Antwort: C. Das Single Responsibility Principle besagt, dass eine Klasse nur eine einzige Verantwortung haben sollte, während A sich auf Erweiterbarkeit, B auf spezifische Schnittstellen und D auf Austauschbarkeit von Objekten bezieht.
Was bedeutet Polymorphie im Kontext der objektorientierten Programmierung?
- A) Die Fähigkeit einer Klasse, von einer anderen Klasse zu erben
- B) Die Fähigkeit von Objekten, sich während der Laufzeit zu ändern
- C) Die Fähigkeit, Methoden mit demselben Namen aber unterschiedlicher Implementierung zu haben
- D) Die Fähigkeit, Daten und Methoden in einer Klasse zu bündeln
Richtige Antwort: C. Polymorphie ermöglicht es, Methoden mit gleichem Namen aber unterschiedlicher Implementierung zu haben, die je nach Objekttyp aufgerufen werden, während A Vererbung, B nicht möglich und D Kapselung beschreibt.
Welcher Vorteil ergibt sich aus der Anwendung des Open/Closed-Prinzips?
- A) Reduzierung der Anzahl von Klassen im System
- B) Einfachere Implementierung von Vererbungshierarchien
- C) Erweiterbarkeit von Systemen ohne Änderung bestehender Komponenten
- D) Vereinfachung der Benutzeroberfläche
Richtige Antwort: C. Das Open/Closed-Prinzip ermöglicht die Erweiterung von Systemen ohne Änderung bestehender Komponenten, während A, B und D keine direkten Ergebnisse dieses Prinzips sind.