オブジェクト思考 ポリモーフィズムの有用性について
注意
未経験から転職した、一年目のエンジニアが、作成したものになります。
そのため、至らぬ表現や、誤った表現をしている場合があります。
経験豊富な先輩エンジニアの方々へ
もし、誤った情報を記載していた際は、大変お手数をおかけしますが、ご指摘いただけますと幸いです。
少しでも、皆様のお役に立てれば幸いです。
この記事について
エンジニア歴 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 には、特別な意味があるのか?」、「何か挙動が異なるのか?」
実際に異なる場合は良いのですが、同じような実装の場合、わざわざ読み手を混乱させる必要はありません。
つまり、ポリモーフィズムを活用すると、読み手(コードを使用する人)が、直感的にコードを理解できるようになります。
まとめ
ポリモーフィズムを利用することで、
受け手と読み手、それぞれにメリットがあることを学びました。
- 書き手:記述する「メソッドの数」を減らせるため、コードの記述量や、タイポが減る。
- 読み手:異なるクラス(インスタンス)に対して、同じようにメソッドを使用できる。
少しでもお役に立てば、幸いです。