• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:インターフェイス 抽象クラス)

インターフェイスと抽象クラスについて

このQ&Aのポイント
  • PHP初心者です。インターフェイスと抽象クラスについて理解が追い付きません。
  • 抽象クラスの必然性やインターフェイスのメリットについて教えてください。
  • 抽象クラスやインターフェイスの使い方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.1

例えば、プラグイン形式のプログラムを作ることを考えてみようか。そのプログラムでは、指定したフォルダにあるファイルを読み込み、そこにあるクラスをメニューに登録して表示する。メニューを選ぶと、そのクラスにある、プラグイン処理実行用のメソッドを実行する、という感じだ。 プログラムには「どんなプラグインが追加されるか」はわからない。どんなものでも、作って入れれば動くようにするのがプラグインだからな。そこで、ある人がプラグインを作って入れてみた。ところがそれをメニューから呼び出すとエラーになる。なぜか? あらかじめ指定されたメソッドを用意してなかったからだ。 こういう問題を防ぐためには、「プラグインのクラスには、必ず○○というメソッドを用意しなければいけない」ということを保障しないといけない。さあ、どうする? あるクラスに、必ずあるメソッドが含まれてないといけないようにするには?「こう作って下さい」と注意書きを書いても必ず忘れる人間は出てくる。もし、そこでエラーが起こるとプログラムに致命的な問題が発生してしまうような構造になっていたりすると、「動かなければエラーになってとまっておしまい」じゃ話はすまなくなる。 そこで、抽象クラスやインターフェイスが登場する。これらは、必ずサブクラスを作ってそこにあるメソッドをすべて実装しないといけない。つまり「クラスにある決まったメソッドを必ず用意すること」を強制的に行わせることができる。かくて、プラグインクラスは、あらかじめ用意された抽象クラスを継承して作るように設計し、問題は解決する。めでたしめでたし。 抽象クラスとインターフェイスの違いとか、他にもいろいろ理解しないといけないことはあるが、こういう「ある仕組みのもっとも基本となる部分を抽象クラスやインターフェイスで用意することで、必ずその機能がそこに存在するという前提でプログラムを構築できる」ということは理解しておくといいだろう。

--w--
質問者

お礼

ありがとうございました!

関連するQ&A