コンストラクタを考える。自らの役割を果たすために必要な情報は、コンストラクタで渡してやる必要がある。・行か列か・自分の行・列内のインデックス位置これをもとにシグネチャを作ってみるとこうなる。解答情報を保有させるクラスである。受け取ることにしよう。次元とかは考えてないのでこれでよし。コンストラクタは、後で利用できるようにこれらの情報をフィールドに格納しておく。よし、一気に作ってみよう。以外の実装はこんな感じになるだろうか。要求があれば返せるように、プロパティも幾つか定義しておく。以前と同じような問題が浮上する。呼び出し側で自由に書き換えられてしまうと困る。今回はそれを許可したくない。アクセスした場合、非常に効率が悪い。親しき仲にも礼儀ありってのが俺の持論だ(笑)ではどうするか。代替策は、「不変クラスを作成する」である。クラスも不変クラスである。一度インスタンスを構築すると、インスタンスの中身を変更することはできない。いうクラスなら、インスタンス参照を受け渡すときに、コピーや変更を気にせずに渡せるようになる利点がある。複雑な不変クラスのインスタンスを作成する場合、コンストラクタだけでは力不足だが、そういうクラスのインスタンスを作るためには、ビルダ(Builder)という別のクラスを使う。これがはやりのようだ。これは、ヒント配列をラップした不変クラスと考えよう。直接フィールドを返却することができるので効率が良い。クラスの設計で注意する必要があるのは、メソッドや値を設定する事が可能なプロパティ、そして、不変以外のオブジェクトを返すプロパティだ。これらは注意しておかないと、後々大きな問題を生みやすい。メソッド以外で値の変更はありえない。