„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Zusammensetzung vs. Vererbung

Zusammensetzung vs. Vererbung

Veröffentlicht am 08.11.2024
Durchsuche:321

Composition vs. Inheritance

Vererbung vs. Komposition in PHP ?

Wenn wir objektorientiert programmieren, ist es wichtig, den Unterschied zwischen Vererbung und Komposition zu verstehen:

Erbe
Eine Klasse erbt von einer anderen und verwendet und erweitert deren Verhalten.

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro extends Motor{}

$carro = new Carro();
$carro->ligar();

Zusammensetzung
Eine Klasse enthält Instanzen anderer Klassen, um Verantwortlichkeiten zu delegieren. Komposition wird oft bevorzugt, um flexiblere Systeme zu schaffen und Probleme mit tiefer Vererbung zu vermeiden.

Praxisbeispiel
Haben Sie jemals darüber nachgedacht, dass wir, wenn wir das Auto starten, tatsächlich auch den Motor starten? Dieser Überlegung folgend können wir zwei Objekte erstellen: eines mit dem Namen „Engine“ und eines mit dem Namen „Car“. Auf diese Weise enthält das Car-Objekt eine Instanz des Engine-Objekts, das für das Starten des Autos verantwortlich ist.

Code

class Motor
{
    public function ligar()
    {
        return "Motor Ligado!";
    }
}

class Carro
{
    private Motor $motor;

    public function __construct(Motor $motor)
    {
        $this->motor = $motor;
    }

    public function ligar()
    {
        return $this->motor->ligar();
    }
}

Verständnis
Anstatt dass die Car-Klasse die Logik zum Starten der Engine direkt integriert hat, delegiert sie diese Verantwortung an ein Engine-Objekt. Dadurch bleibt die Car-Klasse auf das konzentriert, was sie tun soll, wodurch der Code modularer und einfacher zu warten ist. In Zukunft können Sie den Motor ändern oder verbessern, ohne den Fahrzeugklassencode zu ändern.

Testen

$motorV4 = new Motor();
$carro = new Carro($motorV4);
echo $carro->ligar(); // Saída: Motor Ligado!

Vorteile
Dieser Ansatz ist flexibler, da er es ermöglicht, dass das Auto über verschiedene Motortypen verfügt (z. B. einen V4-, V6- oder Elektromotor), ohne dass die Fahrzeugklasse geändert werden muss. Diese Modularität erleichtert die Wartung und Erweiterung des Systems.

Freigabeerklärung Dieser Artikel wird unter: https://dev.to/carloseduardoalvesviana/composition-vs-inheritance-98a?1 reproduziert. Wenn es zu Verstößen besteht, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3