私は Java のインターフェースの価値を知っており、理解しています。インターフェイスにコーディングすると、インターフェイスを使用してコードを変更することなく、実装を変更できます。多くの場合、「契約」という用語はインターフェースに関連して使用されます。私が理解している方法は、インターフェイスがアプリケーションと実装の間の「契約」を定義していることです。
したがって、実装を作成するときは、契約を履行する必要があります。私の質問は、私が履行しなければならない契約の内容は正確には何ですか?
明らかに、少なくともインターフェイスと同じシグネチャを持つメソッドを提供する必要があります。それ以外の場合、コードはコンパイルされません。「契約」ってそれだけ?もっとあるべきだと思われる。
たとえば、インターフェイスのテストと特定の実装のテストの価値、またはその両方を行うことの価値について議論している記事を読んだことがあります。どの入力がどのような出力を期待するかを知るために、インターフェイスのテストを行うことには大きな価値があると思います。これもインターフェースの「契約」の一部になるように思えます。インターフェイスのすべての実装は、同じ入力から同じ出力を生成する必要があります。明らかに、このコントラクトをコードで強制する方法はありませんが、テスト ケースを通じて強制することはできます。ここで私の考えは間違っていますか?
最後に、実装が持つ副作用についてはどうでしょうか? ここでは、主に、実装の一部として発生する可能性のある永続性について話しています。操作の実行中にいくつかのレコードを DB に保存する実装があるとします。これはどういうわけかインターフェースの「契約」の一部になるのでしょうか? もしそうなら、どのようにこの契約を強制することができますか? インターフェイス レベルからは、実装が実際に何をしているのかわかりません。私が知っているのは、入力を与えることと、テストできる出力が得られることだけです。発生する永続性も「出力」と見なされますか? もしそうなら、これをどのようにテストして実施できるかわかりません。私は持続性無知の支持者なので、何かを持続する必要があることはわかっていましたが、方法がわかりません。それは永続化されます。ですから、何かが実際にいつ持続したかを知る方法がわかりません。単純な CRUD 操作ができるインターフェイスなら簡単かもしれませんが、もっと複雑なインターフェイスについて考えてみたいと思います。
私の質問が理にかなっており、誰かが良いフィードバックを提供できることを願っています. これについては一般的に説明したいと思いますが、何について話しているのか明確でない場合は、具体的な例を示すことができます。