why-is-implementationpattterns-important-so-much
DESCRIPTION
Ruby Sapporo Night Vol.5TRANSCRIPT
何故そんなにも
日本Rubyの会 / Ruby札幌島田浩二
2008-03-19(水); Apple Store SapporoRuby Sapporo Night vol.5
Pattern is a key connects Ruby and Agile
ImplementationPatterns
は重要なのか
Our initial success using a pattern language for user interface design
has left us quit enthusiastic about possibilities for computer users designing and
programming their own applications.
パターン言語の使用が最初に成功したとき、コンピューター・ユーザーたちが
自分自身のアプリケーションを自ら設計し、プログラミングするという可能性があるのだということに、
我々は大変熱狂した
- Kent Beck, Ward Cunningham「オブジェクト指向プログラムのためのパターン言語の使用」
しまだこうじ
✓ ふつうのフリーランスプログラマ✓ 日本Rubyの会✓ Ruby札幌 運営✓ RubyKaigi 2007 当日スタッフ✓ るびま、るりま✓ プログラミングの楽しさを共有したい✓ 自分の知らないコトやヒトに出会いたい
http://iddy.jp/profile/snoozer05
しまだこうじ
✓ Implementation Patterns Group ✓ Implementation PatternsとSBPPを味わうためのグループです
http://iddy.jp/profile/snoozer05
http://implementationpatterns.g.hatena.ne.jp/
Implementation Patterns
Implementation Patterns
Kent Beck待望の新刊
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck✓ パターン
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck✓ パターン✓ CRCカード
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck✓ パターン✓ CRCカード✓ XP
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck✓ パターン✓ CRCカード✓ XP✓ TDD
http://www.flickr.com/photos/improveit/1574912686/
Kent Beck✓ パターン✓ CRCカード✓ XP✓ TDD✓ JUnit
キーマン(鍵的じゃない意味で)
Implementation Patterns
Kent Beck待望の新刊
パターン?What is Pattern?
オブジェクト指向における再利用のためのデザインパターン
オブジェクト指向における再利用のためのデザインパターン
✓ Abstract Factory✓ Adapter✓ Bridge✓ Builder✓ Chain of Responsibility✓ Command✓ Composite✓ Observer✓ Prototype✓ Strategy✓ Templete Method✓ Visitor
✓ Decorator✓ Facade✓ Factory Method✓ Flyweight✓ Interpreter✓ Iterator✓ Mediator✓ Memento✓ Proxy✓ Singleton✓ State
オブジェクト指向における再利用のためのデザインパターン
✓ Abstract Factory✓ Adapter✓ Bridge✓ Builder✓ Chain of Responsibility✓ Command✓ Composite✓ Observer✓ Prototype✓ Strategy✓ Templete Method✓ Visitor
✓ Decorator✓ Facade✓ Factory Method✓ Flyweight✓ Interpreter✓ Iterator✓ Mediator✓ Memento✓ Proxy✓ Singleton✓ State
パターン?What is Pattern?
http://noplans.org/product/t-shirt/
パターンの起源Origin of Pattern
オブジェクト指向プログラムのためのパターン言語の使用
Using Pattern Languagesfor Object-Oriented Program
By Kent Beck, Ward Cunningham
角征典さんによる翻訳
http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
オブジェクト指向プログラムのためのパターン言語の使用
✓ オブジェクト指向プログラミングのための適切な方法論の探索
オブジェクト指向プログラムのためのパターン言語の使用
✓ オブジェクト指向プログラミングのための適切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミングに最適していない
オブジェクト指向プログラムのためのパターン言語の使用
✓ オブジェクト指向プログラミングのための適切な方法論の探索✓ 旧来の方法論はオブジェクト指向プログラミングに最適していない
✓ 最も重要な設計事項であるユーザ・インタフェースに重きを置いた方法論もない
オブジェクト指向プログラムのためのパターン言語の使用
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
✓ プログラムも利用者によって書かれるべき
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!✓ 実際にやってみた
オブジェクト指向プログラムのためのパターン言語の使用
✓ Christopher Alexander氏は言ってるよ✓ 建物は、実際にそこにいる人たちの手によって設計され、作られるべき
✓ プログラムも利用者によって書かれるべき✓ でも、規模とか複雑性とか(ry✓ それパターン言語で出来るよ!✓ 実際にやってみた
オブジェクト指向プログラムのためのパターン言語の使用
時を超えた建築の道The Timeless Way of
Building
By Christopher Alexander
時を超えた建築の道
✓ 依頼主が望む建築を一番理解しているのは、本来依頼主自身のはず
時を超えた建築の道
✓ 依頼主が望む建築を一番理解しているのは、本来依頼主自身のはず
✓ 建築家の役割は、依頼主を設計に参加可能にすること
時を超えた建築の道
✓ 依頼主が望む建築を一番理解しているのは、本来依頼主自身のはず
✓ 建築家の役割は、依頼主を設計に参加可能にすること
✓ パターン言語を建築家と依頼主の共通言語として機能させることでこれを実現すべき
時を超えた建築の道
✓ 依頼主が望む建築を一番理解しているのは、本来依頼主自身のはず
✓ 建築家の役割は、依頼主を設計に参加可能にすること
✓ パターン言語を建築家と依頼主の共通言語として機能させることでこれを実現すべき
時を超えた建築の道
パターン言語Pattern Language
✓ 町(1-94)自立地域、農業渓谷、田舎町、田園、小高い場所、環状道路、都市の魔力...
✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...
✓ 施工(205-253)生活空間に従う構造、無駄の無い構造、ボックス柱、さわれる花...
パターン言語のカテゴリ
- http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
パターン言語
✓ パターン:ある形態を生み出すためのルール
パターン言語
✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に繋がることによって多様な意味が生まれる構造
パターン言語
✓ パターン:ある形態を生み出すためのルール✓ 言語:様々な大きさ・種類の部品が有機的に繋がることによって多様な意味が生まれる構造
✓ パターン言語:建築において繰り返し登場する形を生み出すルールを、言語的な構造として表現したもの
パターン言語
✓ 町(1-94)自立地域、農業渓谷、田舎町、田園、小高い場所、環状道路、都市の魔力...
✓ 建物(95-204)複合建物、小さな駐車場、通り抜け街路、繋がった建物、座れる階段...
✓ 施工(205-253)生活空間に従う構造、無駄の無い構造、ボックス柱、さわれる花...
パターン言語のカテゴリ
- http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
パターン言語
「町」
「建物」
「施工」
抽象
具体
(戦術タクティクス)
(戦略ストラテジー)
パターン言語
パターン パターンのカテゴリ- http://gc.sfc.keio.ac.jp/class/2005_22687/slides/10/6.html
パターン?What is Pattern?
✓ 依頼主が望む建築をどのようにすべきかを一番理解しているのは、本来依頼主自身のはず
✓ 建築家の役割は、依頼主を設計に参加可能にすること
✓ パターン言語を建築家と依頼主の共通言語として機能させることでこれを実現すべき
時を超えた建築の道
✓ 利用者が望むプログラムをどのようにすべきかを一番理解しているのは、利用者自身のはず
✓ プログラマの役割は、利用者を設計に参加可能にすること
✓ パターン言語をプログラマと利用者の共通言語として機能させることでこれを実現すべき
オブジェクト指向プログラムのためのパターン言語の使用
オブジェクト指向における再利用のためのデザインパターン
✓ Abstract Factory✓ Adapter✓ Bridge✓ Builder✓ Chain of Responsibility✓ Command✓ Composite✓ Observer✓ Prototype✓ Strategy✓ Templete Method✓ Visitor
✓ Decorator✓ Facade✓ Factory Method✓ Flyweight✓ Interpreter✓ Iterator✓ Mediator✓ Memento✓ Proxy✓ Singleton✓ State
オブジェクト指向における再利用のためのデザインパターン
✓ Abstract Factory✓ Adapter✓ Bridge✓ Builder✓ Chain of Responsibility✓ Command✓ Composite✓ Observer✓ Prototype✓ Strategy✓ Templete Method✓ Visitor
✓ Decorator✓ Facade✓ Factory Method✓ Flyweight✓ Interpreter✓ Iterator✓ Mediator✓ Memento✓ Proxy✓ Singleton✓ State
パターン言語のカテゴリの一つ
カテゴリを構成するパターン
オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
オブジェクト指向プログラムの完全なパターン言語A Pattern Language for OOP
オブジェクト指向プログラムの完全なパターン言語A Pattern Language For OOP
GoF本の現在の立ち位置とはちょっと違う
オブジェクト指向プログラムの完全なパターン言語A Pattern Language For OOP
どこへいってしまったんだろう?
パターン言語の行方Where did a pattern language go?
ヒント
ヒント✓ パターンの後にKent Beckが生み出したもの
ヒント✓ パターンの後にKent Beckが生み出したもの✓ 利用者の設計への関与を促すもの
ヒント✓ パターンの後にKent Beckが生み出したもの✓ 利用者の設計への関与を促すもの✓ まるでパターンで構成されたパターン言語のように、形を生み出すルールを一定の形式でまとめたもの
エクストリーム プログラミングeXtreme Programming
eXtreme Programming
eXtreme Programming
✓ 5 個の価値✓ 14 個の原則✓ 14 個の基礎プラクティス✓ 11 個の応用プラクティス
eXtreme Programming
「価値」
「原則」
「プラクティス」
抽象
具体
(戦術タクティクス)
(戦略ストラテジー)
エクストリームプログラミング
eXtreme Programming
「価値」
「原則」
「プラクティス」
抽象
具体
(戦術タクティクス)
(戦略ストラテジー)
エクストリームプログラミングとても良く似ている
伏線foreshadowing
パターン コミュニティHillside Group
Pattern Language of Program Design
活動の記録
開発プロセスの生成的パターン言語
A Generative Development -Process Pattern Language
By James O. Coplien
開発プロセスの生成的パターン言語
開発プロセスの生成的パターン言語
✓ スケジュールの大きさを決めよ
開発プロセスの生成的パターン言語
✓ スケジュールの大きさを決めよ✓ 組織は市場に従う
開発プロセスの生成的パターン言語
✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする
開発プロセスの生成的パターン言語
✓ スケジュールの大きさを決めよ✓ 組織は市場に従う✓ 開発者がプロセスをコントロールする✓ 顧客を引き込め...etc
開発プロセスの生成的パターン言語
開発プロセスの生成的パターン言語
PLoPがXPを生んだXP is a Pattern Language too.
XPとパターン
http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
Ralph Johnsonの見解
XPには「信頼性」や「理解容易性」に直接関連するパターンが無いにも関わらず、「プラクティス全体」が結びついて、信頼が高く理解が容易なシステムを生成してしまいます。
…パターン同様、一つ一つのプラクティスには名前があり、それ自身を学ぶことができます。パターン同様、プラクティス全体が結びつくことで、個々の単純な足し合わせよりも大きな効果が得られるのです。…
…結論としての私の意見は、XPはAlexanderスタイルの開発をソフトウェアにどうやって適応するかを示す、ソフトウェアのためのパターン言語である、というものです
パターン・ムーブメントからアジャイル・ムーブメントへ
http://blogs.itmedia.co.jp/hiranabe/2005/10/post_dc1e.html
平鍋さんによる解説
From Pattern To Agile
パターン・ムーブメントからアジャイル・ムーブメントへ
オブジェクト指向プログラムの完全なパターン言語A Pattern Language for OOP
パターンとはPattern is
パターン言語の全体像
抽象
具体
(戦術タクティクス)
(戦略ストラテジー)
パターン言語
Implementation Patterns
Kent Beck待望の新刊
Implementation Patterns
なぜ今パターンなのか?
A Short Introduction ToPattern Language
Smalltalk Report, Feb, 1993
By Kent Beck
発想の原点Origin Of Idea
コードに込められたプログラマの意図をどうやって
それを利用する人に伝えることが出来るか
一つの答えOne Answer
文芸的プログラミングLiterate Programming
プログラミングは芸術であり文学でもある
文学であるということは人のためのコードを書く
ということ
問題点Problem
特別なシステムを使うとなるとその分の負荷が
プログラマにかかってしまう
構造が直線的であるため複雑で多層な構造の情報を
表現するのが難しい
http://noplans.org/product/t-shirt/
時を超えた建築の道The Timeless Way of
Building
By Christopher Alexander
確認Point
発想の原点Origin Of Idea
コードに込められたプログラマの意図をどうやって
それを利用する人に伝えることが出来るか
Implementation Patterns
何故書かれたのか?
Implementation Patterns
何故重要なのか?
This is a book about programming - specifically, about programming
so other people can understand your code.
本書はプログラミングについての書籍だ.具体的には
他人があなたのコードを理解できるようにプログラミングするための書籍だ
- Kent Beck「Implementation Patterns」
Dave Thomas says...
ソフトウェアエンジニアリングという言葉はありません.少なくともまだないです.
これ以上ないところまで削るのがエンジニアリング.これ以上削れないところまで削るということはどこまで削るとそれが壊れてしまうかわかっているということです.まだソフトウェアに関しては
我々はそのレベルまで達していないんです.
達していないから、まだソフトウェアエンジニアリングという言葉は嘘である.
我々がしているのはコーディングです.
僕らがしているのはプログラミング
大切にしなければいけないのはプログラミングという作業
そしてコード
それらを大切にするための具体的な方法論
...a programmer’s job is too communicatewith other programmers, not just a machine.
Programming, then, is a human task done by humans for humans.
Oh, and writing good code at the same time.
プログラミングは、マシンにだけではなく、自分以外のプログラマに向けて書かれるべきなんだ。
そうすることで、プログラミングは人による、人のための、人の仕事になる。
もちろん、それは良いコードにもなっているんだよ。
- Kent Beck「Implementation Patterns」
Implementation Patterns
読んでみると良いと思う
それともう一つ...One more thing...
パターン言語の性質Element of Pattern Language
✓ 利用者が開発者でもあることを許容する✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意味を生み出せること
パターン言語の性質
✓ プログラマにオープンであり✓ そのための利用者側の負荷を低減する✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意味を生み出せること
パターン言語の性質
✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 形を生み出すためのルールをパターン化し✓ それらの有機的な結びつきにより多様な意味を生み出せること
パターン言語の性質
✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ それらの有機的な結びつきにより多様な意味を生み出せること
パターン言語の性質
✓ プログラマにオープンであり✓ 楽しく、自然に、簡単に、がコンセプトで✓ 豊富なライブラリを備えていて✓ 動的で柔軟な繋がりによって、それらが多様な意味を持ちうる
パターン言語の性質
どうみてもRubyです
パターン言語とRubyRuby As Pattern Language
きっかけ
Design Patterns In Ruby
デザインパターンをRubyで
だけでなく
Rubyならではのパターンの探索
Patterns For Ruby
Patterns For Ruby
Patterns For Ruby
✓ DSL
Patterns For Ruby
✓ DSL✓ メタプログラミング
Patterns For Ruby
✓ DSL✓ メタプログラミング✓ 設定より規約
ドメイン特化言語Domain Specific Language
特定の問題領域の解決に特化してデザインされた言語
class CreateEvents < ActiveRecord::Migration def self.up create_table :events do |t| t.string :title t.string :url t.datetime :deadline t.datetime :publish_at
t.timestamp end end
def self.down drop_table :events endend
class Manager < ActiveRecord::Base belongs_to :department has_one :office has_many :committeesend
ドメイン特化言語
✓ 問題に対して言語を最適化するアプローチ
ドメイン特化言語
✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で
ドメイン特化言語
✓ 問題に対して言語を最適化するアプローチ✓ 問題を利用する人のわかる言葉で✓ RubyはDSLの良いプラットフォーム
ドメイン特化言語
メタプログラミングMeta Programming
メタプログラミングでオブジェクトを柔軟に拡張するということ
class BankAccount attr_accessor :balance
def initialize(opning_balance) @balance = opning_balance end end
class Car extend Forwardable def_deligators :@engine, :start, :stop
def initialize @engine = Engine.new end end
メタプログラミングの利用
✓ 問題に対して言語を最適化するアプローチ
メタプログラミングの利用
✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける
メタプログラミングの利用
✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける✓ Rubyはメタプログラミングをしやすい
メタプログラミングの利用
DSL等で言語を利用者の思考に近づけていく試み
パターン言語で技術を人の側に近づけていく試み
本質的には同じ
というよりもDSLはパターン言語の
可能性の一つ
RubyはDSLの良いプラットフォーム
Rubyが海外のアジャイルな人たちの間で盛り上がった理由
Rubyとアジャイルな開発が相性が良い理由
結論
それともう一つ...One more thing...
最後に
アジャイル系の勉強会しませんか?How about workshop about agile together?
アジャイル系の勉強会しませんか?How about workshop about agile together?
一緒にやれると嬉しいです
何故そんなにも
日本Rubyの会 / Ruby札幌島田浩二
2008-03-19(水); Apple Store SapporoRuby Sapporo Night vol.5
ImplementationPatterns
は重要なのかPattern is a key connects Ruby and Agile
ご清聴ありがとうございました
何かご質問は?