Der Toaster

Zuerst einmal bauen wir uns einen Toaster:

<?php declare(strict_types=1);

namespace spriebsch\tfd\modernPhpDevelopment\objectOrientation\looseCoupling\toaster;

class Toaster
{
    private ?Toast $leftSlice = null;
    private ?Toast $rightSlice = null;

    public function insertIntoLeftSlot(Toast $slice): void
    {
        $this->leftSlice = $slice;
    }

    public function removeFromLeftSlot(): Toast
    {
        $slice = $this->leftSlice;
        $this->leftSlice = null;

        return $slice;
    }

    public function insertIntoRightSlot(Toast $slice): void
    {
        $this->rightSlice = $slice;
    }

    public function removeFromRightSlot(): Toast
    {
        $slice = $this->rightSlice;
        $this->rightSlice = null;

        return $slice;
    }

    public function start(): void
    {
        // heat the slices
    }
}
Toaster.php

Wir können in die zwei Schlitze jeweils eine Scheibe Toast stecken und dann den Toaster starten. Das Rauf und Runter der Toastscheiben bilden wir nicht ab, ebenso wenig die Dauer des Toast-Vorganges. Kurz gesagt kümmern wir uns für unser Beispiel nicht darum, ob der Toast verbrennt oder noch beinahe weiß rauskommt. Wir brauchen aber eine Möglichkeit, die Toastscheiben wieder aus dem Gerät zu nehmen (removeFrom...()), wenn sie fertig sind.

Wenn wir genauer nachdenken, dann können wir bei der Bedienung des Toasters einige Fehler machen: wir könnten einen leeren Toaster in Betrieb nehmen, wir könnten versuchen, die Toastscheiben herauszuholen, bevor sie fertig sind, wir könnten versuchen, viel zu große Scheiben in den Schacht zu stopfen und so weiter.

Das ist aber jetzt nicht unbedingt ein Problem unserer Software, sondern bei meinem realen Toaster zu Hause genauso. Wir müssen unsere Software - gerade wenn wir nur ein Beispielprogramm schreiben - wahrlich nicht besser machen als die Realität. Wichtig ist nur, dass man keinen Metallgegenstand verwendet, um im laufenden Betrieb im Toaster rumzustochern!

Software muss nicht besser sein als die Realität, die sie abbildet

Die Toastscheiben selbst arbeiten wir nicht weiter aus:

<?php declare(strict_types=1);

namespace spriebsch\tfd\modernPhpDevelopment\objectOrientation\looseCoupling\toaster;

class Toast
{
}
Toast.php

Eine Scheibe Toast könnte Länge, Breite und Dicke haben, Informationen über Zutaten enthalten, vielleicht auch noch eine Temperatur und einen Bräunungsgrad. Und den rohen Toast würden wir vermutlich aus einer Collection, also einem Behälter, entnehmen, um ihn nach dem Toasten auf einen Teller zu legen (eine andere Collection?).

Du siehst schon, das führt jetzt dann ganz schnell sehr, sehr weit, und vor allem weit weg von unserem Atomkraftwerk. Daher lassen wir Toast für dieses Beispiel einfach leer.

Ohne Strom funktioniert unser Toaster allerdings noch nicht.