Katalog
concept#Software‑Engineering#Architektur#Lieferung#Zuverlässigkeit

Objektorientierte Programmierung

Programmierparadigma, das Software als Zusammensetzung von Objekten mit Zustand und Verhalten modelliert. Fördert Modularität, Wiederverwendbarkeit und Informationskapselung.

Objektorientierte Programmierung ist ein fundamentales Paradigma, das Systeme als Sammlungen von Objekten mit Eigenschaften und Methoden organisiert.
Etabliert
Mittel

Klassifikation

  • Mittel
  • Technisch
  • Architektur
  • Fortgeschritten

Technischer Kontext

Testing-Frameworks (JUnit, pytest)Build-Tools und Dependency-ManagementDokumentations- und Modellierungswerkzeuge

Prinzipien & Ziele

Kapselung: Interne Implementierung verbergenSingle Responsibility: Klassen haben klare VerantwortlichkeitenProgrammiere gegen Schnittstellen, nicht gegen Implementierungen
Umsetzung
Team, Domäne, Unternehmen

Use Cases & Szenarien

Kompromisse

  • Falsches Modellieren von Domänen führt zu schwer wartbarem Code
  • Überkomplexe Hierarchien erhöhen kognitive Belastung
  • Missbrauch von Vererbung statt Komposition verursacht Engpässe
  • Bevorzuge Komposition gegenüber Vererbung
  • Kleine, fokussierte Klassen mit klarer Verantwortung
  • Programmiere gegen Schnittstellen und nutze Abstraktionen

I/O & Ressourcen

  • Fachliche Anforderungen und Anwendungsfälle
  • Bestehende Architektur- und Schnittstellenbeschreibungen
  • Team-Erfahrung mit OOP-Prinzipien
  • Klassendiagramme und API-Spezifikationen
  • Modulare, wiederverwendbare Komponenten
  • Testabdeckung für Klassen und Schnittstellen

Beschreibung

Objektorientierte Programmierung ist ein fundamentales Paradigma, das Systeme als Sammlungen von Objekten mit Eigenschaften und Methoden organisiert. Es nutzt Konzepte wie Klassen, Kapselung, Vererbung und Polymorphie, um Komplexität zu reduzieren und Wiederverwendbarkeit zu fördern. OOP beeinflusst Design- und Architekturentscheidungen in vielen Sprachen.

  • Verbesserte Modularität und Wiederverwendbarkeit von Code
  • Bessere Abstraktion komplexer Domänen
  • Erleichterte Testbarkeit und Wartbarkeit durch klare Grenzen

  • Kann zu übermäßiger Schichtung und Boilerplate führen
  • Nicht immer optimal für sehr einfache oder datenorientierte Aufgaben
  • Vererbung kann zu starrer Kopplung und Fragilität führen

  • Kohäsion

    Maß für Zusammenhang der Methoden und Daten innerhalb einer Klasse.

  • Kopplung

    Maß für Abhängigkeiten zwischen Klassen oder Modulen.

  • Anzahl öffentlicher Methoden pro Klasse

    Ein Indikator für Verantwortungsumfang und Oberfläche einer Klasse.

Bankkonto-Klassenmodell

Ein typisches Beispiel mit Konto-, Kunde- und Transaktionsklassen zur Demonstration von Kapselung und Vererbung.

GUI-Komponenten mit Vererbung

Basisklasse für UI-Komponenten und spezialisierte Widgets, die Rendering und Ereignisbehandlung kapseln.

Plugin-System einer CMS-Plattform

Plugins implementieren definierte Interfaces, werden geladen und über gemeinsame API betrieben.

1

Domäne analysieren und zentrale Konzepte identifizieren

2

Schnittstellen und Klassenverantwortlichkeiten definieren

3

Iterativ implementieren, testen und refaktorieren

⚠️ Technische Schulden & Engpässe

  • Veraltete Vererbungsstrukturen, die Refactoring erschweren
  • Unklare Ownership von Klassen und Verantwortlichkeiten
  • Fehlende Tests für kritische Klassen
Tight CouplingGroße VererbungsbäumeFehlende Schnittstellendefinition
  • Verwendung von Vererbung für Wiederverwendung statt Extraktion
  • Erzeugung vieler kleiner, unnötiger Klassen ohne klaren Nutzen
  • Öffentliche mutable Felder statt kontrollierter Zugriffsmethoden
  • Übermäßige Abstraktion versteckt einfache Fehler
  • Nicht definierte Schnittstellen führen zu impliziten Abhängigkeiten
  • Refactoring ohne Tests gefährdet Verhalten
Verständnis von Klassen, Objekten und DesignprinzipienFähigkeit zu abstraktem Design und ModellierungErfahrung mit Tests und Refactoring
Wiederverwendbarkeit von KomponentenKapselung von ZustandsverwaltungErweiterbarkeit und Modularität
  • Programmiersprachen-Einschränkungen und Laufzeitkosten
  • Kompatibilitätsanforderungen zu bestehenden APIs
  • Teamkenntnisse in OOP-Designprinzipien