private、publicなどのアクセス指定子はコードの再利用にどのように役立ちますか?
私はインタビューのためにこの質問を受けました、そして私は答えを見つけることができませんでした。plzは私を助けます。
private、publicなどのアクセス指定子はコードの再利用にどのように役立ちますか?
私はインタビューのためにこの質問を受けました、そして私は答えを見つけることができませんでした。plzは私を助けます。
これにはいくつかの微妙な境界線があり、いくつかの異なる方法で質問に答えることができます.
開発者がほぼすべてのものを非公開としてマークする場合を考えてみましょう。doSomething()
拡張してメソッドをオーバーライドできれば、再利用できる完全に優れたクラスだったのかもしれません。しかし、そのメソッドは非公開にされているので、私の手は縛られています。これにより、多くの開発者がクラス全体をコピーして貼り付け、必要な 1 つの部分を変更することになります。(クールではありません。)したがって、すべてをプライベートとしてマークすると、再利用が妨げられることがわかります。
ただし、一方で、開発者がすべてを公開としてマークする場合を考えてみましょう。その開発者または他の開発者は、拡張クラスを作成したり、さまざまなメソッドをすべて呼び出したり、保護/非公開とマークされているはずの属性にアクセスしたりし始めます。クラスの修正が必要な設計上のバグなどが見つかった場合。ただし、「オープン」に記述されているため、追加の参照をすべて見つけて検討する必要があるため、単純な修正であった可能性があるものがはるかに複雑になります。
最善の選択肢は妥協だと思います。クライアント コードで使用するように設計されたものを "パブリック" としてマークします。ビジネスが拡張/オーバーライドされていないものは「非公開」としてマークします。将来誰かが拡張するのに役立つ可能性があるものがある場合は、それを「保護」としてマークしてください。また、常に Javadoc を追加して、意図をさらに伝えてください。
再利用されるコードは、理解しやすく信頼できるものである必要があります。
理解できる: 一部のメソッドを非公開にすることで、クラスの作成者はそれらのメソッドが内部実装の詳細であることを指定し、再利用者は公開メソッドのみを考慮する必要があります。
信頼性: フィールドを非公開にすることで、再利用者が再利用されたコードの内部状態を誤って破損するのを防ぎます。
他の誰かが再利用できるようにしたいユーティリティ ヘルパー クラスがあるとします。そのクラスにはたくさんのメソッドと変数がありますが、そのクラスを使用している人はそれらを必要としません。
public
簡単に再利用できるメソッドをマークします。誰かがいつどのように呼び出すかを知ることができるように、常に十分に文書化する必要があります。
private
内部メカニズムの一部としてメンバーをマークします - 私の再利用者はそれについて心配する必要はありません。
許可されているアクセス モデルを明示することで、そのコードへのアクセス方法がより明確になり、他のユーザーがより保守しやすくなり、再利用しやすくなります。
インタビューでは (そして私はかなりの数の開発者を雇いました)、すべてのアクセス修飾子の目的を明確に説明し、それぞれの使用例を示すことができなければなりません。
次のようなこれらのアクセス指定子の範囲を十分に認識していると仮定します。
プライベートクラスのみ
デフォルトパッケージのみ
保護クラスと派生クラス
一般公開
メソッドを含むクラスがあるとします。
public int calculate(int x,int y,int z){
z=x+y;
x=z+x;
z=x+y;
return z;
}
これは public メソッドであり、派生かどうかに関係なく、どこからでも、どのパッケージでも、どのクラスからでもアクセスできます。この関数を新しいクラスで使用したい場合は、このクラスをインポートするだけで、メソッドを何度も記述せずに使用できます。
これは非常に単純な例です。系列がフィボナッチ系列であるかどうかのチェック、単利/複利の計算など、ここで独自の関数に置き換えて、必要な場所で再利用できます。