web-dev-qa-db-ja.com

常にgetメソッドとsetメソッドを使用するのは悪い習慣ですが、属性クラスを直接呼び出すのはOOPの悪い習慣ですか?

クラスの属性を直接呼び出すための推奨事項があるかどうか疑問があります

OOPでは、常にgetメソッドで属性を呼び出す必要があると思います。

例:

セット時

public setAtribute(Atribute atr){ this.atr = atr;}

取得時

 public Atribute getAtribute(){ return this.atr;}

コンストラクター上

public Constructor(Attribue atr){
    setAttribute(atr);
}

属性がスーパークラスに挿入されている場合、私はこの方法でそれを呼び出し、onはクラスを継承します。

@Inject
protected Attribute atr;

public Attribute getAttribute(Attribute atr){
    return atr;
}

I.E.属性にアクセスするには、常にgetとset in OOPを使用することを好みます。

しかし、私の仕事では、このように嫌いな人がいるので、議論があります。次のコードを書くことができるからです。

getAttribute().callSomeFunctionality();

しかし、私はこれらの代わりにこれらを好みます:

this.callSomeFunctionality();

そして、これは可変クラスであるため、デメテルの法則に違反しないと思います。

あれについてどう思う?

常にgetおよびset関数を使用するのが最適です。または、属性を直接呼び出す場合もあります。

これについての文献がいくつかありますか?

ありがとう

1
Tlaloc-ES

一般的に、OOPのポイントはあなたが属性にアクセスする必要がないであるということです。
属性で何をしたいのかを考えてください。それが何であれ、クラスのメソッドになる可能性があるため、属性値を取得して自分で行うのではなく、そのメソッドを呼び出して行う必要があります。

もちろん例外もありますが、すべての「クラス」が関連する属性のコレクションのみであり、使用法がそれらの外部でコーディングされている場合、それはOOPではありません。

6
Aganju