Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 我应该在什么级别进行检查?_Oop - Fatal编程技术网

Oop 我应该在什么级别进行检查?

Oop 我应该在什么级别进行检查?,oop,Oop,我设计了一个新类,它在每个抽象级别上都包含相同的函数boolean isCellEmpty()。我的类层次结构的底部有矩阵类。在顶部我有图形主窗口类 我应该在哪里进行检查(例如,如果(I>=0,I=0等等…)?简单的答案是:在最通用的级别上。声明这些变量的第一个可继承类应该执行检查。除非需要重写功能,否则下面的任何内容都应该服从于超类。在继承层次结构的更高一级的类中,从您选择用于检查的类开始,处理检查的方法可能会通知尚未实现重写版本的子类,它们正在获得默认(可能是无用的)行为。在这种情况下,我经

我设计了一个新类,它在每个抽象级别上都包含相同的函数
boolean isCellEmpty()
。我的类层次结构的底部有
矩阵
类。在顶部我有
图形主窗口


我应该在哪里进行检查(例如,如果(I>=0,I=0等等…)?

简单的答案是:在最通用的级别上。声明这些变量的第一个可继承类应该执行检查。除非需要重写功能,否则下面的任何内容都应该服从于超类。在继承层次结构的更高一级的类中,从您选择用于检查的类开始,处理检查的方法可能会通知尚未实现重写版本的子类,它们正在获得默认(可能是无用的)行为。在这种情况下,我经常提出一个异常。

好问题,我自己也曾多次对此感到疑惑。回答:在最低级别。这样,错误永远不会漏掉。 您仍然可以在算法过程有意义的较高级别检查错误,但最低级别是最重要的


有一些例外情况。例如,如果错误是通过保存应用程序的消息报告的,并且您预期在最低级别会发生许多错误。但是这些错误并不常见,如果您觉得上述规则会干扰您,您可以改变规则。

简单地说,您有以下类图:

Matrix        ( a
   ^            ^
   |            |
  ...           b means : b inherits a)
   ^
   |
图形主窗口

您有一个方法
isCellEmpty
,它可以在基类和每个继承的类中找到。 如果
isCellEmpty
用于执行其检查的数据的数据结构自
Matrix
类以来没有更改,则可以在最通用的
Matrix
类中执行这些操作

如果您更改了自
矩阵以来的数据结构,您应该在更改数据结构的类中实现测试


问候

谢谢你的回答!但我很抱歉,当我描述我的层次结构时,我不是说
继承了
关系。我的意思是
GraphMainWindow
使用
Graph
,使用
GraphModel
,这是
MatrixGraphModel
的超类,使用
MatrixGraphModel
,它使用
矩阵,它使用“cell”在整个层次结构中表示相同的东西吗?
isCellEmpty()
测试相同的东西吗?有点不同的目的。但一般来说是这样的。(在所有层次结构中,我都进行相同的检查。)在这种情况下,在方法开始有意义的地方实现方法。另外,使用不同的方法名称使含义更清楚。