「こんにちは、アミーゴ! もう一度私です。インターフェースについて別の観点から説明したいと思います。ほら、ほとんどの場合、クラスは特定のオブジェクトのモデルです。対照的に、インターフェースはオブジェクトの能力やオブジェクトのモデルに似ています。オブジェクト自体ではなく、役割です。」
たとえば、車、自転車、オートバイ、車輪などは、クラスとオブジェクトとして表すのが最適です。しかし、「移動できる」、「人を運ぶことができる」、「駐車できる」などの能力は、インターフェースとしてより適切に表現されます。この例を確認してください。
Javaコード | 説明 |
---|---|
|
移動能力に相当します。 |
|
移動能力に相当します。 |
|
荷物を運ぶ能力に対応します。 |
|
«wheel» クラス。移動能力がある。 |
|
「車」クラス。移動したり、人が運転したり、荷物を運んだりする能力があります。 |
|
「スケートボード」のクラスです。人によって移動し、制御される能力を持っています。 |
インターフェイスはプログラマの作業を大幅に簡素化します。プログラムには、数千のオブジェクト、数百のクラス、およびわずか数十のインターフェイス (ロール) が含まれることがよくあります。ロールの数は少ないですが、さまざまな方法 (クラス) で組み合わせることができます。
重要なのは、他のすべてのクラスとの相互作用を定義するコードを記述する必要がないということです。あなたがしなければならないのは、ロール (インターフェイス) と対話することだけです。
あなたがロボットビルダーであると想像してください。数十の従属ロボットがあり、それぞれが複数のスキルを持つことができます。急いで壁の建設を完了する必要があるとします。「建設」能力を持つすべてのロボットを取り出して、壁を建設するように指示するだけです。どのロボットがそれを行うかはあまり気にしません。それをロボットじょうろにしましょう。構築方法がわかっている場合は、構築させてください。コードでは次のようになります。
Javaコード | 説明 |
---|---|
|
「壁を築く」能力。「壁を築く」というコマンドを理解しています(適切な方法を持っています)。 |
|
この能力/スキルを持つロボット。
じょうろで壁を構築することはできません (WallBuilder インターフェイスは実装されていません)。 |
|
壁を築くように命令するにはどうすればよいでしょうか? |
「驚くほど興味深いですね。インターフェースがこれほど興味深いトピックになるとは夢にも思いませんでした。」
「それから、さらにいくつかのことです。ポリモーフィズムと合わせて、それはまったく驚くべきものです。」
GO TO FULL VERSION