Upload
ryohei-suzuki
View
400
Download
2
Embed Size (px)
Citation preview
OOP & Design Patterns
Iii_SGMI #5 “Pattern Language”Ryohei SUZUKI
オブジェクト指向プログラミングとは?
OOP – Object Oriented Programming
プログラムとは?
• 計算機が解釈、実行することの出来るデータ
• 計算機のモデル– ラムダ計算 , 帰納的関数 , チューリングマシン , etc…
• 一般的には– 実行ファイルはバイナリデータ(機械語)
– ソースコードはテキストデータ
• プログラムは形式的な記述
プログラミングとは?
• プログラム– 機械語に翻訳される記号列
– プログラミング言語:単一の記号体系
• プログラミングとは、プログラムを書くこと– トートロジーのようではあるが…
– 形式的な記号列であれば形態は問われない• (記号列は文字列である必要もない)
– コーディングは必要条件ではない
プログラミング言語のパラダイム
• プログラミング言語は多数存在する– C/C++, Java, Ruby, Haskell, PHP, Lisp, asm, Ocaml, …
– 数学的にはおよその言語は等価(チューリング完全)
• 言語同士の差とは?– 採用するパラダイム
– 記法
– 動作する環境
– 標準的な用途
プログラミング言語のパラダイム
• パラダイムって?– 言語の備える性質 , 必ずしも背反ではない
– 基本的には、何らかの「抽象化」に対応する
– 手続き型プログラミング
– 関数型プログラミング
– 論理型プログラミング
– オブジェクト指向プログラミング
– etc.
プログラミング言語のパラダイム
• 手続き型プログラミング– C, C++ など普及した言語はほとんどが採用
– 逐次的に機械が行う処理を記述する
• 関数型プログラミング– Haskell, OCaml などが採用
– 数学的な記法によるプログラミング
– 圏論など抽象数学との直接的対応がある
オブジェクト指向プログラミング
• プログラムを構造的に抽象化するアプローチ– cf. 関数型言語:数学的抽象化
– 計算機上の実体(メモリ上のデータ)を概念構造として解釈
– 概念間の関係性、やり取りの記述によるプログラミング
– 日常的な概念操作をプログラミングに持ち込む
– クラスベースとプロトタイプベースに分けられる• 今回はクラスベースを扱う
具体例
OOP の利点
• 構造化・モジュール化が進む– メンテナンス性の向上
– 再利用性の向上
• 構造の理解が容易になる– UML などのインターフェイスの存在
• 設計が容易になり、生産性が向上する– ノウハウの蓄積が推進
デザインパターンDesign Patterns: Elements of Reusable Object-Oriented Software
デザインパターン
• 「オブジェクト指向における再利用のためのデザインパターン」
• OOP のプラクティスをまとめたもの– OOP 設計=プログラム上の概念の構造化
– プログラムに内在するオントロジーの公約数集合
• 絶対のものではない– 亜種、派生も多数存在する
– 技術的要請によって新たなパターンが生じる
デザインパターンの実際
• 業務プログラミングでの生産性向上のための活用
• 言語設計において強く意識される– 糖衣構文の容易など
– ex) Iterator パターン → foreach 構文の導入
• プログラムの共通言語としての存在– ライブラリ設計など
– 分野に関わらずデザインパターンが意識されている
パタン・ランゲージとの関係性
• 非 OOP コード , 図面– 還元論的には全部入っている
– 専門的な知識があればイメージを起こせる
– イメージとは?
• プロジェクトの目的– 住みたい家 , 満たすべき条件 = プログラムの仕様書
– これだけではプログラムを作れない
パタン・ランゲージとの関係性
• パタン・ランゲージ– 要求と図面の媒介
– 建築物のセマンティックな分節、形式化
• デザインパターン– 目的動作とプログラムの媒介
– プログラム上の概念のセマンティックな分節、形式化
• 柔軟性+目的と向かい合った設計を実現する
デザインパターンを知ろうLet’s learn the Design Patterns!
生成に関するパターン
• Abstract Factory
• Builder
• Factory Method
• Prototype
• Singleton
構造に関するパターン
• Adapter
• Bridge
• Composite
• Decorator
• Facade
• Flyweight
• Proxy
振る舞いに関するパターン
• Chain of Responsibility
• Command
• Interpreter
• Iterator
• Mediator
• Memento
• Observer
• State
• Strategy
• Template Method
• Visitor