導入
ビンゴゲームも盛り上がってきた頃,
というわけで,
展開
BingoProgression
クラスを継承する
BingoProgression
クラスは一方通行にビンゴ数列の要素を吐き出します。吐き出したあとは,BingoMachine
アプリケーションを再起動すると,
例えばこのスクリーンショットは,
このような外見で,
これを作業とします。そして作業については条件があります。
BingoProgression
クラスを継承すること。BingoProgression
クラスを継承したRewindableBingoProgression
クラスを作成してください。このクラスに,数列の最初の要素から再度数列を取得するための goHead
メソッドを持たせてください。BingoProgression
クラスのソースコードには一切手を加えないこと。理不尽ですが,
作業の課題ですからそのようにしてください。現実的な状況を想定するならば, BingoProgression
クラスのソースが公開されていない場合や契約上コードの変更が許されない場合だとしてください。
また、集合の要素の最初に戻る機能付きのIteratorインタフェイスを連載第24回で作ったようにRewindableBingoProgression
クラスに実装しても良いのですが,
リプレイ機能付きで親切なビンゴマシンのコード
作業により,
BingoProgression
クラスを継承しましたから,BingoProgression
クラス側で行われます。サブクラスであるRewindableBingoProgression
クラスにはビンゴ数列生成のコードはありません。
これは継承を利用する際のありがたさです。サブクラス側にcreateBingoProgression
というコードが全くなくても,
継承の弊害
さて,
例えば,RewindableBingoProgression
クラスは,Iterator
インタフェイスのメソッドを利用しています。その際,
絶対に継承を利用したほうがわかりやすい,
では,
そこでリファクタリング