Open-Closed-Prinzip

Diese Begriffserklärung teilen
« Zurück zum Glossar Index
Open-Closed-Prinzip

Bild von maniacvector auf Freepik

1. Definition

Das Open-Closed-Prinzip (OCP) ist eines der fünf SOLID-Prinzipien der objektorientierten Programmierung und Softwareentwicklung. Es besagt:

„Softwaremodule sollten für Erweiterungen offen, aber für Änderungen geschlossen sein.“

Das bedeutet, dass der Code so geschrieben werden sollte, dass neue Funktionalitäten hinzugefügt werden können, ohne den bestehenden Code zu verändern. Stattdessen sollten Erweiterungen durch Vererbung, Schnittstellen oder Polymorphie erfolgen.

Beispiel für OCP:

Angenommen, wir haben eine Klasse Rechteck, die die Fläche berechnet. Später möchten wir auch Kreis unterstützen, ohne den bestehenden Code zu verändern.


2. Warum ist das Open-Closed-Prinzip wichtig?

Erhöht die Wartbarkeit – Bestehender Code muss nicht geändert werden, wodurch weniger Fehler entstehen.
Verbessert die Erweiterbarkeit – Neue Features können einfach hinzugefügt werden.
Reduziert Seiteneffekte – Änderungen an bestehendem Code können unerwartete Probleme verursachen, OCP verhindert dies.
Ermöglicht Wiederverwendbarkeit – Gut strukturierte Module lassen sich leichter wiederverwenden.


3. Beispiel für schlechtes Design (Verletzung von OCP)

class Shape {
    String type;
    
    public Shape(String type) {
        this.type = type;
    }
}

class AreaCalculator {
    public double calculateArea(Shape shape) {
        if (shape.type.equals("Rectangle")) {
            return 10 * 5; // Annahme: Breite = 10, Höhe = 5
        } else if (shape.type.equals("Circle")) {
            return Math.PI * 5 * 5; // Annahme: Radius = 5
        }
        return 0;
    }
}

🔴 Problem:

  • Jedes Mal, wenn eine neue Form (z. B. Dreieck) hinzugefügt wird, muss die calculateArea-Methode geändert werden.
  • Das verstößt gegen OCP, weil bestehender Code modifiziert wird.

4. Beispiel für gutes Design (Einhalten von OCP)

// Allgemeine Schnittstelle für Formen
interface Shape {
    double calculateArea();
}

// Rechteck-Implementierung
class Rectangle implements Shape {
    private double width, height;
    
    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }
    
    @Override
    public double calculateArea() {
        return width * height;
    }
}

// Kreis-Implementierung
class Circle implements Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

// Berechnungsmodul (bleibt unverändert!)
class AreaCalculator {
    public double calculateArea(Shape shape) {
        return shape.calculateArea();
    }
}

Vorteile dieses Designs:

  • Die AreaCalculator-Klasse bleibt unverändert.
  • Neue Formen (z. B. Dreieck) können einfach hinzugefügt werden, indem eine neue Klasse implementiert wird.

5. Anwendung des Open-Closed-Prinzips

A) Strategie-Muster

Ein Beispiel für OCP ist das Strategie-Muster, bei dem verschiedene Algorithmen zur Laufzeit austauschbar sind.

B) Plugin-Systeme

Moderne Anwendungen nutzen Plugins, um Funktionalitäten ohne Änderung des Hauptcodes zu erweitern.

C) Dependency Injection

OCP kann durch Dependency Injection (DI) erreicht werden, indem neue Implementierungen als Abhängigkeiten eingefügt werden.


6. Fazit

Das Open-Closed-Prinzip sorgt für erweiterbaren und stabilen Code, indem neue Funktionalitäten hinzugefügt werden können, ohne bestehende Implementierungen zu verändern. Dies reduziert Fehler, erleichtert die Wartung und fördert die Wiederverwendbarkeit.


„Möchtest Du zu diesen Begriff oder einem anderen Thema mit uns ins Gespräch kommen?“

Dann kontaktiere uns einfach hier! 😊

Wir sind darum bemüht die angebotenen Informationen aktuell zu halten und diese in knapper und verständlicher Form darzustellen. Fehler und Irrtümer bleiben aber menschlich und darum vorbehalten. Bei Unstimmigkeiten zu einem Begriff, bitten wir darum dies per E-Mail mit uns zu diskutieren. Bitte nutze hierfür unsere E-Mail: info@jupiterexpress.de« Zurück zum Glossar Index