インターフェース
これまでになかった問題を解決するツールの目的を理解することは困難です。プログラミングを始めてからしばらくの間、インターフェイスを理解していませんでした。私たちは彼らが何をしたかを理解しますが、なぜあなたがそれを使いたいのか分かりませんでした。
ここに問題があります-あなたは何をしたいのか知っていますが、あなたはそれをするための複数の方法を持っています、またはあなたは後でそれをする方法を変えるかもしれません。あなたが無知なマネージャーの役割を演じることができればいいでしょう-いくつかの注文をkえ、それがどのように行われても気にせずにあなたが望む結果を得ることができます。
小さなウェブサイトがあり、ユーザーのすべての情報をcsvファイルに保存するとします。最も洗練されたソリューションではありませんが、お母さんのユーザーの詳細を保存するには十分に機能します。その後、サイトが離陸し、10,000人のユーザーがいます。たぶん、適切なデータベースを使用するときです。
最初は賢い人なら、これが来るのを見て、csvに直接保存するための呼び出しを行わなかったでしょう。代わりに、どのように実装されたとしても、それを行うために必要なことを考えます。さんとしましょうstore()
とretrieve()
。あなたは作るPersister
ための抽象メソッドとのインタフェースをstore()
し、retrieve()
そして作成しCsvPersister
、実際にそれらのメソッドを実装するサブクラスを。
後で、DbPersister
csvクラスが実際に行った方法とはまったく異なる方法で、実際のストレージとデータの取得を実装するを作成できます。
素晴らしいことは、あなたが今しなければならないのは変化です
Persister* prst = new CsvPersister();
に
Persister* prst = new DbPersister();
これで完了です。あなたの呼び出しprst.store()
とprst.retrieve()
、すべてまだ作業は、彼らは単に「舞台裏」異なった方法で処理しています。
今、あなたはまだcvsとdbの実装を作成しなければならなかったので、あなたはまだボスであるという贅沢を経験していません。本当の利点は、他の誰かが作成したインターフェイスを使用している場合に明らかです。他の誰かが作成するために親切にした場合CsvPersister()
やDbPersister()
、すでに、あなたは1を選択し、必要なメソッドを呼び出す必要がありますだけ。後で別のプロジェクトを使用する場合、または別のプロジェクトで使用する場合は、その機能がすでにわかっています。
私はC ++で本当にさびているので、いくつかの一般的なプログラミング例を使用します。コンテナは、インターフェースがどのようにあなたの生活を楽にするかを示す素晴らしい例です。
あなたは持つことができArray
、LinkedList
、BinaryTree
、などのすべてのサブクラスのContainer
ようなメソッドを持っていますinsert()
、find()
、delete()
。
リンクされたリストの途中に何かを追加するとき、リンクされたリストが何であるかを知る必要さえありません。呼び出すだけでmyLinkedList->insert(4)
、リストを魔法のように繰り返してそこに貼り付けます。リンクされたリストがどのように機能するかを知っていても(実際にそうすべきです)、その特定の機能を調べる必要はありませんContainer
。
抽象クラス
抽象クラスはインターフェイスにかなり似ています(技術的にはインターフェイスは抽象クラスですが、ここではメソッドの一部が具体化された基本クラスを意味します。
あなたがゲームを作成しているとしましょう。そして、敵がプレイヤーのすぐそばにいるときを検出する必要があります。Enemy
メソッドを持つ基本クラスを作成できますinRange()
。敵にはさまざまなものがありますが、敵の範囲を確認する方法は一貫しています。したがって、Enemy
クラスには範囲をチェックするための肉付けされたメソッドがありますが、敵のタイプ間で類似性を共有しない他のことのための純粋な仮想メソッドがあります。
これの良いところは、範囲検出コードを台無しにしたり、微調整したい場合、一箇所で変更するだけです。
もちろん、インターフェイスと抽象基本クラスには他にも多くの理由がありますが、それらを使用する理由はいくつかあります。
シングルトン
私は時々それらを使用します、そして、私は彼らによって決して燃やされませんでした。それは、他の人々の経験に基づいて、彼らがいつか私の人生を台無しにしないと言うことではありません。
ここに、より経験豊富で警戒心の強い人々からのグローバルな状態に関する良い議論があり
ます。