• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Why-is-ImplementationPattterns-important-so-much
 

Why-is-ImplementationPattterns-important-so-much

on

  • 3,982 views

Ruby Sapporo Night Vol.5

Ruby Sapporo Night Vol.5

Statistics

Views

Total Views
3,982
Views on SlideShare
3,760
Embed Views
222

Actions

Likes
0
Downloads
26
Comments
0

5 Embeds 222

http://implementationpatterns.g.hatena.ne.jp 135
http://ruby-sapporo.org 46
http://blog.stco.info 39
http://webcache.googleusercontent.com 1
http://paper.li 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Why-is-ImplementationPattterns-important-so-much Why-is-ImplementationPattterns-important-so-much Presentation Transcript

    • 2008-03-19(水); Apple Store Sapporo Ruby Sapporo Night vol.5何故そんなにもImplementationPatternsは重要なのか Pattern is a key connects Ruby and Agile 日本Rubyの会 / Ruby札幌 島田浩二 snoozer.05@ruby-sapporo.org
    • Our initial success using a pattern language for user interface design has left us quit enthusiastic aboutpossibilities for computer users designing and programming their own applications. パターン言語の使用が最初に成功したとき、 コンピューター・ユーザーたちが 自分自身のアプリケーションを自ら設計し、プログラミングするという可能性があるのだということに、 我々は大変熱狂した - Kent Beck, Ward Cunningham「オブジェクト指向プログラムのためのパターン言語の使用」
    • しまだこうじhttp://iddy.jp/profile/snoozer05✓ ふつうのフリーランスプログラマ✓ 日本Rubyの会 ✓ Ruby札幌 運営 ✓ RubyKaigi 2007 当日スタッフ ✓ るびま、るりま✓ プログラミングの楽しさを共有したい✓ 自分の知らないコトやヒトに出会いたい
    • しまだこうじhttp://iddy.jp/profile/snoozer05✓ Implementation Patterns Group ✓ Implementation PatternsとSBPPを味わ うためのグループです http://implementationpatterns.g.hatena.ne.jp/
    • Implementation Patterns
    • Implementation Patterns Kent Beck待望の新刊
    • Kent Beckhttp://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カード ✓ XPhttp://www.flickr.com/photos/improveit/1574912686/
    • Kent Beck ✓ パターン ✓ CRCカード ✓ XP ✓ TDDhttp://www.flickr.com/photos/improveit/1574912686/
    • Kent Beck ✓ パターン ✓ CRCカード ✓ XP ✓ TDD ✓ JUnithttp://www.flickr.com/photos/improveit/1574912686/
    • キーマン(鍵的じゃない意味で)
    • Implementation Patterns Kent Beck待望の新刊
    • パターン?What is Pattern?
    • オブジェクト指向における再利用のためのデザインパターン
    • オブジェクト指向における再利用のためのデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
    • オブジェクト指向における再利用のためのデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
    • パターン?What is Pattern?
    • http://noplans.org/product/t-shirt/
    • パターンの起源 Origin of Pattern
    • オブジェクト指向プログラムのためのパターン言語の使用 Using Pattern Languages for Object-Oriented ProgramBy 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 BuildingBy 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 ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
    • オブジェクト指向における再利用のための パターン言語のカテゴリの一つデザインパターン✓ Abstract Factory ✓ Decorator✓ Adapter ✓ Facade✓ Bridge ✓ Factory Method✓ カテゴリを構成するパターン Builder ✓ Flyweight✓ Chain of Responsibility ✓ Interpreter✓ Command ✓ Iterator✓ Composite ✓ Mediator✓ Observer ✓ Memento✓ Prototype ✓ Proxy✓ Strategy ✓ Singleton✓ Templete Method ✓ State✓ Visitor
    • オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
    • オブジェクト指向プログラミングのパターン言語の適応について概説する。(中略)これは、オブジェクト指向プログラムの完全なパターン言語を記録する我々の現在の活動から得られたものだ。
    • オブジェクト指向プログラムの 完全なパターン言語 A Pattern Language for OOP
    • オブジェクト指向プログラムの GoF本の現在の立ち位置とは 完全なパターン言語 ちょっと違う A Pattern Language For OOP
    • オブジェクト指向プログラムの どこへいってしまったんだろう? 完全なパターン言語 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とパターン Ralph Johnsonの見解http://capsctrl.que.jp/kdmsnr/wiki/transl/?UsingPatternLanguagesForOOP
    • 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 To Pattern 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 BuildingBy Christopher Alexander
    • 確認Point
    • 発想の原点Origin Of Idea
    • コードに込められたプログラマの意図をどうやって それを利用する人に 伝えることが出来るか
    • Implementation Patterns 何故書かれたのか?
    • Implementation Patterns 何故重要なのか?
    • This is a book about programming - specifically, about programmingso 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です
    • パターン言語とRuby Ruby 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 endend
    • class Car extend Forwardable def_deligators :@engine, :start, :stop def initialize @engine = Engine.new endend
    • メタプログラミングの利用
    • メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ
    • メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける
    • メタプログラミングの利用✓ 問題に対して言語を最適化するアプローチ✓ 利用者が表現したいことをそのまま書ける✓ Rubyはメタプログラミングをしやすい
    • DSL等で言語を 利用者の思考に近づけていく試み
    • パターン言語で 技術を人の側に近づけていく試み
    • 本質的には同じ
    • というよりもDSLはパターン言語の 可能性の一つ
    • RubyはDSLの良い プラットフォーム
    • Rubyが海外のアジャイルな人たちの間で盛り上がった理由
    • Rubyとアジャイルな開発が 相性が良い理由
    • 結論
    • それともう一つ... One more thing...
    • 最後に
    • アジャイル系の勉強会しませんか?How about workshop about agile together?
    • アジャイル系の勉強会しませんか?How about workshop about agile together?
    • 一緒にやれると 嬉しいです
    • 2008-03-19(水); Apple Store Sapporo Ruby Sapporo Night vol.5何故そんなにもImplementationPatternsは重要なのか Pattern is a key connects Ruby and Agile 日本Rubyの会 / Ruby札幌 島田浩二 snoozer.05@ruby-sapporo.org
    • ご清聴 ありがとうございました
    • 何かご質問は?