ポリモーフィズムとは何か、何のためにあるのか、どのように使われるのか?質問する

ポリモーフィズムとは何か、何のためにあるのか、どのように使われるのか?質問する

ポリモーフィズムとは何ですか? 何のためにあるのですか? どのように使用されますか?

ベストアンサー1

この言葉のギリシャ語の語源を考えれば、それは明らかになるはずです。

  • poly = 多数: polygon = 多面体、polystyrene = 多数のスチレン(a)、polyglot = 多くの言語、など。
  • モーフ = 変化または形態: 形態学 = 生物学的形態の研究、モルフェウス = あらゆる形態をとることができるギリシャの夢の神。

したがって、ポリモーフィズムとは、(プログラミングにおいて)異なる基礎となる形式(データ型)に対して同じインターフェースを提示する能力です。

たとえば、多くの言語では、整数と浮動小数点は暗黙的に多態的であり、型が異なるという事実に関係なく、加算、減算、乗算などを行うことができます。通常の用語では、これらがオブジェクトと見なされることはほとんどありません。

しかし、同じように、BigDecimalRationalなどのクラスもImaginary、異なるデータ型を操作する場合でも、それらの操作を提供できます。

典型的な例は、Shapeクラスと、そこから継承できるすべてのクラス (正方形、円、十二面体、不規則な多角形、スプラットなど) です。

ポリモーフィズムにより、これらの各クラスは異なる基礎データを持つことになります。点形状には 2 つの座標のみが必要です (もちろん、2 次元空間にあると仮定)。円には中心と半径が必要です。正方形または長方形には、左上隅と右下隅の 2 つの座標と (場合によっては) 回転が必要です。不規則な多角形には、一連の線が必要です。

クラスにデータだけでなくコードも管理させると、ポリモーフィズムを実現できます。この例では、すべてのクラスに独自のDraw()関数があり、クライアント コードでは次の操作を簡単に実行できます。

shape.Draw()

あらゆる形状に対して正しい動作を実現します。

drawSquare()これは、コードがデータから分離され、や などの関数があった従来の方法とは対照的ですdrawCircle()

オブジェクト指向、ポリモーフィズム、継承はすべて密接に関連した概念であり、知っておく必要があります。私の長いキャリアの中で、基本的に消え去った「銀の弾丸」がたくさんありましたが、OO パラダイムは良いものであることがわかりました。それを学び、理解し、愛してください。そうすれば、きっと満足するでしょう :-)


(a)最初は冗談で書いたのですが、実際は正しかったので、それほど面白くありませんでした。モノマーのスチレンは炭素と水素からできており、ポリスチレンはそのグループからできています。C8H8(C8H8)n

おそらく、この文字が何度もポリープを表していると述べるべきだったのでしょpうが、このジョークを説明しなければならなくなった今となっては、それも面白くないように思えてしまいます。

時には、遅れているうちに辞めたほうがいいこともあります :-)

おすすめ記事