Zasady SOLID – (O – open closed principle) – Zasada otwarte-zamknięte

Zasada otwarte-zamknięte (ang. OCP – open closed principle) mówi, że program powinien być napisany w przemyślany sposób. Istniejące klasy powinny być otwarte na rozszerzanie (dodawanie nowych funkcjonalności), ale nie wolno modyfikować już istniejącego kodu.

Przykład programu przed zastosowaniem zasady OCP:

public class Shape {
    private String type;

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

    public String getType() {
        return type;
    }

    public void draw() {
        if (type.equals("Circle")) {
            System.out.println("Drawing Circle");
        } else if (type.equals("Square")) {
            System.out.println("Drawing Square");
        }
        // Dodaj kolejne warunki dla innych typów kształtów...
    }
}

Przykład programu po zastosowaniem zasady OCP:

public interface Drawable {
    void draw();
}

public class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing Circle");
    }
}

public class Square implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing Square");
    }
}

public class DrawingSystem {
    public void drawShape(Drawable shape) {
        shape.draw();
    }
}

W tym przypadku mamy interfejs Drawable, który reprezentuje obiekt, który można narysować. Klasy Circle i Square implementują ten interfejs i dostarczają swoją własną implementację metody draw. Dodatkowo, mamy klasę DrawingSystem, która używa interfejsu Drawable do rysowania kształtów, bez konieczności modyfikacji samej klasy.

Teraz, jeśli chcemy dodać nowy kształt, po prostu tworzymy nową klasę implementującą interfejs Drawable, nie modyfikując istniejącego kodu. To spełnia zasadę Open/Closed Principle, ponieważ nasz system jest otwarty na rozszerzenia (dodawanie nowych kształtów), ale zamknięty na modyfikacje (istniejący kod nie musi być zmieniany).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *