|
コピペから始めるTemplateMethod-1,コピペから始めるTemplateMethod-2に引き続き今回どのようにして掲題の方法をとるかを記していく。
クラスをコピーして新しいクラスを作成したくなった場合の手順である。
1.まず元のクラスを2つコピーし、3つのクラスにする。
3つのクラスにする理由としては、既存のクラスと新しくコピーされて作成されたクラス、共通部分のクラスとするためである。
以降説明では、コピー元のクラスをクラスA、新しく作成されたクラスをクラスBとし共通部分のクラスBaseとする。
↓
2.通常コピペで新しく作成したクラスを実装するようにクラスBを修正して新しく作成されたクラスBをテストする。
このときクラスAとクラスBの差分は出来るだけ少なくなるのが望ましい。
例)NewClassBのAddPageメソッドの一部を変更した。
さらにこのメソッドから呼び出す関数としてNewFuncを追加した。
そしていよいよ共通化のための作業である。
3.クラスAとクラスBを比較ソフトなどで比較して差分を見る、差分になっていない部分はそのまま共通化できる部分である。
クラスBaseに対してクラスAとクラスBの差分の部分を純粋仮想関数として切り分ける。
例)NewClassBのAddPageメソッドのが変更されているのでNewClassBaseにAddPageからコールされるAddPageBと言う純粋仮想関数を追加。
4.クラスAとクラスBの基底クラスをクラスBaseにして、クラスBaseの純粋仮想関数を実装する。
5.クラスAとクラスBのコードでクラスBaseの純粋仮想関数を実装した部分以外を全て削除する。
上記の手順が「コピペから始めるGOFのTemplate Method」の手順である。
これによるメリットは
1.更なる修正で新たにクラスAをコピーしてクラスCを作成したい時、既存のクラスBaseから派生させクラスCを実装することが検討でき、次回以降の作業で共通機能をそのまま再利用できるケースが多い。
なぜなら、クラスAとクラスBの機能差分は何らかの必然性があって分割されたものである。
であれば同様の要求が出てきた場合、同様の必然性に基づくことが多い。
2.パターンは複数クラスによるアルゴリズムのようなものであるためクラス設計に基づき実装していくことが必要であるが、上記の手法を使えばクラス設計が必要ない。
副次的な効果として、パターンの適用は経験に基づくクラス設計が必要であるが、上記を何度か行うことにより経験を養えクラス設計にフィードバックすることが出来る。
コピペでコードを増殖させたくなった時、一度この手法をとってみることをお奨めする。
自作フリーソフトi-port紹介ページ
http://www.geocities.jp/ys_and_otherjp/index.htm |

- >
- コンピュータとインターネット
- >
- コンピュータ
- >
- パソコン





