0

私はチェスのオープニング、トラップ、およびおそらくその他の関連することを研究するためのプログラムを作成しています。これにはクラス MoveSequence があり、これは基本的にクラス ChessPosition からのオブジェクトの順序付きリストです。また、一連の動きと名前、ECO コード (チェスのオープニング分類システム) などを持つクラス ChessOpening もあります。

ChessOpening を MoveSequence のサブクラスとして実装する必要がありますか、それとも単に MoveSequence オブジェクトを含める必要がありますか? クラス ChessTrap にも同じ質問が当てはまります。

この単純な問題で私が何を選ぶかは、それほど重要ではないと思います。しかし、私はこのことを学びたいので、このような決定を下す際に考慮すべき原則や経験則があるかどうか疑問に思っていました.

4

1 に答える 1

0

私の0.02ドルの価値:

可能なサブクラスが基本的にそのスーパークラスのすべてのプロパティとメソッドを共有していない場合、私は疑問に思い始めます。

メソッドをオーバーライドして動作を変更したり、新しいプロパティやメソッドを追加したりすることは正常です。しかし、スーパークラスのプロパティ/メソッドの一部がサブクラスに適用できない場合に、そのぎこちなさにぶつかると、不気味になります。(では、無効/不適切な部分を無視してどうしますか? 誰もそれらを呼び出さないことを願っていますか? それらをスタブして、使用されている場合はエラーを発生させますか?)

xxx が実際には yyy でない場合、おそらく xxx と yyy は両方とも zzz のものです。(または、共通の動作を共有するだけの場合は、標準の Ruby/Rails プラクティスであるモジュールを作成して含めることができます。)

本物のコンピューター科学者は、より簡潔で決定的な答えを持っているかもしれません...

于 2013-03-24T15:02:43.320 に答える