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
を変更したクラスにテストを実装する必要があります。
よろしく
簡単な答えは、可能な限り最も一般的なレベルです。これらの変数を宣言する最初の継承可能なクラスは、チェックを実行する必要があります。それ以下のものは、オーバーライドされた機能が必要でない限り、スーパークラスに従う必要があります。チェックに使用するために選択したクラスから継承階層をさらに上にあるクラスでは、チェックを処理するメソッドは、オーバーライドされたバージョンを実装していないサブクラスに、デフォルトの (そしておそらく役に立たない) 動作を取得していることを通知する必要があります。 . そのような場合、私はしばしば例外を発生させます。
良い質問です。自分で何度も疑問に思いました。答え: 最低レベルです。このようにして、エラーが検出されずにスリップすることはありません。アルゴリズム プロセスが意味を成す上位レベルでもエラーをチェックできますが、最下位レベルが最も重要です。
これにはいくつかの例外があります。たとえば、アプリケーションを保持するメッセージを介してエラーが報告され、最下位レベルで多くのエラーが発生することが予想される場合です。しかし、これらはそれほど一般的ではなく、邪魔になると感じた場合は上記のルールを曲げることができます.