LoginSignup
0
0

オブジェクト思考 ポリモーフィズムの有用性について

Posted at

オブジェクト思考 ポリモーフィズムの有用性について

注意
未経験から転職した、一年目のエンジニアが、作成したものになります。
そのため、至らぬ表現や、誤った表現をしている場合があります。

経験豊富な先輩エンジニアの方々へ
もし、誤った情報を記載していた際は、大変お手数をおかけしますが、ご指摘いただけますと幸いです。

少しでも、皆様のお役に立てれば幸いです。

この記事について

エンジニア歴 15 年の上司から学んだ「知識・考え方」をシェアをする記事です。
今回は、「オブジェクト思考 ポリモーフィズムの有用性」についてです。

結論

書き手と読み手、それぞれにメリットがあります。

  • 書き手:記述する「メソッドの数」を減らせるため、コードの記述量や、タイポが減る。
  • 読み手:異なるクラス(インスタンス)に対して、同じようにメソッドを使用できる。

それぞれ、説明します。

書き手へのメリット

記述する「メソッドの数」を減らせるため、コードの記述量や、タイポが減る。

理由はシンプルです。
クラス間で必要なメソッドを統一化することで、各クラスごとにメソッドを定義する必要がなくなります。

例えば、車を例にすると、、、

class Car{
    void run(){
    // メソッドの中身
    }
}

class Prius extends Car{
    void priusRun(){
    // メソッドの中身
    }
}

と、

class Car{
    void run(){
        // メソッドの中身
    }
}

class Prius extends Car{
    @Override
    void run(){
        // メソッドの中身
    }
}

の違いになります。

規模が小さいコードであれば、気にならないかもしれません。
しかし、コードが多くなるにつれ、メソッドが多数存在していると、混乱します。
「保守性の低下につながるので、極力メソッドの数は減らした方がいい」と言うことを考えると、大切なことです。

読み手へのメリット

異なるクラス(インスタンス)に対して、同じようにメソッドを使用できる。
実は、こちらの方が重要です。

上記の例をそのまま用います。

もし Car と Prius が、別のメソッドを持っているとします。
すると、メソッドの呼び出しは、以下になります。

Car car = new Car;
car.run();

Prius prius = new Prius;
prius.priusRun();

しかし、もし同じメソッド名の場合は、

Car car = new Car;
car.run();

Prius prius = new Prius;
prius.run();

となります。

ここで、「priusRun」に、違和感を感じると思います。

「何か、priusRun には、特別な意味があるのか?」、「何か挙動が異なるのか?」
実際に異なる場合は良いのですが、同じような実装の場合、わざわざ読み手を混乱させる必要はありません。

つまり、ポリモーフィズムを活用すると、読み手(コードを使用する人)が、直感的にコードを理解できるようになります。

まとめ

ポリモーフィズムを利用することで、
受け手と読み手、それぞれにメリットがあることを学びました。

  • 書き手:記述する「メソッドの数」を減らせるため、コードの記述量や、タイポが減る。
  • 読み手:異なるクラス(インスタンス)に対して、同じようにメソッドを使用できる。

少しでもお役に立てば、幸いです。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0