なぜプライベートキーワードを使用するのですか?変数またはメソッドへのアクセスを制限することは知っていますが、なぜアクセスを制限する必要があるのですか?
5 に答える
すべてのメソッドと変数を公に公開すると、別のプログラマーがあなたが作成したクラスで何かをしようとしたときに、どのメソッドがあなたのクラスの内部動作を処理するのか、つまり自分がどのメソッドを使用しているかがわからないため、非常に困難になります。オブジェクトの内部状態を台無しにしてバグを引き起こす可能性があるため、使用することは想定されていません。
そのようなことを「する必要はありません」。特に接続が指数関数的に増加し、副作用のリスクが増加する大規模なプログラムを作成している場合は、絶対に公開する必要があるものだけを公開することをお勧めします。複雑さを管理することがすべてです。カプセル化と情報隠蔽、およびこれが大規模システムの複雑さを軽減する方法について読んでください。これに関する詳細については、Grady Booch の Object-Oriented Design が良い本です。
プライベートは、その名前が示すように、外部クラスからプライベート/アクセスできないものです。オブジェクト指向プログラミング言語には、カプセル化と呼ばれる重要な概念が 1 つあります。これは、オブジェクトのコンポーネントの一部へのアクセスを制限することを意味します。コードを開発している間、他のクラスからいくつかのオブジェクトを隠す必要があります。これらの場合、それらのオブジェクト/変数を非公開として削除します。プライベート アクセスは、それが定義されているクラスに対してのみです。
OO の世界では、カプセル化を実現するために、公開したいオブジェクトの機能または動作を理解することが非常に重要であり、各アクセス識別子はその中で重要な役割を果たします.Code Complete book では、McConnell はすべての変数を非公開にすることを強く推奨しています.
ユーティリティ ライブラリを構築していて、メソッドをユーティリティとして外部世界に公開しようとしているとします。しかし、これらのメソッドは、プライベートなメソッドをほとんど呼び出さない場合があります。そのため、これらのプライベート メソッドを直接呼び出しても意味がなく、最悪の場合、オブジェクトの状態も損なう可能性があります。jdkでもプライベートの使い方を説明する例はたくさんあります。クラスには、次の場合に有効なコンストラクター引数をチェックするだけString
のプライベート メソッドがあります。checkBounds
public String(byte bytes[], int offset, int length, String charsetName)
このメソッドを公開する (パブリックにする) ことは、String クラスでは意味がありません。