19
OOP & Design Patterns Iii_SGMI #5 “Pattern Language” Ryohei SUZUKI

iii_SGMI #5 "OOP & Design Patterns"

Embed Size (px)

Citation preview

Page 1: iii_SGMI #5 "OOP & Design Patterns"

OOP & Design Patterns

Iii_SGMI #5 “Pattern Language”Ryohei SUZUKI

Page 2: iii_SGMI #5 "OOP & Design Patterns"

オブジェクト指向プログラミングとは?

OOP – Object Oriented Programming

Page 3: iii_SGMI #5 "OOP & Design Patterns"

プログラムとは?

• 計算機が解釈、実行することの出来るデータ

• 計算機のモデル– ラムダ計算 , 帰納的関数 , チューリングマシン , etc…

• 一般的には– 実行ファイルはバイナリデータ(機械語)

– ソースコードはテキストデータ

• プログラムは形式的な記述

Page 4: iii_SGMI #5 "OOP & Design Patterns"

プログラミングとは?

• プログラム– 機械語に翻訳される記号列

– プログラミング言語:単一の記号体系

• プログラミングとは、プログラムを書くこと– トートロジーのようではあるが…

– 形式的な記号列であれば形態は問われない• (記号列は文字列である必要もない)

– コーディングは必要条件ではない

Page 5: iii_SGMI #5 "OOP & Design Patterns"

プログラミング言語のパラダイム

• プログラミング言語は多数存在する– C/C++, Java, Ruby, Haskell, PHP, Lisp, asm, Ocaml, …

– 数学的にはおよその言語は等価(チューリング完全)

• 言語同士の差とは?– 採用するパラダイム

– 記法

– 動作する環境

– 標準的な用途

Page 6: iii_SGMI #5 "OOP & Design Patterns"

プログラミング言語のパラダイム

• パラダイムって?– 言語の備える性質 , 必ずしも背反ではない

– 基本的には、何らかの「抽象化」に対応する

– 手続き型プログラミング

– 関数型プログラミング

– 論理型プログラミング

– オブジェクト指向プログラミング

– etc.

Page 7: iii_SGMI #5 "OOP & Design Patterns"

プログラミング言語のパラダイム

• 手続き型プログラミング– C, C++ など普及した言語はほとんどが採用

– 逐次的に機械が行う処理を記述する

• 関数型プログラミング– Haskell, OCaml などが採用

– 数学的な記法によるプログラミング

– 圏論など抽象数学との直接的対応がある

Page 8: iii_SGMI #5 "OOP & Design Patterns"

オブジェクト指向プログラミング

• プログラムを構造的に抽象化するアプローチ– cf. 関数型言語:数学的抽象化

– 計算機上の実体(メモリ上のデータ)を概念構造として解釈

– 概念間の関係性、やり取りの記述によるプログラミング

– 日常的な概念操作をプログラミングに持ち込む

– クラスベースとプロトタイプベースに分けられる• 今回はクラスベースを扱う

Page 9: iii_SGMI #5 "OOP & Design Patterns"

具体例

Page 10: iii_SGMI #5 "OOP & Design Patterns"

OOP の利点

• 構造化・モジュール化が進む– メンテナンス性の向上

– 再利用性の向上

• 構造の理解が容易になる– UML などのインターフェイスの存在

• 設計が容易になり、生産性が向上する– ノウハウの蓄積が推進

Page 11: iii_SGMI #5 "OOP & Design Patterns"

デザインパターンDesign Patterns: Elements of Reusable Object-Oriented Software

Page 12: iii_SGMI #5 "OOP & Design Patterns"

デザインパターン

• 「オブジェクト指向における再利用のためのデザインパターン」

• OOP のプラクティスをまとめたもの– OOP 設計=プログラム上の概念の構造化

– プログラムに内在するオントロジーの公約数集合

• 絶対のものではない– 亜種、派生も多数存在する

– 技術的要請によって新たなパターンが生じる

Page 13: iii_SGMI #5 "OOP & Design Patterns"

デザインパターンの実際

• 業務プログラミングでの生産性向上のための活用

• 言語設計において強く意識される– 糖衣構文の容易など

– ex) Iterator パターン → foreach 構文の導入

• プログラムの共通言語としての存在– ライブラリ設計など

– 分野に関わらずデザインパターンが意識されている

Page 14: iii_SGMI #5 "OOP & Design Patterns"

パタン・ランゲージとの関係性

• 非 OOP コード , 図面– 還元論的には全部入っている

– 専門的な知識があればイメージを起こせる

– イメージとは?

• プロジェクトの目的– 住みたい家 , 満たすべき条件 = プログラムの仕様書

– これだけではプログラムを作れない

Page 15: iii_SGMI #5 "OOP & Design Patterns"

パタン・ランゲージとの関係性

• パタン・ランゲージ– 要求と図面の媒介

– 建築物のセマンティックな分節、形式化

• デザインパターン– 目的動作とプログラムの媒介

– プログラム上の概念のセマンティックな分節、形式化

• 柔軟性+目的と向かい合った設計を実現する

Page 16: iii_SGMI #5 "OOP & Design Patterns"

デザインパターンを知ろうLet’s learn the Design Patterns!

Page 17: iii_SGMI #5 "OOP & Design Patterns"

生成に関するパターン

• Abstract Factory

• Builder

• Factory Method

• Prototype

• Singleton

Page 18: iii_SGMI #5 "OOP & Design Patterns"

構造に関するパターン

• Adapter

• Bridge

• Composite

• Decorator

• Facade

• Flyweight

• Proxy

Page 19: iii_SGMI #5 "OOP & Design Patterns"

振る舞いに関するパターン

• Chain of Responsibility

• Command

• Interpreter

• Iterator

• Mediator

• Memento

• Observer

• State

• Strategy

• Template Method

• Visitor