第16回「偉大な先人達に学べ。デザインパターンの重要性。」
更新日:
こんにちは、森川です。
「継続は力なり」で今日もブログ書きます。
東京メトロに乗って執筆中。できるだけ短時間ちょっぱやで書いてるので誤字脱字は許してmOm
始めに
オブジェクト指向についての記事はこれまで3回書いたのですが、別のことを書いたりしてちょっと間が空いたのでおさらいをしておく。
これまでは、
の流れでお話してきた。
OO(オーオー)を習得するための目標
過去の記事でOO(オーオー)とは何かということを説明したところで、
今回は、この思考方法を習得するために何を目標にすればよいかを書いてみる。
まずOOを習得するための始めに目標にしたいこと、やはりそれは
「デザインパターンの習得」
であろう。
デザインパターンを自分の開発するシステムに自由に組込めるようになること。
「デザインパターン」とは
「デザインパターン」という言葉は聞いたことがある人も多いと思う。
今更だけどこれ何なのかを簡単に説明しておくと、システム屋ならイメージはつくと思うけど、いろんなシステムを開発しても内容は違うのだけどやってることはほぼ同じということはよくあるよね。
クラス設計もそうなんよ。よく出てくる設計パターンってやっぱり決まってるのよ。
デザインパターンとは、そのよく出てくるパターンはこういうふうに設計しなさいと偉大な先人達がパターン化して教えてくれている秘伝の巻物なのです。
GoFは絶対に必須だよ
この秘伝の巻物は、たくさんあるのだけど、絶対に抑えとかないといけないのが、言わずと知れた
「Gang of Four」の23のデザインパターン
4人の偉大な先人達が提唱した23個のデザインパターン。通称「GoF(ゴフ)」なんて呼び方をする。
その他にも秘伝の巻物はたくさんあります。マルチスレッドやゲームなんかのデザインパターンもあるよね。
たくさんある中でもこのGoFは誰が何を言おうと必須だと思う。
代表的なGoFのデザインパターン
GoFの中で皆さんも見たことがあるもので言えば、おそらく「シングルトンパターン」「ファクトリ●●パターン」あたりかな。
シングルトンという言葉はどこかしらで目にしたことはあると思う。
また、先日WordPressのコアプログラムを見ていてもあったけど、●●Factoryと名づけられたクラスはいろいろなところで目にするよね、これらはファクトリ系のデザパタを組み込んでるんだよね。
こんなのが実はまだまだ23個もあるのよ。
GoFを使いこなせるようになると、インターフェイスや抽象クラスなどオブジェクト指向で出てくる小難しい登場人物の使い方は、おおよそ理解できるようになっているはず。
デザインパターンは、この小難しいやつらをフルに使ってクラス設計をしていくから、デザインパターンを理解できるということは、必然として小難しいやつらも理解できているはず。
デザインパターンは本当に奥が深い
ただ、このGoFの秘伝の巻物、これがまた本当に奥が深いし難しい。おそらく挫折した人もかなり多いと思う。
私も始めて書籍を買って学習したときは、全く意味がわからんかったわ!!
その当時は、コードを必死覚えるけど、なんのためにこれらを使うのか全然理解できないから、自分が開発するシステムに応用しようとしてもできなかった。
シングルトンという言葉を聞いたことがある人は多いと思う。でもそれを自分でシステムに導入するとなると相当ハードルは高くなるよね。
おそらく、これは誰もぶちあたる壁だと思う。
壁を乗り越えるためには
この壁を乗り越えようと思うと、プログラミングへの視点を180度変えないとだめなんよ。
以前も書いたけどOOの考え方は、構造化プログラミングの延長上、その先にある考え方だから、構造化プログラミングと同じ考え方をしてたら到底理解できない。
次回以降のは数回にわたって、デザインパターンを理解するためにどのように視点を変えていかないといけないか書いていきたいと思う。こうご期待。
なお、デザインパターンの「コード」の説明については私が書かなくても他のところにたくさんあるので、時間の都合上このブログでは割愛するのでご了承の程を。
GoFはなぜ必須??
上記でGoFって必須って書いた。
有名な某書籍にもこんなことが書いてあった。
以下引用。
「デザインパターンはシステム屋にとって必須なイディオムです。これらの言葉を使ってプログラマー達は会話する」
本当にそうだと思う。デザインパターン用語っていろんなとこで普通に使われているよ。
例えば、、、、
例1
Javascriptはかなり変態な言語。
WEB制作(ホームページ制作)でjQueryを書くぐらいであれば問題ないけど、ちょっと凝った仕組みを作ったりここのブログでとりあげているような再利性を考えたようなプログラミングをするとその変態さゆえに必ずはまるよね。
詳しいことはここでは触れないけど、その原因になっているのが、Javascriptが「プロトタイプベース」のオブジェクト指向言語であるということ。
この「プロトタイプベース」という言葉、WEB系のシステム開発が多い人なら見たことあるはず。
プロトタイプとは???そう、まさにGoFのデザインパターンにあるプロタイプパターンのこと。
これを知っていれば、詳しい説明はいらない、プロトタイプという一言でその変態さの理由がすべてが理解できちゃうのよ。
そう、クラスベースと違ってすべてインスタンスを持つということ。
例2
何の書籍か忘れたけどこんな説明を見たことがある。
Javascriptのイベント処理は、オブザーバーパターンでできています。
これもGoFのデザパタよ。
これから気付くこと。
jQueryでこんな感じで複数回クリックイベントをonすると複数回アラートがでるよね。
$(function(){
$(‘.btn_send’).on(‘click’,function(){
alert(‘a’);
});
$(‘.btn_send’).on(‘click’,function(){
alert(‘a’);
});
});
複数回出る理由は、オブザーバーパターンでできているから。
細かい説明はいらないこの一言ですべてが理解できちゃうのよ。
$(function(){
$(‘.btn_send’).click(function(){
alert(‘a’);
});
$(‘.btn_send’).click(function(){
alert(‘a’);
});
});
でもこれだと複数回でないよ。
前者はイベント(オブザーバーパターン)、後者はonClickタグへの埋め込みだから。
その他にもしれーとGoF用語が使われているところはたくさんあると思う。シングルトンなんかはいろんな人のブログで普通に使われているイディオムだよね。
というふうにGoFのデザインパターンはいろんなところで当たり前のように使われています。
次回以降はGoFを習得するために、いろいろアドバイスをしたいと思う。
ではでは、今日はこのぐらいで。
今日の独り言
最後まで読んでいただき本当に感謝感謝です。
以前どこかで書いたけど、私は製薬会社の研究員あがりです。
研究職の仕事では、毎日やったことを必ず実験ノートにまとめないといけない。
このノート一冊一冊が、特許にも関わる重要な会社の財産として残っていく。
このブログは、私の今の仕事の「実験ノート」として続けていきたいと思う。
一歩一歩着実に「継続は力なり」で。