0

我正在制作一个程序来研究国际象棋的开局、陷阱和其他相关的事情。它有一个类 MoveSequence,它基本上是来自 ChessPosition 类的对象的有序列表。我还有一个 ChessOpening 类,它有一系列动作和一个名称、一个 ECO 代码(国际象棋开局分类系统)以及可能更多的东西。

我应该将 ChessOpening 实现为 MoveSequence 的子类,还是应该只包含一个 MoveSequence 对象?同样的问题也适用于 ChessTrap 类。

不要认为我在这个简单的问题中选择什么很重要。但是我想学习这些东西,所以我想知道在做出这样的决定时是否应该考虑一些原则或经验法则。

4

1 回答 1

0

我的 0.02 美元价值:

如果一个可能的子类基本上不共享其超类的所有属性和方法,我开始怀疑。

重写方法来改变行为,或者添加新的属性和方法是正常的。但是,当某些超类属性/方法不适用于子类时,当您遇到这种尴尬时,它会变得令人毛骨悚然。(那你会怎么做,只是忽略无效/不适当的部分?希望没有人打电话给他们?把它们存根并在使用它们时引发错误?)

如果 xxx 不是真正的 yyy,也许 xxx 和 yyy 都是 zzz 的。(或者如果他们只是共享共同的行为,也许可以创建一个要包含的模块,这是标准的 Ruby/Rails 实践。)

一个真正的计算机科学家可能有一个更简洁和明确的答案......

于 2013-03-24T15:02:43.320 回答