developer-blog:$

oop

OOP Encapsulation

Encapsulation in OOP bedeutet das Eigenschaften, die ein Objekt aus machen, an einem Ort gebündelt sind. Die Kontrolle über diese Eigenschaften soll allein das Objekt behalten.

Dazu ein Beispiel. Wir haben eine Book Klasse die alle Informationen über das Buch gekapselt gespeichert hat. Alle Entscheidungen die mit diesem Buch zu tun haben finden in dieser Klasse statt.

class Book {
    private int $weight;

    public function __construct(int $weight)
    {
        $this->weight = $weight;
    }

    public function weight(): int
    {
        return $this->weight;
    }
}

Nehmen wir an wir möchten das Buch verschicken. In diesem Beispiel geben wir die Gewichtsangabe außerhalb der Kontrolle des Book Objekts. In dem Book Objekt haben wir vielleicht die Entscheidung getroffen, das die Gewichtsangabe in Gramm gespeichert wird. Der nächste Entwickler entscheidet sich die Gewichtsangabe in Kilogramm zu ändern. Da die Gewichtsangabe außerhalb des Book Objekts vielleicht immer weiter gegeben wird, kann keiner mehr voraus sehen welche Auswirkung die Änderung auf den gesamten Code haben wird. Dadurch wird jede Code Änderung immer aufwendiger.

$book = new Book();
(new Delivery())->addWeight($book->weight());

Es ist auch möglich das mit dem Gewicht des Book Objekts an verschiedenen Stellen im Code Berechnungen durchgeführt wurden. In unserem Beispiel hier haben wir uns schon 3 mal von der Gewichtsangabe des Book Objekts entfernt. Besser ist die Gewichtsangabe nur einmal zu benutzen und direkt danach weg zu schmeißen.

$12PercentOfWeight = (float) (((new Book())->weight() * 12) / 100);

Wenn wir dem Lieferservice das gesamte Book Objekt übergeben, ist es nicht mehr unsere Sache welche Informationen benötigt werden um ein Buch zu verschicken.

$book = new Book();
(new Delivery())->addBook($book);