PHP7.2でデザパタ再入門 - デザインパターンとは?
先日、Twitter上でPHPによるデザインパターン入門 - 目次の記事一連がすごく良いと見たので、さっそく見てみることに。
じつは以前から、ちゃんとデザインパターンを勉強しないとなーと思っていたのですが、なんだかんだ引き延 ばしながらサボっていました。
2年くらい前に結城先生の本(こちらはJavaですが)を一周したのですが、だいぶ知識が抜け落ちていたので、 技術の補填も兼ねてよい機会だなと。
結城先生の本はこちら
で、これはいいものだ…と記事を読んでいたのですが、何点かPHP7.2なら省略できそうな部分があったりしたので、勉強がてら書き直しながらブログを書いたら一石二鳥じゃ?ということで、ブログを書き始めました。
はじめはデザインパターンとはなんぞや?というところから見ていきます。
デザインパターンとは
デザインパターンとは、一言でいえばプログラムのデザインにおける基本の型みたいなものです。
囲碁や将棋の世界でいわれる定石という言葉がわかりやすいかもしれません。
もともと、この言葉はプログラミングの世界からではなく、建築家として活動していたChristopher Alexander氏が発表した論文から来たものです。
この論文は設計・建築などでよくある典型的な問題と解決方法をまとめたもので、これらをパターンと呼びました。
要するに、よく出くわす問題はだいたい決まっていて、対処法も明確になっているから、これをまとめて論文にしたらみんなハッピーじゃない?という感じで生まれたんですね。
その後、Kent Beck氏とWard Cunningham氏が発表した論文で先ほど説明したパターンという考え方がプログラマの世界に持ち込まれることになりました。
Kent Beck氏といえば、テスト駆動開発(TDD:Test Driven Development)でも有名な人ですが、いろんな活動をされているんですねぇ…。
こちらも建築界におけるパターンと同じで、ソフトウェアの設計時によく出くわす問題およびその解決方法をまとめたものです。
熟練のプログラマであれば、そのあたりを経験から導き出せるのですが、それをパターン化してまとめたことで多くの人に支持される形となったわけです。
知っているとどんな良いことがある?
知っていると、より良いプログラム設計ができるようになります!
そもそも良い設計とは何か?ということですが、ここでは柔軟性があって再利用性が高いデザインのことだと考えています。
この辺りはDRYの原則(Don't repeat yourself)に則った考え方ですね。
要は同じことを何度も何度も書くよりは、一回キレイに作ったものを再利用したほうがバグも少なくなるし、作り込む時間が少なくて済むやん?ってことです。
あとは、エンジニア同士でのコミュニケーション時間を短くすることができます。
パターン名とその特徴をチームの全員が知っていれば、わざわざパターンの説明をお互いにする必要もないので、その分話の進みが早いというわけです。
さらに、オブジェクト指向への理解がより深まります。
デザインパターンは、オブジェクト指向を使った設計パターンをまとめたものなので、具体的にどうやってオブジェクト指向を使ってコードを書いていくかを知ることができます。
デザインパターンをはじめて写経した時点ではわかりにくいかもしれませんが、何度も触れるうちにだんだん理解度が深まっていきます。
まとめ
簡単にですが、デザインパターンについて説明してみました。
デザインパターンはあくまで定石であり基本であるので、現場で実際に使うにはまた違った視点が考える必要があります。
とはいえ、定石を知っておかないと応用が利かないので、まずは基本定石を知ろうというスタンスで更新していこうと考えています。
自分もデザインパターンを完璧に理解しているか?というと、そんなことは全くないですが、自身の勉強のためにも記事を書きます。
プログラムの世界はほんとうに奥深くて難しいですが、少しでも地力を伸ばすために学び続けていきたいと思います。