Upload
test
View
481
Download
0
Embed Size (px)
Citation preview
2nt October 2011 Design Pattern : Abstract1
Design PatternAbstract
● Kazunori Ishikawa (Makai)
2nt October 2011 Design Pattern : Abstract2
Backgrounds
「前にもこんな感じのコード書いたなあ.でも前のコードは,今回は使えないなあ.なぜなら,前のコードを修正するよりも一から書いた方が速いし.」
2nt October 2011 Design Pattern : Abstract3
Backgrounds
MOTTAINAI !!
2nt October 2011 Design Pattern : Abstract4
Backgrounds
達人は多くの経験から課題をパターン化し,
新たな課題をそのパターンに当てはめて解決する.だから生産性が高い.プログラミングも同様.
2nt October 2011 Design Pattern : Abstract5
Backgrounds
● Object指向言語のプログラムを機能や役割で見ると,幾つかのパターンに分けることができる● 複数の要素が集まっている中から1つ1つ取り出して利
用するパターン● 現在の状態を保存し,必要に応じてUndoするパターン
...etc
GoFが23のパターンにまとめたよ!
※ GoF (Gang of Four) : エーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースの四人組
2nt October 2011 Design Pattern : Abstract6
Backgrounds
● 関連:パターン・ランゲージ● 人々が「心地よい」と感じる環境(都市、建築物)を
分析して、253のパターンを挙げた。パターンが集まり、それらの関連の中で環境が形づくられる。– 「小さな人だまり」「座れる階段」
「街路を見下ろすバルコニー」など
● 家を建てたり、まちづくりのルールを決める際に役立つヒント
● これらのパターンは各国の美しい街や住まいに共通する普遍的なもの
● 急激な近代化の中で忘れられてしまった
2nt October 2011 Design Pattern : Abstract7
Aim
● プログラムを再利用可能にすること● 拡張しやすいプログラムを作ること
2nt October 2011 Design Pattern : Abstract8
Abstract
● プログラムを完成品として見ない● 拡張して使うことを前提として設計
● 23の設計パターン● モジュールの役割に応じたパターン
2nt October 2011 Design Pattern : Abstract9
Design Pattern enables...
● 拡張性の高いプログラムを設計できる● 一般化された設計
● プログラムの構造の比較を容易にし,議論を容易にする
● プログラムの役割を明確にする● モジュール/パッケージ/クラス
2nt October 2011 Design Pattern : Abstract10
23 Patterns
2nt October 2011 Design Pattern : Abstract11
23 Patterns
● パターンのパターン (DP数)– 比較的簡単なDP (2)– クラス継承関連DP (2)– インスタンス作成関連DP (4)– 分けて考えるDP (2)– 同一視DP (2)– 構造を渡り歩くDP (2)– シンプル化DP (2)– 状態管理DP (3)– 効率化DP (2)– 意外なものをクラスで表現DP (2)
2nt October 2011 Design Pattern : Abstract12
比較的簡単なDP
● Iterator● 複数の要素の集合から,
1つずつ取り出して利用
● Adapter● 異なるインタフェースを持つクラスの間に噛ませ,橋渡しの役割を担当
2nt October 2011 Design Pattern : Abstract13
クラス継承関係DP
● Template Method● スーパークラスで処理の骨組みを記述し,サブクラスで具体的な処理を記述
● Factory Method● スーパークラスでインスタンス作成の骨組みを記述し,サブクラスで具体的な作成法を記述
2nt October 2011 Design Pattern : Abstract14
インスタンス作成関連DP
● Singleton● インスタンスを1つしか作らない,
インスタンスは1つのみで十分
● Prototype● 雛形となるインスタンスを作成し,
それをコピーすることでより具体的なインスタンスを作成
● Builder● 複雑なインスタンスを,段階を踏んで作成
● Abstract Factory● 部品を組み合わせてインスタンスを作成
2nt October 2011 Design Pattern : Abstract15
分けて考えるDP
● Bridge● 機能の階層と実装の階層に分け,
その間を橋渡し
● Strategy● アルゴリズムを切り替えて,改良を容易に
2nt October 2011 Design Pattern : Abstract16
同一視DP
異なるものを統一的に利用,インタフェースを変えずに機能を追加
● Composite● 容器と中身を同一視し,再帰的な構造を作成
● Decorator● 「飾り」と中身を同一視 → 飾りを何重にも重ねる
2nt October 2011 Design Pattern : Abstract17
構造を渡り歩くDP
● Visitor● 構造を渡り歩きながら,同じ処理を繰り返す
● Chain of Responsibility● 構造を渡り歩き,そのどこかで処理(たらい回し)
2nt October 2011 Design Pattern : Abstract18
シンプル化DP
● Facade(ファサード)● 窓口役のクラスをつくり,
そいつを通してシステム全体の操作
● Mediator● 複数クラスが互いにやりとりを行うのではなく,相談役(仲介役)を設けてそいつとだけやり取り
2nt October 2011 Design Pattern : Abstract19
状態管理DP
● Observer● 状態が変化するクラスと,
その変化を受け取るクラスに分割
● Memento● 現在の状態を保存し,必要に応じて復帰
● State● 状態をクラスで表現
状態に応じたswitch文を減らす
2nt October 2011 Design Pattern : Abstract20
効率化DP
● Flyweight● 複数箇所で同じもの(処理)が現れるとき,
それらを共有する
● Proxy● 必要なものが必要になるまで作成せず,
それまでは代理のものを利用する
2nt October 2011 Design Pattern : Abstract21
意外なものをクラス化DP
● Command● 要求・命令をクラスで表現
● Interpreter● 文法規則をクラスで表現
2nt October 2011 Design Pattern : Abstract22
Enquete
● 比較的簡単
● Iterator
● Adapter
● クラス継承関連
● Template Method
● Factory Method
● インスタンス作成関連
● Singleton
● Prototype
● Builder
● Abstract Factory
● 分けて考える
● Bridge
● Strategy
● 同一視
● Composite
● Decorator
● 構造を渡り歩く
● Visitor
● Chain of Responsibility
● シンプル化
● Facade
● Mediator
● 状態管理
● Observer
● Memento
● State
● 効率化
● Flyweight
● Proxy
● 意外なものをクラスで表現
● Command
● Interpreter
2nt October 2011 Design Pattern : Abstract23