1. ホーム
  2. oop

[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?

2022-03-16 10:55:57

質問

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

どのように解決するのですか?

ギリシャ語の語源を考えれば、自ずと見えてくるはずです。

  • ポリ=多数:ポリゴン=多面体、ポリスチレン=多数のスチレン類 (a) や、ポリグロット=多言語、などなど。
  • Morph = 変化、形:Morphology = 生物学的形態の研究、Morpheus = あらゆる形態をとることができるギリシャ神話の夢の神。

つまり、ポリモーフィズムとは、(プログラミングにおいて)異なる基本形(データ型)に対して同じインタフェースを提供する能力のことである。

例えば、多くの言語では、整数や浮動小数点は型が違っても足したり引いたりかけたりできるので、暗黙のうちにポリモーフィックであると言えます。通常の用語でいうところのオブジェクトとみなされることはほとんどない。

しかし、それと同様に BigDecimal または Rational または Imaginary は、異なるデータ型に対して操作するにもかかわらず、これらの操作を提供することができます。

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

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

クラスがデータだけでなくコードにも責任を持つようにすることで、ポリモーフィズムを実現することができます。この例では、すべてのクラスが独自の Draw() 関数があり、クライアントコードは単にそれを実行するだけでよい。

shape.Draw()

を使えば、どんなシェイプでも正しい動作が得られます。

これは、コードがデータから分離していた昔のやり方とは対照的で、次のような関数がありました。 drawSquare()drawCircle() .

オブジェクト指向、ポリモーフィズム、継承はいずれも密接に関連した概念であり、知っておくべき重要なものです。私の長いキャリアの中で、多くの「銀の弾丸」がありましたが、OOパラダイムは良いものであることが判明しています。それを学び、理解し、好きになる。)


(a) 当初は冗談で書いたのですが、正しいことが判明したので、それほど面白くはないですね。スチレンというモノマーは、たまたま炭素と水素からできているのです。 C8H8 で、ポリスチレンはそのグループから作られています。 (C8H8)n .

ポリープとは、文字がたくさん出てくることである、と述べた方がよかったかもしれません。 p しかし、このジョークを説明しなければならなくなった今、それさえも面白いとは思えなくなった。

時には、遅れている間に辞めた方がいい :-)