デザインパターンの憂鬱

テーマ:

久しぶりに@ITのサイトに行ってみた。コラムニストの皆さん相変わらずですね。

 

「飛田ショウマの憂鬱」

http://el.jibun.atmarkit.co.jp/pressenter/2017/01/_11.html

リーベルGさんの小説って「高慢と偏見」以来読んでいません。呼んでて憂鬱になってしまいそうで恐いです。

「インターフェース」「抽象クラス」「デザインパターン」ってオブジェクト指向の中でも高度な知識が要求される言葉が出てきます。ほんとうに実際の開発の現場で有効に役に立ってるのでしょうか?開発ツールやフレームワーク自体の開発を行うならば、そのようなフレームワーク技術は役に立つでしょう。しかし、建設会社向けのアプリケーションの開発でフレームワーク技術が有効に活用されるとは思えません。

 

以下のサイトでは、実際の開発会社が使っているデザインパターンの情報が掲載されています。

http://isol.pro-s.co.jp/news/2008/11/05/design-pattern/

Template Methodパターンは確かに基底クラス、派生クラスの関係で、派生クラスから基底クラスのメソッドをオーバーライドする手法で、デザインパターンを知らない人でもオーバーライドやった経験があるかもしれません。ファイルの読み込みのカスタマイズに使っていると記載されている。ある程度の効果は期待できますが、何もそのようなものを作らなくても既存のファイルアクセスライブラリで十分よ!という人もいるわけで、このパターンを活用するかどうかは開発者の趣味に依存するとことが大かと思います。

 

Iteratorパターンの説明読んでもさっぱりわからんので、ちょっと勉強してみました。

 

Iteratorパターン

http://www.itsenka.com/contents/development/designpattern/iterator.html

 

 

このパターンの肝は以下の一行。

class Client : Iterator it = a.iterator();

a は ConcreteAggregateのインスタンス

 

a.iterator()を実行すると以下が実行される。


ckass ConcreteAggregate メッソッド iterarator

         return new ConcreteIterator(this);                                                 

thisはこのメソッドを実行するクラスのインスタンス、すなわち a

 

さらに このコンストラクタ ConcreteIterator(this) を実行すると以下が実行される。

 

class  ConcreteIterator コンストラクタ

    ConcreteIterator(ConcreteAggregate concreteAggregate) {

this.concreteAggregate = concreteAggregate;

    }

このコンストラクタの引数は手順①で指定された a

 class  ConcreteIterator のメンバー変数concreteAggregateに、a のインスタンスが入る

 

最終的にclass ConcteIterator の concreteAggregateのメンバー変数にインスタンス a が設定されるので、ConcteIteratorのメッソッドhasNext() やnext() を実行することができるようになる。

 

Iterator it = a.iterator();

Iterator it = new ConcreteIterator(a);

でもいいはずなんですが、そうかえちゃうと見え見えのパターンですかね。コンストラクターやメソッドの引数としてインスタンスを渡すのはよくるパターンですね。これじゃ月並みすぎますよね。

a.iterator() というメソッドを実行し、そのメッソッドでは this に インスタンス a が入るはずなんで、それで ConcreteIteratorのインスタンス生成をする!なんてトリッキーなことをやってます。

 

何も配列に関する処理を複数のクラスに分散させて、さらにインスタンスの引渡しを一見してわからなくするようなデザインが実践で役に立つとは思えませんが・・・

皆さん何やってるかわからんからデザパタってすごいって思っちゃってるんでしょうか?

 

「飛田ショウマの憂鬱」を呼んで、俺はデザインパターンがわからないからダメだあ~なんて悲観することはないです。また時間をかけてデザインパターンを読み解く必要もないと思います。それよりはもっと実践で役に立つ勉強に時間を割り当てたほうがいいですよ。

 

 

AD