What are common mistakes developers make with composition vs inheritance?

Understanding the differences between composition and inheritance is crucial for object-oriented programming. Common mistakes include misusing inheritance for code reuse instead of composition, leading to rigid structures that are hard to maintain and extend.

composition, inheritance, object-oriented programming, code reuse, software design, maintainability


// Example of Misusing Inheritance
class Animal {
    public function makeSound() {
        return "Some sound";
    }
}

class Dog extends Animal {
    public function makeSound() {
        return "Bark";
    }
}

// Composition example
class SoundBehavior {
    public function makeSound() {
        // Default behavior
        return "Some sound";
    }
}

class BarkBehavior extends SoundBehavior {
    public function makeSound() {
        return "Bark";
    }
}

class Dog {
    private $soundBehavior;

    public function __construct(SoundBehavior $soundBehavior) {
        $this->soundBehavior = $soundBehavior;
    }

    public function performSound() {
        return $this->soundBehavior->makeSound();
    }
}

$dog = new Dog(new BarkBehavior());
echo $dog->performSound(); // Outputs: Bark
    

composition inheritance object-oriented programming code reuse software design maintainability