プロパティ/フィールド「firstName」と「lastName」を持つユーザーオブジェクトがあるとします。firstName と lastName の getter/setter を使用して各フィールドを設定および取得するのが常に最善でしょうか、それとも単純な「名前」の getter/setter を使用できますか?
1 に答える
それは主に、これらの変数を使用する予定の言語によって異なります。アクセサー (取得) とミューテーター (セット) が手動で記述され、本質的に存在しない言語では、これらの関数を処理する方法がいくつかあります。 .
パブリック変数は一般的に嫌われますが、値を使用および変更するための直接アクセスを提供します。public 変数と protected 変数については賛否両論がありますが、OOP の一般的なコンセンサスは、データを自分自身に保持する必要があるということです。すでに get/set について言及しているので、これを行うつもりはないと仮定します。
変数へのアクセスに対処する別の方法は、参照を返すことですが、最初の例のように、マイレージは異なる場合があります。直接アクセスを提供するには多くの責任があり、その多くはユーザーの肩に直接委ねられています。自分以外の人がこのクラスで作業することを計画している場合、そのようなアクセス権を彼らに与えることは特に安全ではありません。
標準getName()
とsetName()
関数は、それを処理する最も簡単な方法であり、インターフェイスを変更せずに簡単に更新できる形式を提供します。プログラムが適切なサイズになると、インターフェイスの変更をリファクタリングするのは悪夢になる可能性があります。このルートを使用すると、コード内で他に何も変更せずに関数をガットすることができます。
それをサポートする言語では、データを取得するかデータを変更するかを構文に基づいて決定するオーバーロードされた関数を記述できます。これは、標準の get/set と同じ基本的な考え方に従いますが、呼び出し構文はuser.name("Joebob Peoplesmith")
orに似ていname = user.name()
ます。これを行う方法は、能力と同様に言語によって異なります。
最後に、一部の言語には、特定の方法で宣言された変数への組み込みアクセスがあります。property
良い例は、get/set インターフェイスとして直接アクセスするためのプライベート変数で合成できるObjective-C のです。この形式では、 にアクセスするNSString *m_pFirstName
には、 を作成@property NSString *firstName
してから@synthesize firstName = m_pFirstName
. user.firstName
get/set は、ローカル変数であるかのように暗黙的に処理されます。
firstName と lastName の組み合わせについては、個人的な選択であり、何かを個別に変更したい/変更する必要があるかどうかに基づいて決定する必要があります。自問してみてください:
- firstName または lastName を変更する必要はありますか?
- firstName または lastName にアクセスする必要はありますか?
- firstName + lastName を返すにはどうすればよいですか? (配列? 結合された文字列?)
- これらの機能を使用するのは誰ですか? (他の開発者? 他のクラス?)
- これは初心者にとって自明でしょうか?(わかりやすい? 使いやすい? 'フールプルーフ'?)
- 私を助けることができるデータ構造はありますか?
全体として、言語の制限に基づいてオプションを調査し、決定を下す前に変数をどのように使用するかを計画する必要があります。可能な限り、開発途中でリファクタリングする必要は避けてください。お役に立てれば!