あなたの誤解は、「情報を隠す」という意味から来ています。これを聞いた人は誰でも、インターフェースを実装することで、クラスがその前向きメソッドを内部実装から分離できるようになるということを意味していました。
これは「カプセル化」とも呼ばれ、その利点は、デザイナーがオブジェクトのパブリックインターフェイスの周りに記述された既存のコードを中断することなく、オブジェクトの内部メカニズムを変更できるようにすることです。したがって、「コントラクト」と呼ばれるインターフェースをよく耳にします。これは、クラスのユーザーと実装者の間で、前向きのメソッドが一貫性を保つという暗黙の合意を作成するためです。また、複数のクラスが単一のインターフェイスを実装できるため、同じパブリックインターフェイスを実装している限り、1つのコンポーネントを別のコンポーネントに簡単に置き換えることができます。オブジェクト指向デザインに関する著名な本の著者であるGradyBoochは、カプセル化を次のように定義しています。
その構造と振る舞いを構成する抽象化の要素を区分化するプロセス。カプセル化は、抽象化とその実装の契約上のインターフェースを分離するのに役立ちます。
オブジェクトのコンシューマーは、そのオブジェクトの設計者がその機能を内部でどのように実装したかを知っている必要はありません。電子レンジについて考えてみてください。電子レンジを使ってスナックを作るために必要なのは、前面にあるいくつかのボタンを押すことだけです。それがあなたの電子レンジのパブリックインターフェースです。ポップコーンの袋を作るためだけに、そのデザインの背後にある科学的原理を理解する必要はありません。ここでのインターフェースの利点は、複雑さが軽減され、他の開発者がクラスを簡単に利用できるようになることです。
したがって、質問で与えられた例に戻って参照すると、Person
クラスの使用が制限されることは想定されていませんが、アクセスできるそのクラスによって公開されるメソッドが制限される可能性があります。たとえば、クラスは個人の名前を個別のフィールドにPerson
内部的に格納しますが、これらのプライベート名フィールドの両方の連結を返す1つのプロパティのみを公開します。FirstName
LastName
Name
しかし、オブジェクト指向の設計と用語はかなり複雑です。概念についての良い本を探して、それを注意深く読むことを強くお勧めします。そのおかげであなたはより良いプログラマーになるでしょう。