fv17の日記

Webエンジニアの備忘用ブログです。主にWeb界隈の技術に関して書いています。

デザインパターンの学び方

オブジェクト指向デザインパターンの適切な勉強方法が見当たらないためメモ。

現在、勉強中のため随時更新する予定。

 

なぜ学ぶか

オブジェクト指向デザパタを十分に理解、活用することで下記のメリットが得られる。

・設計において、開発者同士のコミュニケーションがスムーズにできる(※1)

・実装において、可読性、保守性が高いコーディングができる

・エンジニアの採用面接において各パターンのメリット等が質問される(※2)

 

※1 「xxxパターンで実装すればいいよね」的な会話が行える。

※2 強い動機の一つ。

 

どうやって学ぶか

書評や勉強方法の記事を漁ったところ、初学者はまず下記のいずれかをやる。

オブジェクト指向デザインパターンの"導入本"と言ったところ。

 

・HeadFirstデザインパターン(※3)

 https://www.amazon.co.jp/dp/4873112494

オブジェクト指向のこころ

 https://www.amazon.co.jp/dp/4621066048

 

※3 HeadFirstシリーズは文章の書き方が非常に独特なので注意。1章分立ち読みを。

 

上記2冊は、

・可読性や保守性の低いコード

・あるいは設計段階でどうしようかとお手上げ状態になってしまったもの

に対して、こうすれば解決できるよ!と、

・問題の提示

オブジェクト指向デザインパターンを使って解決

という流れになっている。

 

そのため、

・なぜオブジェクト指向が必要か?

・なぜそのパターンを適用させるか?

というなぜ?の部分の説明が豊富で、腑に落ちる書籍となっている。

 

その後、下記書籍でパターンに一通り触れ、上記で習得したオブジェクト指向の幅を広げる。

 

・増補改訂版Java言語で学ぶデザインパターン入門

 https://www.amazon.co.jp/dp/4797327030

 

上記以降はまだ私自身が到達していないため、後日に。

 

勉強方法の参考になったサイト

デザインパターンがなかなか習得出来ない - 皆さんはどうやって、習得さ... - Yahoo!知恵袋

デザインパターンを正しく理解するための本リスト - 大人になりたくない 

 

実際やってみて

正直、どの書籍も簡単、分かりやすいとは言えない。

 

導入本2冊は突然専門用語を使い始めたり、何より説明が冗長。

微妙に単語が違うこともあり多々ストレスに感じた。

例えば「設定メソッド」とか「setter」と言ってくれた方が分かりやすい。

 

また、結城本も説明が非常に分かりやすいのだが、なぜそのパターンを使うのか?という部分の説明がさらっとしており、この本だけでは腑に落ちない。

 

導入本が必要になり、「この本1冊でデザインパターンの基礎は終わり」とはならないのが辛いところ。GOF本を簡易的に説明しているところは素晴らしい貢献なのだが、結城さんの書籍(数学ガール等)は全般的に分かりやすく、かつ楽しいので、導入本2冊の内容も含めた書籍を是非作って欲しいと願うばかり。

 

現状の書籍ラインアップだと、下記迷える子羊たちが量産されそう。

オブジェクト指向デザインパターンを勉強したいけど何すれば良いですか?

オブジェクト指向デザインパターンを勉強したいけど良く分からず挫折しました。

  

その他参考にしたサイト

上記3冊では、いまいちピンと来ないオブジェクト指向デザインパターンの解説については下記のサイトで知識を補完した。

 

サルでもわかる 逆引きデザインパターン 第1章 はじめてのデザインパターン はじめに

正直、俺は猿以下かと泣きたくなる場面も多々あった。猿に負けたく無い!という気持ちを持っている場合にオススメ。

 

デザインパターン | TECHSCORE(テックスコア)

デザインパターンを利用する前後のソースコードが記載され、また取り扱っている事例も身近なもので分かりやすい。パターン使用後のソースしかない結城本より、なぜそのパターンを使うか?が腑に落ちやすい。

 

モジュール結合度について復習した - おじゃまぷよ系エンジニアメモ

ソースコードありで"結合度"って具体的にどういうこと?を解説している。「結合度を低く!!」って各書籍で連呼されているが、そもそも結合度って何やねん...という場合にオススメ。

 

デザインパターン以前にオブジェクト指向のメリットが良く分からんという場合

スッキリわかるなどのJavaの入門文法書を読んだばかりでは、先述した2冊の導入本を手にすると二度とプログラミングする気が失せると思います。そういう場合は下記を挟むと少しは症状が緩和するかもしれない。

 

・プログラミングの歴史を通してオブジェクト指向を知る

オブジェクト指向でなぜ作るのか(日経BP社)を読む。

https://www.amazon.co.jp/dp/4822284654

プログラム言語の誕生から現在に到るまでの進化の歴史を通して、オブジェクト指向プログラミングの誕生理由やメリットなどを知ることができる。

 

・Qiitaの記事で手軽に知る

qiita.com

 

・実際に手を動かして実装しながら身につけたい

「なぜ、あなたはJavaオブジェクト指向開発ができないのか」をやる。

https://www.amazon.co.jp/dp/477412222X

あるいは、「Javaオブジェクト指向がゼッタイにわかる本」をやる。

https://www.amazon.co.jp/dp/4798050482