SlideShare uma empresa Scribd logo
1 de 19
Baixar para ler offline
An Agile Primer
Practical Object-Oriented
Design in Ruby
Yoko TAMADA @tmd45
2016-12-16 feedforce Inc.
日本語版
Practical
Object-Oriented
Design in Ruby
http://www.poodr.com/
An Agile Primer
a.k.a. "POODR"
オブジェクト指向設計
実践ガイド
Rubyでわかる
進化しつづける柔軟なアプリケーションの育て方
http://gihyo.jp/book/2016/978-4-7741-8361-9
結論:
日本語版でいいので
読みましょう!!!
Must read it!
Resume
❖ What "POODR" help you?
❖ What's practical design?
❖ What I learned from this book.
What "POODR" help you?
POODR will help you from www.poodr.com
❖ Decide what belongs in a single class
❖ Avoid entangling objects that should be kept separate
❖ Define flexible interfaces among objects
❖ Reduce programming overhead costs with duck typing
❖ Successfully apply inheritance
❖ Build objects via composition
❖ Design cost-effective tests
❖ Craft simple, straightforward, understandable code
POODR will help you from www.poodr.com
❖ 1つのクラスに属するものを決める
❖ 分けられているべきオブジェクトがもつれないようにする
❖ オブジェクト間の柔軟な「インターフェース」を定義する
❖ 「ダックタイピング」でコーディングのオーバーヘッドコストを削減
❖ 「継承」を正しく適用する
❖ 「コンポジション」を使ってオブジェクトを生成する
❖ 費用対効果の高いテストの設計
❖ シンプルで、わかりやすく、理解できるコードを作成する
❖ 変化は常に訪れるもの
❖ 変化は避けられないもの
❖ 変化で起こる「何か」は分からない
変更が容易なコードなら書くのが楽しい!☺
What for? なんのために必要なの?
- 第1章 オブジェクト指向設計
What's practical design?
What's practical design? 実用的な設計とは
❖ 未来を考慮するとは、特定の未来を想定して実装しておくことではない
❖ 未来を選択してしまうのではなく、動くための余地を残す
❖ 未来を受け入れるための選択肢を保護する
推測し、選択してしまうのではなく、
予測できない変化を受け入れるための選択肢を守る
- 第1章 オブジェクト指向設計
What's practical design? 実用的な設計とは
設計の目的は「あとにでも」設計をできるようにすること
その第一の目標は、変更コストの削減。
- 第1章 オブジェクト指向設計
Agile!
❖ アプリケーションを「部品」で構成する
❖ 部品は相互に作用し合い、全体の振る舞いが生まれる
❖ 部品とは「オブジェクト」
❖ 相互作用はオブジェクト間で受け渡される「メッセージ」
❖ メッセージの送り手は、受け手のことを知っている必要がある
➢ 知っている=2つのオブジェクトの「依存関係」となる
➢ 依存関係は変更を邪魔する
オブジェクト指向設計とは「依存関係を管理すること」
Object-Oriented design? オブジェクト指向設計とは
- 第1章 オブジェクト指向設計
What I learned from this book.
❖ アジャイル開発のよくわからなかった部分がわかった
➢ 顧客と共同作業をし、ソフトウェアは一度に小さな単位でつくり、そのときそれぞれの単位が次のア
イディアを得る機会となることを目指す
➢ 真実1:前もってつくる全体の詳細設計( Big Design Up Front)にはまったく何の意味もない
➢ 真実2:アプリケーションの完成時期は誰にも予測できない
➢ この事実により "顧客とプログラマは必然的に敵対する " が、アジャイルを有効にするにはソフト
ウェアがかたちになる「前」に確かさを手に入れることはできないと認めること
全体の詳細設計(BDUF)ではなく
変化を受け入れるための「設計」はむしろ必要とされるものである
With Agile development アジャイル開発
❖ 親子関係だけでは理解できなかった「実践的な」オブジェクト指向設計
➢ とくに実際の改善例が Ruby で書かれていて、Ruby ならこうすると上手くいくというのが分かりやす
い。そこから Ruby に限らずにオブジェクト指向設計を学べる
❖ オブジェクトの「インターフェース」を考えることに集中したら「公開しない部分」の実
装に迷いが減った
❖ クラスに含まれている何かを別のオブジェクトとして捉らえて切り分ける考え方が以
前よりスムーズにできるようになった
❖ とにかく大切なのは「変更を受け入れられるように」作ること
➢ 疎結合とか単一責任とかはすべてそのために存在するということ
With Object-Oriented Design オブジェクト指向設計
❖ 最初から順に読んでいくとスッと入ってくる良書!
➢ 導入・文化(アジャイル開発との関連)・概要
■ 第1章 オブジェクト指向設計
➢ パターンと実装
■ 第2章 単一責任のクラスを設計する
■ 第3章 依存関係を管理する
■ 第4章 柔軟なインターフェースをつくる
■ 第5章 ダックタイピングでコストを削減する
■ 第6章 継承によって振る舞いを獲得する
■ 第7章 モジュールでロールの振る舞いを共有する
■ 第8章 コンポジションでオブジェクトを組み合わせる
■ 第9章 費用対効果の高いテストを設計する
How to read 本書の読み方
関係の選択(p.233)
オブジェクト指向設計
実践ガイド
Rubyでわかる
進化しつづける柔軟なアプリケーションの育て方
http://gihyo.jp/book/2016/978-4-7741-8361-9
❖ 1つのクラスに属するものを決める
❖ 分けられているべきオブジェクトがもつれないようにする
❖ オブジェクト間の柔軟な「インターフェース」を定義する
❖ 「ダックタイピング」でコーディングのオーバーヘッドコストを削減
❖ 「継承」を正しく適用する
❖ 「コンポジション」を使ってオブジェクトを生成する
❖ 費用対効果の高いテストの設計
❖ シンプルで、わかりやすく、理解できるコードを作成する
終──────
ⓣⓜⓓ
POODR will help you from www.poodr.com

Mais conteúdo relacionado

Destaque

メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFAtsushi Tadokoro
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向hakoika-itwg
 
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較Hinemos
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITKouji Matsui
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向yamada28go
 
Aerospike on IDCF Cloud
Aerospike on IDCF CloudAerospike on IDCF Cloud
Aerospike on IDCF CloudIDC Frontier
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinAdvanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinMasahiro Nagano
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げるWataru Terada
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたtoshi_pp
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞DMM.com
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツShunji Konishi
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
エンジニアが働きたい場所で働けるために、チームに必要なこと
エンジニアが働きたい場所で働けるために、チームに必要なことエンジニアが働きたい場所で働けるために、チームに必要なこと
エンジニアが働きたい場所で働けるために、チームに必要なことYuki Okada
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦いYuto Komai
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力Yoshitaka Kawashima
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!Yuji Nojima
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門Ryo Miyake
 
Swift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swiftSwift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swiftTomohiro Kumagai
 

Destaque (20)

メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oFメディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
メディア・アートII 第3回 openFrameworks基礎 OOoF : オブジェクト指向 oF
 
第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向第3回勉強会 オブジェクト指向
第3回勉強会 オブジェクト指向
 
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較
【HinemosWorld2015】A1-4_オープンソース統合監視ツール Hinemos/Zabbix徹底比較
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JIT
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
 
Aerospike on IDCF Cloud
Aerospike on IDCF CloudAerospike on IDCF Cloud
Aerospike on IDCF Cloud
 
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/MinAdvanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
Advanced nginx in mercari - How to handle over 1,200,000 HTTPS Reqs/Min
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くしたNginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
 
マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞マイクロサービス時代の動画配信基Ruby×go=∞
マイクロサービス時代の動画配信基Ruby×go=∞
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
エンジニアが働きたい場所で働けるために、チームに必要なこと
エンジニアが働きたい場所で働けるために、チームに必要なことエンジニアが働きたい場所で働けるために、チームに必要なこと
エンジニアが働きたい場所で働けるために、チームに必要なこと
 
大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い大規模Redisサーバ縮小化の戦い
大規模Redisサーバ縮小化の戦い
 
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
 
最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!最強オブジェクト指向言語 JavaScript 再入門!
最強オブジェクト指向言語 JavaScript 再入門!
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門オブジェクト指向プログラミング再入門
オブジェクト指向プログラミング再入門
 
Swift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swiftSwift の3大プロトコルを眺めてみる #love_swift
Swift の3大プロトコルを眺めてみる #love_swift
 
しょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedeeしょぼいプレゼンをパワポのせいにするな! by @jessedee
しょぼいプレゼンをパワポのせいにするな! by @jessedee
 

Mais de Yoko TAMADA

エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)Yoko TAMADA
 
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)Yoko TAMADA
 
My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)Yoko TAMADA
 
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)Yoko TAMADA
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Yoko TAMADA
 
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)Yoko TAMADA
 
Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編Yoko TAMADA
 

Mais de Yoko TAMADA (7)

エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
エラーメッセージと仲良くなる(2018/6/29 e-Navigator勉強会#3)
 
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
Archive: Android アプリ開発入門(2015/6/19 社内勉強会)
 
My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)My HTML Dark Past(2017/12/08 社内LT大会)
My HTML Dark Past(2017/12/08 社内LT大会)
 
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
FAPI Security について聞いてきた話(2017/08/18 社内勉強会)
 
Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)Archive: Git 入門(2014/1/10 社内勉強会)
Archive: Git 入門(2014/1/10 社内勉強会)
 
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
Middlemanで個人ページを作っている話(2014/8/23 社内勉強会LT)
 
Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編Git&GitHubで共同作業〜入門編
Git&GitHubで共同作業〜入門編
 

『オブジェクト指向設計実践ガイド』を読もう(2016/12/16 社内勉強会)