オブジェクト指向の手本、デザインパターン
デザインパターンはオブジェクト指向のよきお手本
本連載「速習!デザインパターン」では、「プログラミング経験はあるけど、オブジェクト指向にはちょっと抵抗が感じる」「デザインパターンは初めて」という方を対象にしています。
デザインパターンは先人たちの知恵のエッセンスです。オブジェクト指向の本来の意味を知る上でも、初心者・入門者には最初にデザインパターンを学んでほしいと思います。身構えることはありません。コツさえつかめば、大丈夫です。
3回の連載では、オブジェクト指向プログラミングの代表的なパターン、GoFのデザインパターンの中から代表的なものをご紹介しますので、デザインパターン学習のコツをつかんでいただきたいと思います。
ところで、デザインパターンを学ぶとどんなメリットがあるのでしょうか?プログラミングの達人と初心者の差とはなんでしょうか?その答えは「生産性」と「メンテナンス性」にあると思います。
実際の現場では、COBOLやVB6.0で作られた「オブジェクト指向ではないプログラム」はたくさん存在します。実際、現場ではCOBOLやVB6.0などのプログラミングの作り直しなどから、JavaやC#でも同じようなプログラミングスタイル(例えば構造化プログラミング、グローバル変数の多用など)を要請されることがあります。JavaやC#でもそのようなプログラミングは可能です。
ですが、そもそもJavaやC#などの言語の仕様は、オブジェクト指向の特性であるカプセル化・継承・ポリモーフィズムの効果を引き出しやすいように設計されており、開発の本流もオブジェクト指向と呼ばれるプログラミングスタイルに移行しています。
つまり、効率的な生産性、再利用や修正などのメンテナンス性を考えると、本来のオブジェクト指向らしいプログラミングをすべきであるといえると思います。それでは、本来のオブジェクト指向らしいプログラミングとはどんなものでしょうか?
ここで模範・参考にすべきものが、GoFのデザインパターンと呼ばれるものです。
GoF(the Gang of Four)とは、エーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースの4人のことです。GoFのデザインパターンとは、オブジェクト指向のソフトウエア再利用についての代表的なものを23のパターンにまとめたものです。
大きく分類すると下記の3つの分類に分けることができるようですが、本連載では、各分類から理解しやすいパターンを取り上げ紹介することにします。
・生成に関するパターン
Factory Methodパターン
・構造に関するパターン
Adapterパターン
Bridgeパターン
・ふるまいに関するパターン
Chain Of Responsibilityパターン
「サンプルコードで動作を理解→UMLで構造を把握」がコツ!
デザインパターンを理解するための第1歩としてサンプルコードを実行することは重要なことです。まず、クラスの構造や各クラスの関連などをひとつひとつコードを入力し、実行して、そのパターンのふるまいを理解していくことが早道です。
統合開発環境(Visual Studio)などでは、デバッガでブレークポイントを設定しながらシングルステップで動作を追っていき、そのふるまいやその結果を確認することができます。説明の都合上、サンプルコード(C#)は本文末にあります。みなさんも入力して実行し、そのふるまいを確かめてみてください。
次に、デザインパターンをコードで理解することももちろん重要ですが、UML(Unified Modeling Language)で視覚的にイメージできるようにもなりましょう。GoFの23種類もあるデザインパターンをコードで理解しても、これを暗記していくのは効率的ではありません。デザインパターンを実践で利用するためにも、クラスの構造やオブジェクト間の関連を頭の中で即座にイメージできた方がよいのです。