2

重複の可能性:
「インターフェイスにプログラムする」とはどういう意味ですか?

まず第一に、インターフェースという用語とJavaのインターフェースには違いがあると思いますが、その違いが何であるかはよくわかりません。

「実装ではなくインターフェイスにプログラムする」と書かれているときの私の最初の質問は、インターフェイスまたはJavaインターフェイスを意味するのですか?

私は真っ先に設計パターンを読んでいて、実装へのプログラムではなく、インターフェイスへのプログラムについて混乱していました。私の理解では、サブクラスは具体的な実装であり、インターフェースはスーパークラス(インターフェースまたは抽象クラスまたは単純クラス)です。

私の 2 番目の質問は、インターフェイスへのプログラムとは、コードが INTERFACE(スーパークラス) にあり、サブクラスがそれを継承したことを意味するということです。そして、彼らがプログラムを IMPLEMENTATION(subclass) と言う場合、コードはサブクラスにありますか?? コードを変更し、コードがサブクラス(具体的な実装)にある場合、すべてのサブクラスコードを変更する必要があるため、「再利用」という用語のためにこれについて考えます。そのインターフェイスのコードを変更するだけです。

インターフェイスへのプログラムの例(簡単にしてください)と実装も役立ちます。

3番目の質問具体的なクラスにプログラムする場合よりもインターフェイスにプログラムする場合の利点は何ですか?

4

1 に答える 1

2

まず第一に、私はその本を読んでいないので、これが著者の意図したものであると断言することはできませんが、私はこの文をどのように理解していますか.

それが何を意味するかについての私の理解は、クラスとメソッドをブラックボックスとして扱う方法でプログラミングする必要があるということです.インターフェイス、スーパークラス、ドキュメントなどで定義されているelse。このようにして、コードベースの残りの部分に影響を与えることなく、実装を簡単に変更できます。

これの良い例は、名前としましょう。関数を定義して、新しい名前を追加したり、削除したり、印刷したりできます。以下のようなインターフェイスでこれらの関数を定義すると、それらを実装するクラスがそれらを格納するために配列を使用するかリストを使用するかを気にすることなく使用できます。

interface Sequence {
    void add(String s);
    void delete(String s);
    void print();
}

これで、インターフェイスを実装するクラス SequenceAsList を作成し、これをアプリケーションで使用できるようになりました。すべてが正常に動作するとしますが、いくつかの場所でシーケンス内のアイテムの数が事前にわかっていて、パフォーマンスを向上させる必要があるため、リストの代わりに配列を使用したいと判断したとします。したがって、Sequence インターフェイスも実装する別のクラス SequnceAsArray を作成できます。これで、コードを変更する必要があるすべてのことを行うことができます

Sequence someSequence = new SequenceAsArray();

それ以外の

Sequence someSequence = new SequenceAsList();

それらは同じインターフェイスに従っているため、これを行うのは非常に簡単です。したがって、著者が主に提案しているのは、クラスとメソッドをブラックボックスとして扱うこのアプローチを取ることだと思います。

于 2012-04-21T22:31:15.360 に答える