私は暇なときに、PHPでOOPのハングアップを試みるためにSudokuソルバを構築しています。数独パズルは、知らない人のために、最も一般的な形で1から9までの数字の9×9行列です.3×3の正方形は、タックタックのようなパターンで描かれています。いくつかの数字は事前に記入されています。パズルの目的は、残りの数字を入力することで、行、列、または3×3の正方形に同じ番号が複数回含まれないようにすることです。空のクラスを宣言するのは悪いですか?
これを行うには、いくつかのクラスを作成しました。 Cell
は、行、列、および3x3の正方形であるConstraint
の要素にすることができます。 Sudoku
は、Constraint
sとCell
sのコレクションです。私はSolverHelper
サブクラスクラスの宣言でソースファイルを動的に含むSudokuSolver
クラスを持ち、各サブクラスの1つをインスタンス化します。ヘルパーは、を引数として持つSolve()
関数を持っています。それはConstraint
を調べ、見つかったものに基づいて価値の可能性を排除するように細胞に要求します。プログラム自体は、もはや何らかの可能性を排除することができないと報告するまで、ヘルパーをループするだけです。
しかし、行または列のすべてのセルが並んでいるという事実は、特定のソリューション技術の利点を生かした特定の理由があります。だから私は行/列と他のConstraint
を区別する必要があります。私は行と列を別々の配列にできますが、これは悪い解決策ではありません。これには、最適化の機会を与えるという利点があります。たとえば、列が他の列と交差することはありません。ブール値のプロパティーIsLinear
を追加することもできます。
または今私は私の質問に答えます:Constraint
クラスをサブクラス化してLinearConstraint
にすることができました。しかし、そのクラスは空です。 Constraint
クラスのものを上書きする必要はありません。それは中括弧のペアであり、それはそれです。 LinearConstraint
オブジェクトはそのクラスのインスタンスであるために特別です。線形制約に関係する特別なコードを必要としたり、必要としたりしたければ、いつでも追加することができます。私の質問は、私が空のクラスを宣言して使用することを検討しているということです。何か間違っているという印がありますか?これについて私はあまりにも抽象的で理論的なのですか?
'新しいstdClass()で十分でしょうか?または '(オブジェクト) ''? –
@ JaredFarrish、彼は何も変更せずに既存のクラスを拡張するように頼んでいます(空の子クラス) –
仮説クラスのメンバーは、その基本クラスから来る機能を持っています。つまり、そのクラスは基本クラスの機能に何も追加しません。私は何もしないオブジェクトを作成することは一切考えていません。 – toon81