オブジェクト指向の理解からデザインパターンの適用、そしてリファクタリングへ~教育委員会~

最近、リファクタリングの動画を見たときにデザインパターンの話がでてきました。

schooの動画はこちら

皆さんはデザインパターンやアンチパターンという言葉を耳にしたことはありますでしょうか?
なんとな~く言葉は知っていても、説明するのはちょっと・・・となったり、
実際どんなパターンがあるのか・・・となったりしてませんか?

意識していなくても、成功している事柄であれば何かしらのデザインパターンが適用されている、または、新たなデザインパターンと成りえるでしょう。
逆に、失敗している事柄は何かしらのアンチパターンにハマっている可能性があります。

設計やプログラミングのデザインパターンの多くはオブジェクト指向をベースとしたものが多いのですが、オブジェクト指向って??(゚⊿゚)シラネ となる人も、勉強したことはあるけど普段はあまり意識しないな・・となる人も、知っていれば何かの役に立つはずです。
オブジェクト指向が理解でき、様々なデザインパターンを知った上でのリファクタリングができれば、生産性や品質の向上につながりそうですね。

では、まずはそれぞれの概要からいってみましょう!

■オブジェクト指向とは?
まず、オブジェクトとは何でしょうか?
簡単に言ってしまうと、「テーマを持った状態(属性)と処理(振る舞い)の集まり」ですね。

例えば”DAO”(ダオ)なんて言葉を聞いたことがありますでしょうか。
Data Access Objectの略ですが、データにアクセスする時のオブジェクトの名前ですね。
(新人のころにダオってなんですか?って聞いたことがありますね~)

データベースなんかの永続層にアクセスする際によく使われますが、
これは「データベースにアクセスする」というテーマを持っています。
このオブジェクトの振る舞いについては、「xxを登録する、xxを更新する、xxを削除する、xxを検索する」などを振る舞いとした場合に、
属性については、DBの接続設定やテーブル名やカラム名などデータベースの情報になるかもしれません。

これをひと括りにすることを「カプセル化」なんて呼んだりしますね。
また、「汎化、継承」「ポリモーフィズム」なんてのもありますが、長くなるので、次回以降にしたいと思います。

テーマを持ったオブジェクト同士が相互作用して、新たな振る舞いを作る考え方のことをオブジェクト指向といいます。

■デザインパターンとは?
一言でいうと、「こうあるべき」というものをカタログ化したものです。
”虎の巻”といった方がピンとくる人がいるかもしれません。

プログラミングや設計をしていると、以前経験したことがある、似たような問題に出くわすことがよくありますよね。
そのような問題の解決法にわかりやすい名前を付けて、 カタログ化(虎の巻化)したものがデザインパターンです。

デザインパターンには色々な種類がありますので、いくつかピックアップしました。

・GoFの23のパターン
デザインパターンと言えばこれを指すというくらいのバイブル的存在です。
基本的な23のパターンがカタログ化されています。
ちなみにGOFとは”The Gang Of Four(4人の奴等)”の略であり、エリック・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースの4人を指しています。

・アンチパターン
「こうやるとダメだ」というものをカタログ化したもの。
⇒アンチパターンに当てはまるものをリファクタリングしたりします。

※デザインパターンの枠から上流工程へ少し外れますが、以下も大切です。

・アーキテクチャパターン
MVCやレイヤなどシステム全体のアーキテクチャ(構造)をパターン化したもの。

・アナリシスパターン
医療、在庫管理、会計、金融などの具体的な業務システムにおける設計やモデリングのパターンをカタログ化したもの。

■デザインパターンを適用するメリットと注意点
・再利用性の高い柔軟な考えがみにつく
多くの熟練開発者の「知恵」が 詰まったデザインパターンを知ることで、経験がまだ少ない人もヒントを多くもらうことができるでしょう。
直接デザインパターンを使わなかったとしても、デザインパターンを理解すること で「設計力」を高まります。
より良いコードが書けるようになっていくことは、技術者として成長していく 楽しみにもつながることでしょう。

・注意点
デザインパターンを適用すれば全てが解決するわけではないことを知っておきましょう。
状況に応じて、使えそうかどうかを判断することが大事です。

■リファクタリングとは?
リファクタリングとは、ソフトウェアの外部的振る舞いを保ちつつ、理解や修正が簡単になるように、内部構造を改善することです。
実施することで、以下のような効果を得られます。
・ソフトウェア設計を向上させる
・ソフトウェア設計の劣化を防ぐ
・ソフトウェアを理解しやすくする
・バグを見つけ出す
・より早くプログラミングできる

ただし、デザインパターンや、特にオブジェクト指向の理解がない場合、ほとんど意味のないリファクタリングとなってしまうでしょう。

■まとめ
今回は概要だけでしたが、デザインパターンやリファクタリングに興味を持っていただけたでしょうか。
私もこれを期に色々と調べていきたいと思っています。(^^)v

About the author

kazuaki0088

Add Comment

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

By kazuaki0088

最近の投稿

アーカイブ

カテゴリー

タグクラウド

コーポレートサイト

メタ情報