タグ付けされた質問 「setters」

7
セッターのチェインが型破りなのはなぜですか?
Beanにチェーンを実装すると非常に便利です。コンストラクター、メガコンストラクター、ファクトリーをオーバーロードする必要がなく、読みやすさが向上します。オブジェクトを不変にしたい場合を除き、欠点は考えられません。その場合、とにかくセッターはありません。これがOOPの慣例ではない理由はありますか? public class DTO { private String foo; private String bar; public String getFoo() { return foo; } public String getBar() { return bar; } public DTO setFoo(String foo) { this.foo = foo; return this; } public DTO setBar(String bar) { this.bar = bar; return this; } } //...// DTO …

8
順次コレクションは、インデックス0またはインデックス1で開始する必要がありますか?
複数のチャネルを持つデバイスのオブジェクトモデルを作成しています。クライアントと私の間で使用される名詞があるChannelとChannelSet。(「セット」は順序付けられており、適切なセットがそうではないため、意味的に正確ではありません。しかし、それは別の時代の問題です。) C#を使用しています。以下に使用例を示しChannelSetます。 // load a 5-channel ChannelSet ChannelSet channels = ChannelSetFactory.FromFile("some_5_channel_set.json"); Console.Write(channels.Count); // -> 5 foreach (Channel channel in channels) { Console.Write(channel.Average); Console.Write(", "); } // -> 0.3, 0.3, 0.9, 0.1, 0.2 すべてがダンディです。 ただし、クライアントはプログラマーではないため、ゼロインデックスによって完全に混乱します。最初のチャネルはチャネル1です。しかし、C#との一貫性を保つために、ChannelSetインデックスをゼロから維持したいと思います。 これにより、開発チームとクライアントが相互作用するときに、いくつかの切断が確実に発生します。しかし、さらに悪いことに、これがコードベース内でどのように処理されるかに矛盾があると、潜在的な問題になります。たとえば、次のUI画面では、エンドユーザー(1インデックス作成の観点から考える)がチャネル13を編集しています。 そのSaveボタンは、最終的にいくつかのコードになります。ChannelSetインデックスが1の場合: channels.GetChannel(13).SomeProperty = newValue; // notice: 13 または、インデックスがゼロの場合: channels.GetChannel(12).SomeProperty = newValue; // notice: 12 私はこれをどのように扱うか本当によくわかりません。私は、順序付けられた整数インデックス付きのもの(ChannelSet)を、C#ユニバースの他のすべての配列およびリストインターフェイスと一貫性を保つこと(ゼロインデックス付けChannelSet)をお勧めします。しかし、その後、UIとバックエンドの間のすべてのコードには翻訳(1を引く)が必要になります。そして、誰もが陰湿で一般的なオフバイワンエラーが既にどの程度存在するかを知っています。 …

7
変数にゲッターとセッターがある場合、それはパブリックである必要がありますか?
プライベートな変数を持つクラスがあり、クラスにはその変数のゲッターとセッターがあります。なぜその変数を公開しないのですか? ゲッターとセッターを使用する必要があると思うのは、setまたはget以外の操作を行う必要がある場合だけです。例: void my_class::set_variable(int x){ /* Some operation like updating a log */ this->variable = x; }

3
テスト用のプライベートセッターによるプロパティのスタブ
オブジェクトがあります public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public string Property9 {get;private …

4
メソッドの名前を変更してもカプセル化を維持できますか?
ゲッター/セッターが正当化される時期についてこのページを読んでいましたが、OPは次のコードサンプルを提供しました。 class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } void go_shopping(Fridge fridge) { fridge.set_cheese(fridge.get_cheese() + 5); } 受け入れ答えの状態: ちなみに、あなたの例ではFridge、putCheese()andのtakeCheese()代わりに、クラスに and メソッドを指定get_cheese() しset_cheese()ます。その後、まだカプセル化されています。 カプセル化は、名前をget / setからputCheese()/に変更することによってどのように保持さtakeCheese()れますか? 同じ答えでそれはまた述べています: ゲッターとセッターを使用しても、カプセル化が壊れることはありません。カプセル化を解除するのは、何も考えずに、すべてのデータメンバー(Java lingoのすべてのフィールド)にゲッターとセッターを自動的に追加することです。 この場合、変数は1つだけなのでcheese、チーズを取り出して冷蔵庫に戻したい場合があるため、この場合の取得/設定ペアは正当化されます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.