ポリモーフィズムとは何ですか? 何のためにあるのですか? どのように使用されますか?
ベストアンサー1
この言葉のギリシャ語の語源を考えれば、それは明らかになるはずです。
- poly = 多数: polygon = 多面体、polystyrene = 多数のスチレン(a)、polyglot = 多くの言語、など。
- モーフ = 変化または形態: 形態学 = 生物学的形態の研究、モルフェウス = あらゆる形態をとることができるギリシャの夢の神。
したがって、ポリモーフィズムとは、(プログラミングにおいて)異なる基礎となる形式(データ型)に対して同じインターフェースを提示する能力です。
たとえば、多くの言語では、整数と浮動小数点は暗黙的に多態的であり、型が異なるという事実に関係なく、加算、減算、乗算などを行うことができます。通常の用語では、これらがオブジェクトと見なされることはほとんどありません。
しかし、同じように、BigDecimal
やRational
などのクラスもImaginary
、異なるデータ型を操作する場合でも、それらの操作を提供できます。
典型的な例は、Shape
クラスと、そこから継承できるすべてのクラス (正方形、円、十二面体、不規則な多角形、スプラットなど) です。
ポリモーフィズムにより、これらの各クラスは異なる基礎データを持つことになります。点形状には 2 つの座標のみが必要です (もちろん、2 次元空間にあると仮定)。円には中心と半径が必要です。正方形または長方形には、左上隅と右下隅の 2 つの座標と (場合によっては) 回転が必要です。不規則な多角形には、一連の線が必要です。
クラスにデータだけでなくコードも管理させると、ポリモーフィズムを実現できます。この例では、すべてのクラスに独自のDraw()
関数があり、クライアント コードでは次の操作を簡単に実行できます。
shape.Draw()
あらゆる形状に対して正しい動作を実現します。
drawSquare()
これは、コードがデータから分離され、や などの関数があった従来の方法とは対照的ですdrawCircle()
。
オブジェクト指向、ポリモーフィズム、継承はすべて密接に関連した概念であり、知っておく必要があります。私の長いキャリアの中で、基本的に消え去った「銀の弾丸」がたくさんありましたが、OO パラダイムは良いものであることがわかりました。それを学び、理解し、愛してください。そうすれば、きっと満足するでしょう :-)
(a)最初は冗談で書いたのですが、実際は正しかったので、それほど面白くありませんでした。モノマーのスチレンは炭素と水素からできており、ポリスチレンはそのグループからできています。C8H8
(C8H8)n
おそらく、この文字が何度もポリープを表していると述べるべきだったのでしょp
うが、このジョークを説明しなければならなくなった今となっては、それも面白くないように思えてしまいます。
時には、遅れているうちに辞めたほうがいいこともあります :-)