[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
質問
ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
どのように解決するのですか?
ギリシャ語の語源を考えれば、自ずと見えてくるはずです。
- ポリ=多数:ポリゴン=多面体、ポリスチレン=多数のスチレン類 (a) や、ポリグロット=多言語、などなど。
- Morph = 変化、形:Morphology = 生物学的形態の研究、Morpheus = あらゆる形態をとることができるギリシャ神話の夢の神。
つまり、ポリモーフィズムとは、(プログラミングにおいて)異なる基本形(データ型)に対して同じインタフェースを提供する能力のことである。
例えば、多くの言語では、整数や浮動小数点は型が違っても足したり引いたりかけたりできるので、暗黙のうちにポリモーフィックであると言えます。通常の用語でいうところのオブジェクトとみなされることはほとんどない。
しかし、それと同様に
BigDecimal
または
Rational
または
Imaginary
は、異なるデータ型に対して操作するにもかかわらず、これらの操作を提供することができます。
典型的な例としては
Shape
クラスと、それを継承するすべてのクラス(正方形、円、正十二面体、不規則多角形、スプラットなど)です。
ポリモーフィズムによって、これらのクラスはそれぞれ異なる基礎データを持つことになります。点の形状は、2つの座標だけが必要です(もちろん2次元空間にあると仮定して)。円は、中心と半径が必要です。正方形や長方形は、左上と右下の角の2つの座標と、(場合によっては)回転が必要です。不規則な多角形には、一連の線が必要です。
クラスがデータだけでなくコードにも責任を持つようにすることで、ポリモーフィズムを実現することができます。この例では、すべてのクラスが独自の
Draw()
関数があり、クライアントコードは単にそれを実行するだけでよい。
shape.Draw()
を使えば、どんなシェイプでも正しい動作が得られます。
これは、コードがデータから分離していた昔のやり方とは対照的で、次のような関数がありました。
drawSquare()
と
drawCircle()
.
オブジェクト指向、ポリモーフィズム、継承はいずれも密接に関連した概念であり、知っておくべき重要なものです。私の長いキャリアの中で、多くの「銀の弾丸」がありましたが、OOパラダイムは良いものであることが判明しています。それを学び、理解し、好きになる。)
(a)
当初は冗談で書いたのですが、正しいことが判明したので、それほど面白くはないですね。スチレンというモノマーは、たまたま炭素と水素からできているのです。
C8H8
で、ポリスチレンはそのグループから作られています。
(C8H8)n
.
ポリープとは、文字がたくさん出てくることである、と述べた方がよかったかもしれません。
p
しかし、このジョークを説明しなければならなくなった今、それさえも面白いとは思えなくなった。
時には、遅れている間に辞めた方がいい :-)
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Inversion of Controlとは?
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] NP、NP-Complete、NP-Hardの違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】「結合度が低く、結合度が高い」とはどういう意味ですか?
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] nullを返すのは設計ミス?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
-
[解決済み] インターフェースとベースクラス
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み] コヒーシ ョンとカップリングの違い
-
[解決済み】依存関係逆転の原則とは何ですか、なぜそれが重要なのですか?
-
[解決済み] Delegateとは?[クローズド]。
-
[解決済み] プライベートとプロテクト-ビジビリティ・グッド・プラクティスの懸念点【終了しました
-
[解決済み] nullを返すのは設計ミス?[クローズド]
-
[解決済み] Dependency InjectionはEncapsulationを犠牲にしなければならないのか?