-1

ArgoUML を使用して UML でモデル化することにより、大規模な Java アプリケーションを消化しようとしています。UML 作図ツールのプロパティ セクションには、優れたソフトウェアの設計に役立つと思われる便利なチェックリストがあります。チェックリスト項目のほとんどは、3 を除いて意味があります。

1). Could you write an invariant for this class? 
2). Do all constructors establish the class invariant? 
3). Do all operations maintain the class invariant?

これらの質問は何を意味していますか?私はオブジェクト指向設計が初めてなので、説明が役に立ちます。

前もって感謝します。

4

1 に答える 1

2

簡単な例を挙げると、三角形をモデル化する場合、角度の合計が常に 180 度になるようにする必要があります。

class Triangle {
    number angle1, angle2, angle3;
}

これは不変条件 (常に真であると想定される条件) です。

degrees (angle1 + angle2 + angle3) = degrees 180

2 番目の質問は理にかなっています。コンストラクターは、不変式が成立しないオブジェクトを作成しないようにする必要があるからです。

次に、3 番目の質問は、不変条件を無効にする可能性のある操作があるかどうかを尋ねます。例えば:

    void setAngle1(number whatever) { angle1 = whatever; }

そして、ここで、上記の設計が良くないことがわかりました。なんで?冗長な情報があるためです。より良い設計は次のようになります。

class Triangle {
    number angle1, angle2;   // two angles
    number side;             // and the connecting line
}

angle1 と angle2 から常に angle3 を計算できます。そして、より単純な不変条件を適用する必要があるだけですangle1 + angle2 < 180°side > 0

于 2013-11-06T16:12:25.137 に答える