2

totalCost には getter メソッドと setter メソッドがあるため、totalCost というローカル プライベート変数が 1 つだけの支払いクラスがあります。TotalCost は、支払いクラスの複数のメソッドで使用される唯一のローカル変数であるためです。このクラスにはゲッターとセッターを追加する必要がありますか?

public class Payment {
    private int totalCost;

    public Payment(){
    }

    public int calculateItemcost(int itemQuantity, int itemPrice){
        return itemPrice * itemQuantity;

    public int calculateTotalcost(int itemCost){
        return totalCost = totalCost + itemCost;
    }


    public int calculateBalance(int clickedValue, int totalCost){
        return this.totalCost = totalCost - clickedValue;

    public int getTotalcost(){
        return this.totalCost;
    }    

    public void setTotalcost(int totalcost) {
        this.totalCost = totalcost;
    }
}     
4

4 に答える 4

2

他のクラスで「取得」する必要があるフィールドにはゲッターを使用し、他のクラスで「設定」する必要があるフィールドにはセッターを使用します。したがって、ゲッター/セッターを作成する前に、要件を考えてください。

于 2012-10-25T01:18:31.573 に答える
2

すでにゲッターとセッターを持っているフィールドが 1 つしかないためです。意味はありません。良さそう。

ただし、これをリファクタリングします。

    public int calculateTotalcost(int itemCost){
        return totalCost = totalCost + itemCost;
    }

    public int calculateBalance(int clickedValue, int totalCost){
        return this.totalCost = totalCost - clickedValue;
    }

セッターを呼び出す。例:

public int calculateTotalcost(int itemCost){
       setTotalCost(totalCost + itemCost);
       return getTotalCost();
    }

このように totalCost に変更すると、setTotalCostメソッドにローカライズされます。

于 2012-10-25T01:18:36.127 に答える
2

私が従う2つのガイドライン。

まず、必ずしもすべてのプライベート データをゲッターとセッターを介して公開する必要はありません。一部のデータは内部使用のみである可能性があるためです。

次に、ゲッターとセッターは、実装ビューではなく、オブジェクトビューを提供する必要があります。

たとえば、クラスに購入に対する 10% の税率がハードコーディングされている場合 (これをハードコーディングするのは悪い考えであることを忘れてしまいます)、課税コンポーネントの getter を使用できます。プライベート会員。さらに、税引前価格に基づいて値を設定することもできます。

したがって、税引き前の値に政府のハゲタカの 10% が加算されると、次のようになります。

public void setPreTax (int preTaxAmt) {
    totalCost = preTaxAmt * 11 / 10;
}
public int getTax (void) {
    return totalCost / 11;
}

議論とは無関係であり、すでに を使用しているため、計算に浮動小数点を使用することは気にしませんでしたint

このオブジェクトと実装の分割は良いことです。内部の詳細ではなく、クライアントに提供する情報に基づいて API を設計する必要があります。

于 2012-10-25T01:21:04.117 に答える
2

デメテルの法則を知っていますか?

コード内の疎結合を回避するためのいくつかの小さなガイドラインを収集します。

ゲッターとセッターは、クラス間の結合につながる要素です。

なんで?

ゲッターとセッターは、クラス (特にそのフィールド) とその設計の実装について通知するためです。

ゲッター/セッターを体系的に作成して常にコーディングしている開発者は、オブジェクト指向プログラミングの概念を完全に誤解しています。

実際、これは貧血ドメインモデルにつながります.

したがって、クライアントの役割ではなくても、ビジネス ロジック自体を実装することをクライアントに強制します。

簡単に言えば、アプリケーションでは、getter と setter の 80% は不要です。オブジェクト指向プログラミングはメッセージに関するものです。オブジェクトからの動作が必要な場合は、それを伝えてください! キッチンを脇に置くためにその状態に関する情報を求めないでください。これは通常、コーディングの手続き的な方法です。(教えて! 聞かないで! !) そして、DRY を尊重しないことを支持します (同じことを繰り返さないでください)。

于 2012-10-25T01:28:16.647 に答える