「こんにちは、アミーゴ! 今日はインターフェイスが存在する理由についてお話したいと思います。特定のクラス、オブジェクト、またはエンティティが特定のインターフェイスをサポートしているという話をよく聞きます。インターフェイスをサポートするとはどういう意味ですか?」
広い意味では、インターフェイスは何かが他のものと相互作用するためのメカニズムです。たとえば、テレビのリモコンはリモート インターフェイスです。犬はコマンドを理解して実行します。これは、犬が音声 (制御) インターフェイスをサポートしていることを意味します。まとめると、インターフェイスは 2 つのものが対話するための標準化された方法であり、双方が標準を知っていると言えます。人が犬に「お座り」と言うとき、そのコマンドは「犬の音声制御インターフェイス」の一部であり、犬がコマンドに従う場合、犬はインターフェイスをサポートしていると言います。
それはプログラミングにおいても同じです。メソッドは、オブジェクトやそのデータに対して実行されるアクションです。そして、クラスが特定のメソッドを実装している場合、そのクラスは特定のコマンドの「実行をサポート」します。メソッドをインターフェースに組み合わせることで何が得られるのでしょうか?
1)各インターフェースは、クラスと同様に、一意の名前を持ちます。両当事者は、相手方が類似のインターフェイスではなく、自分が知っている正確なインターフェイスをサポートしていることを 100% 確信できます。
2)各インターフェイスは、それをサポートするクラスに特定の制限を課します。クラス (その開発者) は、インターフェイスから継承されたメソッドが呼び出されたときに何を行うかを決定しますが、結果は合理的な期待の範囲内である必要があります。犬に「お座り」と命令し、5分間その場で転がってから座る場合、犬はインターフェースをサポートしていることになります。しかし、逆に足を掴まれてしまったら、そのインターフェースをサポートしているとは言えません。コマンドを実行しても予期した結果が得られませんでした。
あなたとあなたの友人がコンピュータ ゲームを作成しているとします。そして、あなたは 1 人のキャラクターの動作をプログラムするように割り当てられました。同僚の 1 人が、画面上にすべての文字を表示するコードをすでに作成しています。ゲームをディスクに保存する責任を負う 2 人目の同僚は、すべてのゲーム オブジェクトをファイルに保存するコードを作成しました。彼らはそれぞれ、多くのコードを書き、そのコードを操作するためのインターフェイスを作成しました。たとえば、次のようになります。
Javaコード | 説明 |
---|---|
|
— マップからオブジェクトを保存/ロードするためのインターフェイス。 |
|
— 渡された Screen オブジェクト内にオブジェクトを描画するためのインターフェイス。 |
|
— 2 つのインターフェイスをサポートするクラス。 |
言い換えれば、任意のインターフェイス (インターフェイスのグループ) をサポートするには、クラスは次のことを行う必要があります。
1)継承する
2)その中で宣言されているメソッドを実装します。
3)メソッドは、意図されたとおりの動作を実行する必要があります。
そうすれば、クラスとそのオブジェクトについて何も知らないプログラムの残りのコードは、クラスを操作できるようになります。
「なぜコードは私のクラスについて何も知ることができないのですか?」
「1 年前に誰かが書いたプログラムからコードを取得したとしましょう。あるいは、友達が他の人からゲーム エンジンを購入/ライセンス供与したとします。あなたにはゲーム用の動作するコードがあります。相互にやり取りする何千ものオブジェクトがあります。そしてそれらはクラスが正しく実装したインターフェイスを通じて相互作用を実現すれば、オブジェクトと簡単に正しく相互作用できます。」
「遠い!そんなことが可能だとは知りませんでした。」
「すべての大きなプロジェクトはこのように機能します。人々はずっと前にゼロから書くことをやめました。」
また、人々は毎回数学やアルファベットを再発明するわけではありません。代わりに、彼らは自分たちの前に発明されたものすべてを研究します。
GO TO FULL VERSION