0

重複の可能性:
なぜゲッターとセッターを使用するのですか?

特に非常に単純な属性を扱う場合は、アクセサーメソッドとミューテーターメソッドを作成するのが非常に面倒なように思えます。なぜわざわざそれらを使用する必要があるのですか?

4

3 に答える 3

3

答えは主に、コードを書いている目的と、単独で作業する場合に自分をどれだけ信頼しているかによって異なります。

  • 変数をプライベートに保つことは、人々と一緒に作業するとき、またはクラス外でそれらを使用していないことを確認するためにコンパイル時のチェックを強制する場合に役立ちます
  • セッターは、副作用がある場合に役立ちます
  • ゲッターは、副作用がある場合、または変数を読み取り専用にしたい場合に役立ちます
  • ゲッターとセッターを持っているかどうかはあなたの選択です。他の人があなたのクラスを使用する場合、情報隠蔽の原則のためにカプセル化はおそらく良いことです
  • プロジェクトに取り組んでいるのがあなただけの場合は、自分がやりたいと思うことをするだけです。本当に必要だと感じたら、後のステップでそれらを追加するのに間に合うでしょう。
  • friendC++ について話しているので、セッターとゲッターを使用する手間をかけずに細粒度のカプセル化を可能にするディレクティブを忘れないでください(結合を促進するため、ここには 2 つの異なる考え方があります)。
于 2012-12-01T19:12:36.370 に答える
2

C++ 構文の負担について話すことはできませんが、一般的なオブジェクト指向の用語では、ゲッターとセッターを提供する必要があります。これは、どのプロパティが直接保存され、他の状態に基づいて計算されるかなど、内部状態をどのように保存するかを他のクラスが把握していないためです。そして、それらはさらに他のオブジェクトに委譲されます。クラスがどのように状態を保存するかについて、より広い世界との契約上の発表を行うと、将来行うことができる調整が制限され、多くの場合、解決しようとしている問題がより微妙になるにつれて、最適化が阻害され、コードが壊れます。

于 2012-12-01T19:13:45.907 に答える
1
  1. それらは、アクセスを制御することを可能にします。読み取り専用、読み取り/書き込み、または書き込みのみにすることもできます
  2. 必要に応じて、基礎となる実装を変更できます。多数の車両の平均速度を計算することを検討してください。速度のリストを保存することでこれを実装し、必要に応じて平均を計算する、現在の合計と数を保持することができます。
  3. クラスへのアクセスはすべてメソッド経由です。エラーを見つけやすくなります。
  4. それは多くの努力ではありません。スクリプトを使用してそれらを作成できます。
于 2012-12-01T19:12:39.417 に答える