私の大学の教授は、かつて多型性とカプセル化について説明する素晴らしい逸話を出しました。それはこのようになった。
ソーダマシンの仕組みを知っている人はいますか? (キューがなぜこれについて話すのか混乱しているのを見て)。いいえ?言っておくけど。
あなたは変更を取り入れて、マシンの中には、あなたが十分なお金を入れていることを確認するためにあなたのすべての変更を数える小さな猿です。あなたのソーダのボタンを押すと、あなたが押されたボタンを猿に伝える少しの光が当たって、あなたが正しい量の変化を入力したら、彼はあなたの選択をつかんで、あなたのソーダをつかむために小さな穴に投げる。
これはカプセル化の概念です。我々は、ソーダマシンの実装を非表示にします。あなたが内部を見ることができるようにそれらの空想的な、明確なウィンドウのいずれかを持っていない限り、あなたは正直なところ、それが本当にどのように動作するか分かりません。あなたが知っていることは、現金を入れてボタンを押して、十分に入れると飲み物を買うということだけです。それに追加する
、あなたはとてもため、限りマシンのインターフェイスは、あなたがそれを使用することができ、通常のソーダマシン・インターフェースを以下のように、ソーダマシンのインタフェースを使用する方法を知っています。これはインタフェース契約と呼ばれます。あなたが飲み物を飲み、寒くて、あなたが戻ってくる限り、マシンは南極からの飲み物をコンベアベルトで持ち歩くことができます。
ポリモーフィズムは、ソーダマシンインターフェイスを使用すると、さまざまなことを行う可能性があるという考えです。これが、カプセル化と多型が密接に関連している理由です。多形性では、SodaMachine
の実装を使用していることが分かります。これは変更することができ、その結果、さまざまなことをバックグラウンドで行うことができます。これは、1つのオブジェクトのSodaMachine
の能力が実際にインターフェイスの背後にあるマシンに応じて、MonkeySodaMachine
とConveyorSodaMachine
の両方として実際に機能する多形性の駆動コンセプトにつながります。
おそらく言葉はないが、十分に近い。基本的には、polymorphismとencapsulationという2つの概念に徹底的に陥っています。あなたが明確にしたいのなら教えてください。
あなたはライブラリとそのAPIの相棒を設計するための起動時に[多型](http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming) – Brian
あなたはインターフェイスが役立つだろう:) –
@Brian、多型ではありませんこの振る舞いはすでにサブクラス化によって生成できるので、完全な答えです。 – displayname