• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:インターフェースでオブジェクトを取得する意味)

インターフェースでオブジェクトを取得する意味

このQ&Aのポイント
  • インターフェースの利点として、プログラムの依存関係を解消することが挙げられます。具体的には、実装クラスに依存するのではなく、インターフェースに依存することで、プログラムの拡張性や柔軟性を高めることができます。
  • 例えば、戻り値の型が実装クラスの型である場合、実装クラスが変更された際に、呼び出し元のプログラムにも修正が必要となります。一方で、戻り値の型がインターフェースである場合、インターフェース名の変更などの影響が限定的であるため、修正の範囲を最小限に抑えることができます。
  • さらに、インターフェースを利用してオブジェクトを取得することで、コードの耦合度を下げることができます。具体的には、戻り値の型がインターフェースである場合、呼び出し元のプログラムは実装クラスの詳細な情報を意識する必要がなくなります。これにより、オブジェクトの実装が変更された場合でも、呼び出し元のプログラムには影響を与えずに済みます。

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

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.3

> 呼び出し元を変更せずにこれらのexecuteService()を > 呼び出すように変更したいとなったときにはどうすればよいのか /spring/conf/applicationContext.xmlを修正する。 Spring以外なら、Factoryメソッドを修正する。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.2

メソッドが増えたり減ったり、名前が変わったりという話ではありません。 この例では実装クラスが1つしかないため、インターフェースを用いる利点がわかりにくいですが、 SearchGoodsServiceの実装クラスが増えた場合のことを考えてみてください。 呼び出し元ではSearchGoodsServiceと書いておけば、 機能拡張で新しくSearchGoodsServiceImpl2やSearchGoodsServiceImpl3も扱う必要がでてきても、 呼び出し元を修正する必要はありません。

unko347
質問者

補足

ご回答ありがとうございます。 すみません。実際に SearchGoodsServiceImpl2やSearchGoodsServiceImpl3 を作ってみたのですが 呼び出し元を変更せずにこれらのexecuteService()を 呼び出すように変更したいとなったときにはどうすればよいのか がイメージできないです。教えていただけますでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

> ここで1つ疑問なのですが 戻り値の型が実装クラスの型であっても > SearchGoodsServiceImplがどう変更(メソッドが増えたり、減ったり)しても影響がないと思います。 変更する必要性があって修正しているのですから、影響は出ますよね。 > また、戻り値の型がインターフェースであたとしてもSearchGoodsServiceという > インターフェース名の変更があった場合、呼び出し元の > 全てのプログラムを修正しなくてはならないと思いますがいかがでしょうか。 もちろんです。そういうことをしなくていいように設計しなければなりません。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オブジェクト指向のインターフェースについて質問です

    素朴な疑問かもしれませんが、真剣に根本的な疑問です よろしくお願いします 複数人でなく、一人でプログラムを作るときには インターフェースにはどんな使い方がありますか? 多人数でプログラムを作る場合にはクラスを作る人たちへの どんなクラスを作って欲しいかの設計メモ代わりになったり 必要なメソッドの作り漏れ防止の意味で使われると聞きました。 しかし、一人でプログラムを作る場合には わざわざインターフェースを作ってからそれを実装するのは どのような意味があるのでしょうか?

    • ベストアンサー
    • Java
  • インターフェース

    インターフェースについて学ぼうと思っているのですが、 どうもいまいち何がなんだかわからなくなっています。 インターフェースはクラスによって実装され、 実装クラスはインターフェースで宣言されている 抽象メソッドを実行する とあるのですが、実装とは何ですか? 抽象メソッドとは何ですか?

    • ベストアンサー
    • Java
  • インターフェイスと抽象クラス

    なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。

    • ベストアンサー
    • Java
  • オブジェクトの問題です。 お願いします。

    処理内容: 以下の3つのクラスを作成し、実行し、以下の結果を得るプログラムを作成せよ。 実行例 佐藤さんの体重は、85キログラムです。 (1) 抽象クラスの作成 クラス名 People name: String型、perivate宣言 getText(): 戻り値の型は、String publicなabstractメソッド getName(): 戻り値の型は、String publicメソッド People(): namaeを設定するpublicなコンストラクタ (2) 抽象クラスの実装 クラス名 Taiju weight: int型 private宣言 体重を表す Taiju(): 名前と体重を設定するコンストラクタ getText(): 戻り値の型は、String 抽象メソッドをオーバーライドしたメソッド 「○○さんの体重は、◇kgです。」 という、文字列を返すメソッドとする。 (3) メインクラス クラス名 MainTaiju Taijuクラスのインスタンスを、”佐藤”、85 のコンストラクで作成。 あと、出力例のように出力。

  • フレームワークによくあるインターフェースについて

    たとえばSpringだとInitializingBeanインターフェースを 実装してafterPropertiesSetメソッドに処理を書くことによって Beanを初期化したときにその処理が実行されるようですが、 これはどのような仕組みでそのインターフェースを実装しているか どうかを判断しているのでしょうか? getInterfacesメソッドを使うとそのクラスが実装している インターフェースを調べることができるようですが、 これは親クラスのインターフェースまでは調べられないようですし、 フレームワークはどのようにしてそのクラスが実装している インターフェイスを判定しているのか不思議です。

    • ベストアンサー
    • Java
  • インターフェイスの使い方がわかりません(初心者です)

    Javaを始めたばかりの初心者です。 「やさしいJava」を買って一通り学んだのですが、 インターフェイスの使い方がよくわからず、困っています。 インターフェイスを実装することでインターフェイスが持つメソッドがすべて定義されてることが保障される、 というのはわかるんですが、そのことがどうして有用なのでしょう? また、具体的にはスレッドを扱うときにRunnableインターフェイスを実装する理由がわかりません。 Threadクラスのオブジェクトを作成するときに、 Runnableを実装したクラスのオブジェクトの変数を 引数にしないといけないんですよね? このとき、Runnableインターフェイスが 「runメソッドが定義されていなければならない」 とだけいうものだったとしたら、 Runnableを実装してなくてもrunメソッドさえ定義してあれば 実行できそうな気がするんですが・・・

    • ベストアンサー
    • Java
  • RubyでJavaのInterfaceに相当するものはありますか?

    RubyでJavaのInterfaceに相当するものはありますか? Ruby 上で Javaの interface のようなものものを実現するには、どうしたらよ いのでしょうか? Rubyは型を宣言しないので機能的には interface は不要ですが。 クラスを実装する人に、あるクラスに実装しなければいけないメソッドを伝える (強制する)目的としての interface 的な使い方をしたいのです。 宜しくお願いいたします。

  • Interface変数について

    C#勉強初めて間もない者です。 Interfaceについて教えて頂きたい事あります。 Interfaceとは規約を定める為のクラスで、メソッドは定義してあるだけで中身はそのInterfaceを継承したクラスで実装する物だと認識しています。 そこで以下のようなコーディングに出会い混乱しました。。。 IList loList = "22,22,".Split(','); ※へたくそな例ですがお許し下さい 上記のコーディングで、中身のないインターフェイスのloList変数が何故抽象メソッドして定義されている「Add」やプロパティ「Count」が使えるようになるのでしょうか? ご質問に答えて下さる方いらっしゃいましたら宜しくお願いします。

  • インターフェイスと抽象メソッドについてお願いします。

    PHPの参考書で「抽象メソッド」と「インターフェイス」それに「実装」という言葉が出てきました。 プログラミングが初めてで全然理解できなく困っています。 ・抽象メソッド ・インターフェイス ・実装 上記の意味とメリットなどを教えてください。それとどのような面で使うのかも教えていただけると嬉しいです。 すみませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 抽象クラスとインターフェースの使い分け

    抽象クラスとインターフェース、この2つの違い、使い分け方が未だにはっきりとはわかりません・・・ 抽象クラスもインターフェースも実装は持たず、抽象クラスはサブクラスで、インターフェースはそれをインプリメントしたクラスで実装を行うのですよね? 両者ともに言わば中身はなく外枠だけ定義されていると言えると思うのですが、だとしたらこの2つの違いや使い分けってどうなるのでしょうか。 抽象クラスでは部分的な実装を含められることや、インターフェースでは実装クラスが全てのメソッドを実装しなければいけない、複数実装できるといった使い方の違いしかないのでしょうか。 だとしたら実際に抽象クラスとして用意するのかインターフェースとして用意するのかの選択基準はなんなのでしょうか。 明確にこういう場合は抽象クラス、こういう場合はインターフェースなどと言った使い分けってあるのでしょうか。

Epson Scan 2が起動できない
このQ&Aのポイント
  • Epson Scan 2を起動しようとすると、「以下のユーザーがスキャナーを使用中です。終了を待って再試行してください。」というメッセージが出て、接続できません。
  • 電源を切ってもEpson Scan 2を起動できません。
  • 自宅には他の機器は接続されていません。
回答を見る