SlideShare une entreprise Scribd logo
1  sur  80
Télécharger pour lire hors ligne
デザインパターンとともに学ぶ
オブジェクト指向のこころ
Design Patterns Explained:
A New Perspective on Object-Oriented Design
出会い
プロローグ
• 室工大のプログラミングクラブに入部
プロローグ
• 室工大のプログラミングクラブに入部
• サークルのC講座
--> ポインタと配列の試練を乗り越えた
プロローグ
• 室工大のプログラミングクラブに入部
• サークルのC講座
--> ポインタと配列の試練を乗り越えた
• サークルのDXライブラリ講座
--> 簡単なGUIのゲームを作れるようになった
プロローグ
• サークルの仲間がC++を勉強
プロローグ
• サークルの仲間がC++を勉強
• 負けてられないので私もC++を勉強
C++
• 新たな概念
• class
• オブジェクト指向
class
• class = struct + メンバ関数 + 継承 + アクセス制限
class
• class = struct + メンバ関数 + 継承 + アクセス制限
• でも書き方はCのstructとほぼ同じ
class
• class = struct + メンバ関数 + 継承 + アクセス制限
• でも書き方はCのstructとほぼ同じ
--> 文法として難しいことは無い
構造化-->オブジェクト指向
• パラダイムシフトによるプログラミングの変化を期待
構造化-->オブジェクト指向
• パラダイムシフトによるプログラミングの変化を期待
--> きっととんでもない変化があるはず
C++を使い始めた
• しかしあまり変化しませんでした
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
--> ちょっと書き易くなったかな?
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
--> ちょっと書き易くなったかな?
--> パラダイムシフトってその程度?
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
--> ちょっと書き易くなったかな?
--> パラダイムシフトってその程度?
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
--> ちょっと書き易くなったかな?
--> パラダイムシフトってその程度?
C++を使い始めた
• しかしあまり変化しませんでした
• 私のソースコード
• フローチャートの翻訳はCと変わらず
• 構造体と関数 --> クラスとメソッド
• 継承による記述の減少
--> ちょっと書き易くなったかな?
--> パラダイムシフトってその程度?
インターネットで調べました
• カプセル化,継承,ポリーモーフィズム
--> それは分かった
インターネットで調べました
• カプセル化,継承,ポリーモーフィズム
--> それは分かった
• でも
--> それらの何が良いのか
インターネットで調べました
• カプセル化,継承,ポリーモーフィズム
--> それは分かった
• でも
--> それらの何が良いのか
--> どんな問題が解決されるのか
インターネットで調べました
• カプセル化,継承,ポリーモーフィズム
--> それは分かった
• でも
--> それらの何が良いのか
--> どんな問題が解決されるのか
--> つまりオブジェクト指向の意義
インターネットで調べました
• カプセル化,継承,ポリーモーフィズム
--> それは分かった
• でも
--> それらの何が良いのか
--> どんな問題が解決されるのか
--> つまりオブジェクト指向の意義
それは分からなかった
オブジェクト指向
私はオブジェクト指向のゴールを知りたい
大学の図書館
• オブジェクト指向の本を探しました
大学の図書館
• オブジェクト指向の本を探しました
• でも良い本が見つからない
大学の図書館
• オブジェクト指向の本を探しました
• でも良い本が見つからない
諦めかけたその時,
大学の図書館
• オブジェクト指向の本を探しました
• でも良い本が見つからない
諦めかけたその時,
それが私の視界をよぎった
私にとって運命の出会いでした
こころ
読みました
• 難しい言い回し,聞き慣れない単語
読みました
• 難しい言い回し,聞き慣れない単語
--> それらは私の理解を阻んだ
読みました
• 難しい言い回し,聞き慣れない単語
--> それらは私の理解を阻んだ
--> 少しずつ読み返しつつ
読みました
• 難しい言い回し,聞き慣れない単語
--> それらは私の理解を阻んだ
--> 少しずつ読み返しつつ
--> 最後まで読み通しました
見えてきた
• 確かにすぐ読めてすぐ分かるわけではなかった
しかし,
見えてきた
• 繰り返されるキーワード
見えてきた
• 繰り返されるキーワード
• 具体例
見えてきた
• 繰り返されるキーワード
• 具体例
• 要点のまとまったサンプルソース
見えてきた
• 繰り返されるキーワード
• 具体例
• 要点のまとまったサンプルソース
--> それらは私の理解を助けた
見えてきた
• 繰り返されるキーワード
• 具体例
• 要点のまとまったサンプルソース
--> それらは私の理解を助けた
--> だんだん意味が分かってきた
見えてきた
• 繰り返されるキーワード
• 具体例
• 要点のまとまったサンプルソース
--> それらは私の理解を助けた
--> だんだん意味が分かってきた
--> クラスの意味
見えてきた
• 繰り返されるキーワード
• 具体例
• 要点のまとまったサンプルソース
--> それらは私の理解を助けた
--> だんだん意味が分かってきた
--> クラスの意味
--> オブジェクト指向の方針
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
• 方針 : 設計 --> 最小の書き換え, 柔軟な対応
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
• 方針 : 設計 --> 最小の書き換え, 柔軟な対応
• 方法 :
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
• 方針 : 設計 --> 最小の書き換え, 柔軟な対応
• 方法 :
• クラスは1つの責任(機能)を果たす
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
• 方針 : 設計 --> 最小の書き換え, 柔軟な対応
• 方法 :
• クラスは1つの責任(機能)を果たす
• インターフェイスで仕様を定義する
こころ
• 問題 : 機能追加や仕様変更などは難しいが避けられない
• 方針 : 設計 --> 最小の書き換え, 柔軟な対応
• 方法 :
• クラスは1つの責任(機能)を果たす
• インターフェイスで仕様を定義する
• 可変部分の実装を抽象化
オブジェクト指向のこころが分かった
心得た
これから
Next stage
• 私はこころを手に入れた
Next stage
• 私はこころを手に入れた
• オブジェクト指向の考え方が分かった
Next stage
• 私はこころを手に入れた
• オブジェクト指向の考え方が分かった
--> 次は実践
Next stage
• 私はこころを手に入れた
• オブジェクト指向の考え方が分かった
--> 次は実践
--> オブジェクト指向をソースコードで実現
Next stage
• 私はこころを手に入れた
• オブジェクト指向の考え方が分かった
--> 次は実践
--> オブジェクト指向をソースコードで実現
--> プログラミングスキル
デザインパターン
• よく直面する問題の解決方法
デザインパターン
• よく直面する問題の解決方法
• 設計ノウハウに名前を付けてまとめた
デザインパターン
• よく直面する問題の解決方法
• 設計ノウハウに名前を付けてまとめた
• オブジェクト指向のこころから導出される
デザインパターン
• よく直面する問題の解決方法
• 設計ノウハウに名前を付けてまとめた
• オブジェクト指向のこころから導出される
--> これを使いこなせるようになれば
デザインパターン
• よく直面する問題の解決方法
• 設計ノウハウに名前を付けてまとめた
• オブジェクト指向のこころから導出される
--> これを使いこなせるようになれば
--> オブジェクト指向のスキルの習得
勉強だけではいけない
• タイピング
--> 指の筋力
勉強だけではいけない
• タイピング
--> 指の筋力
• 考え続ける
--> 体力
勉強だけではいけない
• タイピング
--> 指の筋力
• 考え続ける
--> 体力
• 病気にならない
--> 免疫力
勉強だけではいけない
• タイピング
--> 指の筋力
• 考え続ける
--> 体力
• 病気にならない
--> 免疫力
体も鍛える
エピローグ
まとめ
• こころ :
-->
まとめ
• こころ :
-->
• わざ :
--> デザインパターン
まとめ
• こころ :
-->
• わざ :
--> デザインパターン
• からだ :
--> トレーニング
オ
ブ
ジ
ェ
ク
ト
指
向
の
オ
ブ
ジ
ェ
ク
ト
指
向
の
Heart
オ
ブ
ジ
ェ
ク
ト
指
向
の
Heart
Skill
オ
ブ
ジ
ェ
ク
ト
指
向
の
Heart
Skill
Physical

Contenu connexe

En vedette

20120602 JavaOO道場 オブジェクト指向概論
20120602 JavaOO道場 オブジェクト指向概論20120602 JavaOO道場 オブジェクト指向概論
20120602 JavaOO道場 オブジェクト指向概論
skowata
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
増田 亨
 

En vedette (8)

20120602 JavaOO道場 オブジェクト指向概論
20120602 JavaOO道場 オブジェクト指向概論20120602 JavaOO道場 オブジェクト指向概論
20120602 JavaOO道場 オブジェクト指向概論
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
 
デザパタ勉強会(基礎編)
デザパタ勉強会(基礎編)デザパタ勉強会(基礎編)
デザパタ勉強会(基礎編)
 
本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる本当のオブジェクト指向は可読性を上げる
本当のオブジェクト指向は可読性を上げる
 
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
TDD Boot Camp Tokyo for c++ 2014-01 デモ用資料
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
 

Similaire à デザインパターンとともに学ぶオブジェクト指向のこころ

Similaire à デザインパターンとともに学ぶオブジェクト指向のこころ (13)

TDDを研ぎ究める
TDDを研ぎ究めるTDDを研ぎ究める
TDDを研ぎ究める
 
CVPR2017 参加報告 速報版 本会議 2日目
CVPR2017 参加報告 速報版 本会議 2日目CVPR2017 参加報告 速報版 本会議 2日目
CVPR2017 参加報告 速報版 本会議 2日目
 
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
オトナのプログラミング勉強会 オトナのDeep Learning 2016-11
 
SQiP研究会2014 ミニ講座「論文の書き方入門」 2014年11月7日
SQiP研究会2014 ミニ講座「論文の書き方入門」 2014年11月7日SQiP研究会2014 ミニ講座「論文の書き方入門」 2014年11月7日
SQiP研究会2014 ミニ講座「論文の書き方入門」 2014年11月7日
 
120502助産学会・講演1.8
120502助産学会・講演1.8120502助産学会・講演1.8
120502助産学会・講演1.8
 
CVPR2018 参加報告(速報版)2日目
CVPR2018 参加報告(速報版)2日目CVPR2018 参加報告(速報版)2日目
CVPR2018 参加報告(速報版)2日目
 
すくすくスクラム 第41回 スクラム概要の絵を描きながら探求していこう!その2
すくすくスクラム 第41回 スクラム概要の絵を描きながら探求していこう!その2 すくすくスクラム 第41回 スクラム概要の絵を描きながら探求していこう!その2
すくすくスクラム 第41回 スクラム概要の絵を描きながら探求していこう!その2
 
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」 [旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[旧版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
 
コーディングが上達するコツ
コーディングが上達するコツコーディングが上達するコツ
コーディングが上達するコツ
 
プログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニックプログラミングコンテスト基礎テクニック
プログラミングコンテスト基礎テクニック
 
Hierarchical and Interpretable Skill Acquisition in Multi-task Reinforcement ...
Hierarchical and Interpretable Skill Acquisition in Multi-task Reinforcement ...Hierarchical and Interpretable Skill Acquisition in Multi-task Reinforcement ...
Hierarchical and Interpretable Skill Acquisition in Multi-task Reinforcement ...
 
WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?WordPress中級者への道!テンプレートタグはどう動くのか!?
WordPress中級者への道!テンプレートタグはどう動くのか!?
 
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」 [最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
[最新版] JSAI2018 チュートリアル「"深層学習時代の" ゼロから始める自然言語処理」
 

デザインパターンとともに学ぶオブジェクト指向のこころ