新しいクラスを設計します。これは、抽象化の各レベルで同じ関数boolean isCellEmpty()
を含んでいます。私はクラス階層の最下部にMatrix
クラスを持っています。上に私はGraphMainWindow
クラスがあります。小切手はどのレベルで行うべきですか?
小切手はどこで受け取りますか(例:if (i >= 0, i < xCellsCount, j >= 0
など)?
新しいクラスを設計します。これは、抽象化の各レベルで同じ関数boolean isCellEmpty()
を含んでいます。私はクラス階層の最下部にMatrix
クラスを持っています。上に私はGraphMainWindow
クラスがあります。小切手はどのレベルで行うべきですか?
小切手はどこで受け取りますか(例:if (i >= 0, i < xCellsCount, j >= 0
など)?
良い質問がありました。回答:最も低いレベルです。このようにして、エラーは検出されずに滑ることはありません。 アルゴリズムのプロセスが意味を持ちますが、最も低いレベルが最も重要な上位レベルのエラーを確認できます。
これにはいくつかの例外があります。たとえば、アプリケーションを保持しているメッセージを介してエラーが報告され、最も低いレベルで多くのエラーが発生すると予想される場合。しかし、これらはあまり一般的ではないので、あなたがそれを妨害していると感じるならば、上記のルールを曲げることができます。ですから、このクラス図を持っている一言で言えば、それを置くため
簡単な答えは、可能な限り一般的なレベルです。これらの変数を宣言する最初の継承可能なクラスがチェックを実行する必要があります。オーバーライドされた機能が必要とされない限り、その下にあるものはスーパークラスに延期するだけです。チェックのために使用する継承階層を継承するクラスでは、チェックを処理するメソッドは、デフォルトの(おそらく役に立たない)振る舞いを取得しているオーバーライドされたバージョンを実装していないサブクラスに通知するはずです。私はしばしばこのような場合に例外を発生させます。
:
Matrix (a
^ ^
| |
... b means : b inherits a)
^
|
GraphMainWindow
あなたは、基本クラスで見つかった、すべてのものを継承している方法isCellEmpty
を持っています。 isCellEmpty
がチェックを行うために使用するデータのデータ構造がMatrix
クラス以降に変更されない場合は、最も一般的なクラスのMatrix
クラスを使用します。
Matrix
以降のデータ構造を変更する場合は、データ構造を変更したクラスでテストを実装する必要があります。
よろしくお願いいたします。
ありがとうございました!しかし、私は申し訳ありません、私は私の階層を記述したとき、私は '継承関係を意味しませんでした。 'GraphMainWindow'は' GraphModel'を使用する 'Graph'を使用することを意味しました。これは' MatrixGraphModel'のスーパークラスであり、 'Matrix'を使用しています。 –
「セル」は階層全体で同じことを意味しますか? 'isCellEmpty()'は同じことをテストしますか? –
少し異なる目的です。しかし一般的にはそうです。 (すべての階層で同じチェックを行います) –