why-is-implementationpattterns-important-so-much

Post on 12-Nov-2014

4.098 Views

Category:

Business

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

Ruby Sapporo Night Vol.5

TRANSCRIPT

何故そんなにも

日本Rubyの会 / Ruby札幌島田浩二

snoozer.05@ruby-sapporo.org

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✓ パターン✓ 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?

パターンの起源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

特別なシステムを使うとなるとその分の負荷が

プログラマにかかってしまう

構造が直線的であるため複雑で多層な構造の情報を

表現するのが難しい

時を超えた建築の道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札幌島田浩二

snoozer.05@ruby-sapporo.org

2008-03-19(水); Apple Store SapporoRuby Sapporo Night vol.5

ImplementationPatterns

は重要なのかPattern is a key connects Ruby and Agile

ご清聴ありがとうございました

何かご質問は?

top related