ポリモーフィズムとは?

JSのinterfaceを調べていくうちに出てきた単語の”ポリモーフィズム”について調べたので共有しておきます。

この単語が出てきた文脈を紹介すると、”JavaScriptは変数に型という概念がないので、ポリモーフィズムのような振る舞いは簡単にできるのですが、逆に何でもできすぎるので機能を限定したインターフェースで定義した型の変数に入っているようにしたいと思いました”
参照元url) https://qiita.com/roomberry/items/71b1f9e7900cdee05f55

ポリモーフィズム:”それぞれが異なる型に一元的にアクセスできるようにする共通接点の提供。”

poly-morphism(ポリモーフィズム)
語根分解)
poly-多数
morph-形(ギリシャ語)
ということで、”多数の型を持ったもの”という意味が読み取れます。
morphの例)
・geo-morphic(地球の形の、地形の)
・anthropo-morphism(形)人間の姿に似せた

本題)
静的型付けの言語で関数などを定義する際には、引数や返り値のデータかたを指定しなければならないため、処理内容が同じでもデータ型ごとに整数よ、浮動小数点用、複素数型用…といったように異なる(名前が異なる)関数を何度も繰り返し定義しなくてはならず、呼び出し側も型ごとに異なる関数よ呼び出さなければならない。
しかし、
ポリモーフィズムに対応した言語では、同名の関数などを繰り返し定義することができ、型ごとに別々の関数を用意しなくても1つの(共通の名前を持つ)関数としてまとめることができる。
ただ、具体的な処理内容は型ごとに個別に記述しなければならない。

以上の内容を含めてこのURLの記事がとても理解しやすいですね。
https://medium-company.com/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0/

よくあるクラスの説明がポリモーフィズムの良い例でしたね。
この”ポリモーフィズム”があるおかげで、C言語のような関数型プログラミング言語と違い、”差分プログラミング”をしやすくなっているみたいです。
その他の要因には”継承”がありますが、これはまた後ほど勉強したいと思います。

・オブジェクト指向言語(Object Oriented Programming)の用語

オブジェクト:データ(変数)に処理(関数)をくっつけたもの。
クラス:オブジェクトの設計図
インスタンス:クラス(設計図)から作った具体的なオブジェクト
プロパティー:クラスの中に用意する変数(状態を保持)
メソッド:クラスの中に用意する関数(処理を担当)
メンバー:クラスの中のプロパティーやメソッドをまとめてメンバーと呼ぶ

クラスをインスタンス化実体化)してオブジェクトを作り、オブジェクトのメンバー(プロパティーメソッド)を呼び出せば、関数を呼び出すより色々な仕事をやらせることができる。
→関数が提供する機能よりも、オブジェクトが提供する機能の方が高機能

・次の記事は「継承」(オブジェクト指向の差分プログラミングの要素である、ポリモーフィズムと)についてまとめていきたいと思います

いいなと思ったら応援しよう!