2011-10-27 16 views
0

私はOOPのハングを取得しており、Javaで多くのことをしてきました。私が抱える問題の1つは、特定のクラスのプライベートインスタンスフィールドが必要かどうかを判断することです。私が何かプライベートなインスタンスフィールドを作る必要があるかどうかに関して、私が使用すべきである経験則がありますか?Javaでのインスタンスフィールド宣言

ありがとうございました。

答えて

1

オブジェクトの自然な部分、またはオブジェクトが定期的に何らかのタスクを実行する必要がある場合は、必ずそれを属性にします。定数の場合は、それをパブリッククラス変数(または定数:P)にする必要があります。つまり、public static final w/eを宣言します。

パブリックインスタンス変数は、しばしばよりコードが煩雑になるため頻繁には使用されません。オブジェクトの状態としてインスタンス変数(または属性)について前述したように考えてください。周囲の人々をじゃまにするのではなく、操作を実行することによってオブジェクトの状態を変更することは、通常はより明確です。がんばろう。

1

オブジェクトのインスタンスの状態の論理的な部分であるかどうかを確かめてください。それは、オブジェクトの全生涯にわたって有効なオブジェクトに関するものか、または単一のメソッドの過程でのみ適用されるものです(この場合、ローカル変数でなければなりません)?それとも、クラス自体に実際に適用できますか(その場合は静的でなければなりません)?

よく分からない例がある場合は、それが役に立ちます。

(私はここでの選択は変数の一種であると仮定したことに注意してください - 。静的、インスタンスまたはローカルインスタンス変数はかなりは常に privateである必要があります:)

0

「定数を除いてpublicフィールドを避けてください(パブリックフィールドを使用するチュートリアルの例の多くは、いくつかの点を簡潔に説明するのに役立ちますが、プロダクションコードには推奨されません)パブリックフィールドは、特定の実装にリンクし、コードを変更する際の柔軟性を制限しがちです。 " Controlling Access to Members of a Class

0

オブジェクト指向プログラミングを学ぶときは、実世界の概念をコードとしてモデル化する方法と考えてください。名詞はオブジェクトになる。名詞に、または名詞上で、または名詞によって行われたアクションは、メソッドになります。インスタンス変数は、これらの名詞のプロパティです。たとえば、Carを表すクラスがある場合、slamOnTheBreaks()は、Driverが休憩でスラムに呼び出すメソッドになります。Carには、内部にいくつかの座席数がありますか?したがって、インスタンス変数はint numberOfSeats;になります。

インスタンス変数は、知る必要があり、変更する必要があると考えてください。 numberOfSeatsを公開すると、Driverは車内の座席数を変更することができますが、これは意味をなさないものです。彼らは車に何席あるかを知る必要があります。彼らは車に乗ったときに見つけることができ、むしろ方法public int getNumberOfSeats()を呼び出すことができます。

ダニーが言及したように、物語は定数について異なっています。値が定数の場合は、プログラムの実行期間全体にわたって一定のままです。たとえば、作成するオブジェクトCarおよびTruckオブジェクトの場合、を唯一のDriverにする場合は、Bobの方がよいでしょう。公開されているので、CarTruck(継承はCarTruckの間でないものとします)、およびb)は変更できません。