private
何かをコーディングするときに、すべてを事前にデフォルト設定することをお勧めしますか?
そしてprotected
、サブクラスがそれを必要とする場合、またはpublic
別のクラスがそれを必要とする場合にのみアップグレードしますか?
private
何かをコーディングするときに、すべてを事前にデフォルト設定することをお勧めしますか?
そしてprotected
、サブクラスがそれを必要とする場合、またはpublic
別のクラスがそれを必要とする場合にのみアップグレードしますか?
回答:
短い答え:はい
より長い答え:
はい。ただし、すべてを非公開にしてクラスを作成することから始めるという提案として解釈すべきではありません。このアプローチは、インターフェイスに落ち着く前に実装の詳細に焦点を合わせることによるクラス設計を意味します。
クラスを設計するときに考慮すべき最も重要な側面の1つは、クラスの使用方法です。プライベート/実装の詳細について考える前に、パブリックメソッドについて考える必要があります。
さらに、このアプローチは通常、「このクラスの単体テストをどのように書くのか」と自問する機会を逃しています。-これは、実際に単体テストを書いていない場合でも尋ねるべき重要な質問です。(関連:「テスト可能なコードを促進する設計原則とは?」)
したがって、パブリックインターフェイスを定義したら、残りのほとんどをプライベートにデフォルト設定することをお勧めします。これは通常、クラスの外部に関係のない実装の詳細であるためです。
「そして、サブクラスがそれを必要とする場合にのみプロテクトにアップグレードするか、別のクラスがそれを必要とする場合にのみ公開しますか?
それは間違ったアプローチです。設計時に、あなたはどのような公共のアクセスを知っている必要がありたく与えます。通常、それはクラスの目的であるため、パブリックアクセスを許可します。そして、サブクラスにアクセスさせたいので、保護されたアクセスを与えます。そして、あなたは他の誰のビジネスでもないものにプライベートを使用します。
誰かがアクセスできないものにアクセスする必要がある場合、その必要性について本当に一生懸命に考える必要があります。彼らはそのアクセスを必要とすべきではない、またはあなたのデザインが間違っています。たぶんあなたのデザインが間違っていて、何かが公開されるはずの何かが公開されていないので、それを変更します。しかし、設計が正しい場合、必要性に何か問題があるので、設計を損傷する代わりにそれを修正します。
private
かprotected
?
オブジェクト指向プログラミングのこの側面を理解する鍵は、データのカプセル化の概念です。その考えは、実装の詳細を隠すことでクラスを理解しやすくすることです。これはデータ隠蔽と呼ばれます。したがって、クラスを使用するために必要な関数のみを公開(公開)したいだけです。これらの関数は、クラスへのインターフェースです。
車の車輪のようなインターフェイスを考えてください。ホイールを回して車の方向を決定しますが、カバーの下には回転バルブ、油圧装置、ホイールの回転を変えるプーリーがありますが、車を運転するための機械エンジニアである必要はありません。
あなたの質問に対する答えはイエスです。クラスに関する詳細をできるだけ他のクラスから隠したい場合。何かを公開、非公開、または保護する必要がある場合を理解することは簡単に習得できますが、習得は困難です。