5

私はプログラミングを勉強していて、プログラミングについては十分な知識があるように感じますが(PHP、Javascriptなどを何年も書いています)、OOPの世界に飛び込んだことはありません。このため、私は自分が置かれている状況に対する一般的な答えを求めています。常にいくつかの例外があることを知っていますが、この場合の最も正しいアプローチを探しています。

わかりました。2つのクラスがGameありGameGraphicsます。GameGraphicsのオブジェクトを作成し、Gameそれが持つすべてのメソッドを使用します。最近、クラスのすべての変数をプライベートにする必要があることを学びました。そのため、のすべての変数には、ゲッターとセッターを介しGameてアクセスします。GameGraphics

Gameしかし、クラス内の変数にアクセスしたい場合はGame、パブリックメソッドを使用する必要がありますか、それとも変数に直接アクセスする必要がありますか?これに対する最も正しいアプローチは何ですか?

それが重要な場合、私はJavaで開発しています。そして、OOPの経験不足をお許しください。

4

5 に答える 5

2

常にアクセサメソッドを使用することをお勧めします。プログラムは後でデバッグしやすくなります。

かなり一般的なシナリオを挙げましょう。属性が予期せず更新されることに気づき、属性が更新される可能性のあるコード内の場所を知りたいとします。

  • セッターを一貫して使用して値を更新する場合。プロジェクト全体でそのフィールドのセッターメソッドを1回検索するだけで、完了です。値が更新される場所は、コード内に他にない可能性があります。クラス自体の内部でさえありません(覚えておいてください:アクセサー以外の直接のフィールドアクセスはありません)。

  • setterメソッドと直接フィールドアクセスの両方を使用して値を更新する場合は、プロジェクトを2回検索する必要があります。まず、セッター法による。そして第二に、フィールドによって。また、その2番目の結果からリストされたすべての結果が混同されている可能性があることに注意してください(その属性は、アクセス中または更新中のいずれかであるため、検索結果に含まれている可能性があります)。

また、属性が更新またはアクセスされるたびにデバッグを実行して値を確認する場合は、setterメソッドまたはgetterメソッドのいずれかにブレークポイントを設定できます。簡単。他の場所にブレークポイントを設定する必要はありません。

于 2014-01-09T10:59:27.557 に答える
1

他のクラスの変数にアクセスするためにアクセサーメソッド(ゲッターとセッター)を使用する背後にある2つの主な理由は次のとおりです。

  • インターフェイスのメンバーとしてアクセサを提示する機能、および
  • サブクラスのアクセサーをオーバーライドする機能。

読みやすさのわずかな低下は、クラスのロジックをカプセル化できるため、これらの利点を支払うのに妥当な代償です。その結果、ユーザー側の制御が厳しくなります。

プライベートメソッドに関しては、これらの利点はどちらも当てはまりません。インターフェイスメソッドを実装したり、オーバーライドしたりすることはできません。実際、Javaコンパイラは、特に単純なものを完全に最適化することがよくあります。

そのため、読みやすさを向上させずにコンパイラーによって最適化されるレイヤーを追加するのではなく、インスタンス変数を直接使用することをお勧めします。

于 2013-02-10T19:07:46.450 に答える
0

これは何よりも個人的な好みの問題です。

getters \ settersを使用する理由は、主に、呼び出し元のクラス(この場合はGameGraphics)から実装を非表示にするためです。これは、他の開発者があなたのコードを使用する必要がある場合に便利です。また、ゲッター\セッターはメンバーに直接アクセスするため、インスタンス変数を呼び出すときにメンバーを呼び出すのは少し冗長です。

ただし、ゲッター\セッターがlogging \ etcのように値を変更するだけでなく、他のことを行う場合は、明らかに常にそれらを使用する必要があります。

于 2013-02-10T19:06:05.293 に答える
0

どちらでも構いません。ゲッター/セッターのポイントは、クラスの内部については知らないが、クラス自体はその内部については知っているクライアントに、フィールドへの安全なアクセスを提供することです。ゲッター/セッターがクラス内から呼び出された場合でも、実行する必要のある追加の処理を行う場合は、それらを呼び出します。それ以外の場合は、フィールドに直接アクセスできます。

于 2013-02-10T19:08:05.493 に答える
0

OOPを学んでいるだけの場合は、必ず、パブリックメソッドを介して公開されたプライベートメンバーに固執してください。これは、パブリックフィールドがすべて悪いということではありませんが、どちらをいつ使用するかを学ぶには、両方のアプローチを詳細に研究する必要があります。

クラス内では、ほとんどの場合、プライベートメンバーに直接アクセスします。これは確かに最初の選択肢です。カプセル化の全体的なポイントは、フェンス内のコードとフェンス外のコードを分離することです。

于 2013-02-10T19:20:54.603 に答える