0

私はJavaを学んでいます。現在、クラス内のフィールドをプライベートにし、変数にアクセスまたは変更するための要件に従って get および set メソッドを提供することは、常に oop の慣行です。ここで私の質問は、プライベートと宣言されたフィールドの set メソッドがある場合、ユーザーは非表示であってもフィールドの値を変更できるということです。では、set メソッドを提供する代わりに、フィールドを public にしてみませんか?

4

3 に答える 3

1

あなたは正しいです-セッターとゲッターは適切なプロパティの値を変更できます。では、なぜそれらが必要なのですか?

ここでいくつかの理由を列挙しようと思います。

  • コードの保守が簡単です。誰がプロパティを変更したかを簡単に見つけることができます。すべてのセッターコールを探してください。それ以外の場合は、プロパティを参照するすべての場所を検索し、99%の場所でプロパティを読み取り、1%で書き込みを行うことができます。
  • デバッグが簡単です。探しているものに応じて、getterまたはsetterにブレークポイントを設定できます。
  • setterとgetterがメソッドであるという事実は、最新の複雑なフレームワークでのバイトコードエンジニアリングとプロキシ作成で使用されます。
于 2012-09-10T12:03:46.877 に答える
1

クラス内のフィールドをプライベートにし、変数にアクセスまたは変更するための要件に従ってgetメソッドとsetメソッドを提供することは、常にoopの慣例です。

変数はプライベートに保つのが最適です(ただし、パブリックに保つことはできます)。すべての変数がgetおよびset(アクセサーおよびミューテーター)関数を必要とするわけではありません。ユースケースによって異なります。たとえば、クラスの内部にあるある種のカウントを保持している場合、set(..)メソッドを提供しません。get(..)メソッドとset(..)メソッドが戻りと割り当て以外の何もしない場合は、会社のコーディングガイドラインに従うことをお勧めします。そして、オプションがある場合は、ゲッターとセッターを選択してください。

ここで私の質問は、プライベートとして宣言されたフィールドのsetメソッドがある場合、ユーザーはフィールドが非表示であってもフィールドの値を変更できるということです。では、setメソッドを提供する代わりに、フィールドを公開してみませんか?

ここでの非常に単純で些細な例:

void setVar(string x){
    myPrivateVar = x;

    //log the change..
    writeToLog("myPrivateVar was updated to: " + x + " at <blah blah>");

    //inform others of the change.
    updateDependantConfiguration();
}

HTH..

于 2012-09-10T12:04:17.547 に答える
1

カプセル化について読んでみると、その理由をよりよく理解できます。

于 2012-09-10T11:57:54.243 に答える