【S4】問5解答例

 このリファクタリング例では、抽象クラスAnimalとクラスDogCatに分割し、共通の振る舞いを持つ抽象メソッドを実装しました。
それにより、メンテナンスしやすくなり可読性も向上しました。また、クラスはそれぞれの種類の動物を表現し共通の振る舞いを適切に実装しています。

<?php

/**
 * 抽象クラスAnimalを定義
 */
abstract class Animal
{
    abstract public function makeSound(): void;

    abstract public function eat(): void;
}
                    
<?php

/**
 * 具象クラスDogを定義
 */
class Dog extends Animal
{
    public function makeSound(): void
    {
        echo "ワンワン" . PHP_EOL;
    }

    public function eat(): void
    {
        echo "ドッグフードを食べました" . PHP_EOL;
    }
}
                    
<?php

/**
 * 具象クラスCatを定義
 */
class Cat extends Animal
{
    public function makeSound(): void
    {
        echo "ニャーニャー" . PHP_EOL;
    }

    public function eat(): void
    {
        echo "キャットフードを食べました" . PHP_EOL;
    }
}
                    
<?php

$dog = new Dog();
$dog->makeSound();
$dog->eat();

$cat = new Cat();
$cat->makeSound();
$cat->eat();