19
An Agile Primer Practical Object-Oriented Design in Ruby Yoko TAMADA @tmd45 2016-12-16 feedforce Inc. 日本語版

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

Embed Size (px)

Citation preview

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

An Agile Primer

Practical Object-Oriented Design in Ruby

Yoko TAMADA @tmd452016-12-16 feedforce Inc.

日本語版

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

Practical Object-Oriented Design in Ruby

http://www.poodr.com/

An Agile Primer

a.k.a. "POODR"

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

オブジェクト指向設計実践ガイドRubyでわかる進化しつづける柔軟なアプリケーションの育て方

http://gihyo.jp/book/2016/978-4-7741-8361-9

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

結論: 日本語版でいいので読みましょう!!!

Must read it!

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

Resume

❖ What "POODR" help you?

❖ What's practical design?

❖ What I learned from this book.

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

What "POODR" help you?

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

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

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

POODR will help you from www.poodr.com

❖ 1つのクラスに属するものを決める

❖ 分けられているべきオブジェクトがもつれないようにする

❖ オブジェクト間の柔軟な「インターフェース」を定義する

❖ 「ダックタイピング」でコーディングのオーバーヘッドコストを削減

❖ 「継承」を正しく適用する

❖ 「コンポジション」を使ってオブジェクトを生成する

❖ 費用対効果の高いテストの設計

❖ シンプルで、わかりやすく、理解できるコードを作成する

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

❖ 変化は常に訪れるもの

❖ 変化は避けられないもの

❖ 変化で起こる「何か」は分からない

変更が容易なコードなら書くのが楽しい!☺

What for? なんのために必要なの?

- 第1章 オブジェクト指向設計

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

What's practical design?

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

What's practical design? 実用的な設計とは

❖ 未来を考慮するとは、特定の未来を想定して実装しておくことではない

❖ 未来を選択してしまうのではなく、動くための余地を残す

❖ 未来を受け入れるための選択肢を保護する

推測し、選択してしまうのではなく、

予測できない変化を受け入れるための選択肢を守る

- 第1章 オブジェクト指向設計

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

What's practical design? 実用的な設計とは

設計の目的は「あとにでも」設計をできるようにすること

その第一の目標は、変更コストの削減。

- 第1章 オブジェクト指向設計

Agile!

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

❖ アプリケーションを「部品」で構成する

❖ 部品は相互に作用し合い、全体の振る舞いが生まれる

❖ 部品とは「オブジェクト」

❖ 相互作用はオブジェクト間で受け渡される「メッセージ」

❖ メッセージの送り手は、受け手のことを知っている必要がある

➢ 知っている=2つのオブジェクトの「依存関係」となる

➢ 依存関係は変更を邪魔する

オブジェクト指向設計とは「依存関係を管理すること」

Object-Oriented design? オブジェクト指向設計とは

- 第1章 オブジェクト指向設計

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

What I learned from this book.

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

❖ アジャイル開発のよくわからなかった部分がわかった

➢ 顧客と共同作業をし、ソフトウェアは一度に小さな単位でつくり、そのときそれぞれの単位が次のア

イディアを得る機会となることを目指す

➢ 真実1:前もってつくる全体の詳細設計( Big Design Up Front)にはまったく何の意味もない

➢ 真実2:アプリケーションの完成時期は誰にも予測できない

➢ この事実により "顧客とプログラマは必然的に敵対する " が、アジャイルを有効にするにはソフト

ウェアがかたちになる「前」に確かさを手に入れることはできないと認めること

全体の詳細設計(BDUF)ではなく

変化を受け入れるための「設計」はむしろ必要とされるものである

With Agile development アジャイル開発

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

❖ 親子関係だけでは理解できなかった「実践的な」オブジェクト指向設計

➢ とくに実際の改善例が Ruby で書かれていて、Ruby ならこうすると上手くいくというのが分かりやす

い。そこから Ruby に限らずにオブジェクト指向設計を学べる

❖ オブジェクトの「インターフェース」を考えることに集中したら「公開しない部分」の実

装に迷いが減った

❖ クラスに含まれている何かを別のオブジェクトとして捉らえて切り分ける考え方が以

前よりスムーズにできるようになった

❖ とにかく大切なのは「変更を受け入れられるように」作ること

➢ 疎結合とか単一責任とかはすべてそのために存在するということ

With Object-Oriented Design オブジェクト指向設計

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

❖ 最初から順に読んでいくとスッと入ってくる良書!

➢ 導入・文化(アジャイル開発との関連)・概要

■ 第1章 オブジェクト指向設計

➢ パターンと実装

■ 第2章 単一責任のクラスを設計する

■ 第3章 依存関係を管理する

■ 第4章 柔軟なインターフェースをつくる

■ 第5章 ダックタイピングでコストを削減する

■ 第6章 継承によって振る舞いを獲得する

■ 第7章 モジュールでロールの振る舞いを共有する

■ 第8章 コンポジションでオブジェクトを組み合わせる

■ 第9章 費用対効果の高いテストを設計する

How to read 本書の読み方

関係の選択(p.233)

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

オブジェクト指向設計実践ガイドRubyでわかる進化しつづける柔軟なアプリケーションの育て方

http://gihyo.jp/book/2016/978-4-7741-8361-9

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

❖ 1つのクラスに属するものを決める

❖ 分けられているべきオブジェクトがもつれないようにする

❖ オブジェクト間の柔軟な「インターフェース」を定義する

❖ 「ダックタイピング」でコーディングのオーバーヘッドコストを削減

❖ 「継承」を正しく適用する

❖ 「コンポジション」を使ってオブジェクトを生成する

❖ 費用対効果の高いテストの設計

❖ シンプルで、わかりやすく、理解できるコードを作成する終──────ⓣⓜⓓ

POODR will help you from www.poodr.com