23
2nt October 2011 Design Pattern : Abstract 1 Design Pattern Abstract Kazunori Ishikawa (Makai)

Abstract

  • Upload
    test

  • View
    481

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Abstract

2nt October 2011 Design Pattern : Abstract1

Design PatternAbstract

● Kazunori Ishikawa (Makai)

Page 2: Abstract

2nt October 2011 Design Pattern : Abstract2

Backgrounds

「前にもこんな感じのコード書いたなあ.でも前のコードは,今回は使えないなあ.なぜなら,前のコードを修正するよりも一から書いた方が速いし.」

Page 3: Abstract

2nt October 2011 Design Pattern : Abstract3

Backgrounds

MOTTAINAI !!

Page 4: Abstract

2nt October 2011 Design Pattern : Abstract4

Backgrounds

達人は多くの経験から課題をパターン化し,

新たな課題をそのパターンに当てはめて解決する.だから生産性が高い.プログラミングも同様.

Page 5: Abstract

2nt October 2011 Design Pattern : Abstract5

Backgrounds

● Object指向言語のプログラムを機能や役割で見ると,幾つかのパターンに分けることができる● 複数の要素が集まっている中から1つ1つ取り出して利

用するパターン● 現在の状態を保存し,必要に応じてUndoするパターン

...etc

GoFが23のパターンにまとめたよ!

※ GoF (Gang of Four) : エーリヒ・ガンマ、リチャード・ヘルム、ラルフ・ジョンソン、ジョン・ブリシディースの四人組

Page 6: Abstract

2nt October 2011 Design Pattern : Abstract6

Backgrounds

● 関連:パターン・ランゲージ● 人々が「心地よい」と感じる環境(都市、建築物)を

分析して、253のパターンを挙げた。パターンが集まり、それらの関連の中で環境が形づくられる。– 「小さな人だまり」「座れる階段」

「街路を見下ろすバルコニー」など

● 家を建てたり、まちづくりのルールを決める際に役立つヒント

● これらのパターンは各国の美しい街や住まいに共通する普遍的なもの

● 急激な近代化の中で忘れられてしまった

Page 7: Abstract

2nt October 2011 Design Pattern : Abstract7

Aim

● プログラムを再利用可能にすること● 拡張しやすいプログラムを作ること

Page 8: Abstract

2nt October 2011 Design Pattern : Abstract8

Abstract

● プログラムを完成品として見ない● 拡張して使うことを前提として設計

● 23の設計パターン● モジュールの役割に応じたパターン

Page 9: Abstract

2nt October 2011 Design Pattern : Abstract9

Design Pattern enables...

● 拡張性の高いプログラムを設計できる● 一般化された設計

● プログラムの構造の比較を容易にし,議論を容易にする

● プログラムの役割を明確にする● モジュール/パッケージ/クラス

Page 10: Abstract

2nt October 2011 Design Pattern : Abstract10

23 Patterns

Page 11: Abstract

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)

Page 12: Abstract

2nt October 2011 Design Pattern : Abstract12

比較的簡単なDP

● Iterator● 複数の要素の集合から,

1つずつ取り出して利用

● Adapter● 異なるインタフェースを持つクラスの間に噛ませ,橋渡しの役割を担当

Page 13: Abstract

2nt October 2011 Design Pattern : Abstract13

クラス継承関係DP

● Template Method● スーパークラスで処理の骨組みを記述し,サブクラスで具体的な処理を記述

● Factory Method● スーパークラスでインスタンス作成の骨組みを記述し,サブクラスで具体的な作成法を記述

Page 14: Abstract

2nt October 2011 Design Pattern : Abstract14

インスタンス作成関連DP

● Singleton● インスタンスを1つしか作らない,

インスタンスは1つのみで十分

● Prototype● 雛形となるインスタンスを作成し,

それをコピーすることでより具体的なインスタンスを作成

● Builder● 複雑なインスタンスを,段階を踏んで作成

● Abstract Factory● 部品を組み合わせてインスタンスを作成

Page 15: Abstract

2nt October 2011 Design Pattern : Abstract15

分けて考えるDP

● Bridge● 機能の階層と実装の階層に分け,

その間を橋渡し

● Strategy● アルゴリズムを切り替えて,改良を容易に

Page 16: Abstract

2nt October 2011 Design Pattern : Abstract16

同一視DP

異なるものを統一的に利用,インタフェースを変えずに機能を追加

● Composite● 容器と中身を同一視し,再帰的な構造を作成

● Decorator● 「飾り」と中身を同一視 → 飾りを何重にも重ねる

Page 17: Abstract

2nt October 2011 Design Pattern : Abstract17

構造を渡り歩くDP

● Visitor● 構造を渡り歩きながら,同じ処理を繰り返す

● Chain of Responsibility● 構造を渡り歩き,そのどこかで処理(たらい回し)

Page 18: Abstract

2nt October 2011 Design Pattern : Abstract18

シンプル化DP

● Facade(ファサード)● 窓口役のクラスをつくり,

そいつを通してシステム全体の操作

● Mediator● 複数クラスが互いにやりとりを行うのではなく,相談役(仲介役)を設けてそいつとだけやり取り

Page 19: Abstract

2nt October 2011 Design Pattern : Abstract19

状態管理DP

● Observer● 状態が変化するクラスと,

その変化を受け取るクラスに分割

● Memento● 現在の状態を保存し,必要に応じて復帰

● State● 状態をクラスで表現

状態に応じたswitch文を減らす

Page 20: Abstract

2nt October 2011 Design Pattern : Abstract20

効率化DP

● Flyweight● 複数箇所で同じもの(処理)が現れるとき,

それらを共有する

● Proxy● 必要なものが必要になるまで作成せず,

それまでは代理のものを利用する

Page 21: Abstract

2nt October 2011 Design Pattern : Abstract21

意外なものをクラス化DP

● Command● 要求・命令をクラスで表現

● Interpreter● 文法規則をクラスで表現

Page 22: Abstract

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

Page 23: Abstract

2nt October 2011 Design Pattern : Abstract23