"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Composition vs héritage

Composition vs héritage

Publié le 2024-11-08
Parcourir:277

Composition vs. Inheritance

Héritage vs. Composition en PHP ?

Lorsque nous programmons orienté objet, il est important de comprendre la différence entre l'héritage et la composition :

Patrimoine
Une classe hérite d'une autre, réutilisant et étendant son comportement.

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

class Carro extends Motor{}

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

Composition
Une classe contient des instances d'autres classes pour déléguer des responsabilités. La composition est souvent préférée pour créer des systèmes plus flexibles et éviter les problèmes d'héritage profond.

Exemple pratique
Avez-vous déjà pensé que lorsque nous démarrons la voiture, nous démarrons réellement le moteur ? En suivant ce raisonnement, nous pouvons créer deux objets : un appelé Engine et un autre appelé Car. De cette façon, l'objet Car contiendra une instance de l'objet Engine, qui sera responsable du démarrage de la voiture.

Code

Moteur de classe
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();
    }
}

Compréhension
Au lieu que la classe Car ait la logique de démarrage du moteur directement intégrée, elle délègue cette responsabilité à un objet Engine. Cela permet à la classe Car de se concentrer sur ce qu'elle est censée faire, rendant le code plus modulaire et plus facile à maintenir. À l'avenir, vous pourrez changer ou améliorer le moteur sans modifier le code de classe de voiture.

Essai

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

Avantages
Cette approche est plus flexible car elle permet à la voiture d'avoir différents types de moteurs (par exemple, un V4, un V6 ou un moteur électrique) sans avoir à changer de classe de voiture. Cette modularité facilite la maintenance et l'expansion du système.

Déclaration de sortie Cet article est reproduit à: https://dev.to/carloseduardoalvesviana/composition-vs-heritance-98a?
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3