SlideShare a Scribd company logo
1 of 53
Download to read offline
ハトでもわかる
オブジェクト指向
  @ukayare
オブジェクト指向とは?

オブジェクト同士の相互作用としてシステムの振る
舞いをとらえる考え方である。
英語の object-oriented (直訳は、「対象物志向の」
・「目的重視の」という意味の形容詞) の日本語訳
である。
オブジェクト指向は、当初プログラムの構造をオブジェクト群の相互作用の関係として捉えてプログラムコード
を書き表すオブジェクト指向プログラミング (OOP; object-oriented programming) から始まっているが、その
後、システム開発における要求分析フェイズにおいて、開発しようとする対象領域の構成要素をオブジェクト
として抽出・定義していくオブジェクト指向分析 (OOA; object-oriented analysis) 、システムの動作や構造を
オブジェクトとクラスとして記述するオブジェクト指向設計 (OOD; object-oriented design) のための、技術とし
ても広く発展・普及することとなった。

オブジェクト指向の枠組みが持つ道具立ては、一般的で強力な記述能力を持つ。特に複雑なシステム記
述、巨大なライブラリ(特に部品間で緊密で複雑な相互関係を持つもの)の記述においては、現実問題として
オブジェクト指向の考え方は必須であるといえる。
by WIkipwdia
つまりどういうことだってばよ!?
すっげー簡単に言うと

関数や変数をオブジェクト(モノ)にまとめ(パッケー
ジングし)て、
コードを読みやすくしたり、
プログラムを拡張しやすくするための手法
・・・?


 関数?変数?別に手続き型でよくね?
手続き型言語?
記述された命令を逐次的に実行し、処理の結果に
応じて変数の内容を変化させていくプログラミング
言語のこと。

C言語やBASIC、Pascalなど、ほとんどのプログラミング言語は手続き型言語に属す
る。
処理速度が速い反面、動作を検証するには処理の流れを追う必要があり、開発効率
は関数型言語に劣るといわれる。


by IT用語辞典
・・・?


 結局どこがどう違うのかよくわかんなーい
具体例をば



炊飯器の構造を
プログラムで
あらわしてみよう
炊飯器の構造・・・?
まず構成要素を
あげてみる       フタ

          開くボタン
 切ボタン
             炊飯ボタン
                        釜
現在の状態
タイマー
                  加熱器
米を入れて炊けて、
電源を切るまでの流れ
1.   お水を入れて炊飯ボタンを押す
2.   炊ける
3.   フタを開ける(ご飯をよそう)
4.   フタを閉じる
5.   切ボタンを押す
・・・?


 で、これがなんなの?
つまり

炊飯器の構成要素=変数
炊飯器の動作の流れの1つ1つ=関数

ってことです
各変数の意味を決めよう

フタ:閉じてるか上に上がってるか
開くボタン:押されてる、押されてない
炊飯ボタン:押されてる、押されてない
切ボタン:押した、押してない
釜:現在の温度(常温)
加熱器:現在の加熱具合(常温)
タイマー:切、作動中
現在の状態:切、炊飯中、保温中
各動作を細かく見よう(1)

1. お水を入れて炊飯ボタンを押す
  a. 炊飯ボタンが押される
  b. タイマーが作動中になる
  c. 加熱器が動いて炊飯の温度になる
     i. 釜に熱が伝わる
  d. 状態が炊飯中になる
2. 炊ける
   a. タイマーが切になる(止まる)
   b. 加熱器が保温の温度になる
      i. 釜に熱が伝わる
   c. 状態が保温中になる
  d. 炊飯ボタンが押されてない状態になる
各動作を細かく見よう(2)

1. フタを開ける(ご飯をよそう)
 a. 開くボタンを押された状態にする
 b. フタが上に上がる
2. フタを閉じる
 a. フタが閉じた状態になる
 b. 開くボタンが押されてない常態になる
3. 切ボタンを押す
 a. 切るボタンが押された状態になる
 b. 加熱器が常温になる
    i. 釜に熱が伝わる
 c. 状態が切になる
そして


今書き下した
それぞれが
変数、関数
となります
・・・!?

 な、なんだってー!?
 ・・・どういうこと?
軽くコードっぽく書いてみよう(変数)

boolean フタ=false;
boolean 開くボタン=false;
boolean 炊飯ボタン=false;
boolean 切ボタン=false;
temp 釜=常温;
temp 加熱器=常温;
boolean タイマー=false;
state 現在の状態=切;
軽くコードっぽく書いてみよう(関数)

お水を入れて炊飯ボタンを押す
start炊飯(){
  push炊飯();
  startタイマー();
  start加熱器();
  状態炊飯中();
}
軽くコードっぽく書いてみよう(関数)
炊飯ボタンが押される
push炊飯(){炊飯ボタン=true;}

タイマーが作動中になる
startタイマー(){タイマー=true;}

加熱器が動いて炊飯の温度になる
start加熱器(){
  加熱器=加熱中;
  釜加熱();
}
軽くコードっぽく書いてみよう(関数)
釜に熱が伝わる
釜加熱(){
  釜=加熱中;
}

状態が炊飯中になる
状態炊飯中(){
  現在の状態=炊飯中;
}
軽くコードっぽく書いてみよう(関数)

炊ける
炊ける(){
  タイマー切();
  加熱器保温();
  状態保温();
  炊飯ボタン切();
}
軽くコードっぽく書いてみよう(関数)
タイマーが切になる(止まる)
タイマー切{タイマー=false;}

加熱器が保温の温度になる
加熱器保温(){加熱器=保温;}

状態が保温中になる
状態保温(){現在の状態=保温;}

炊飯ボタンが押されてない状態になる
炊飯ボタン切(){炊飯ボタン=false;}

釜に熱が伝わる
釜保温(){釜=保温;}
軽くコードっぽく書いてみよう(関数)

フタを開ける
openフタ(){
  push開くボタン();
  upフタ();
}
開くボタンを押された状態にする
push開くボタン(){開くボタン=true;}

フタが上に上がる
upフタ(){フタ=true;}
軽くコードっぽく書いてみよう(関数)

フタを閉じる
closeフタ(){
  downフタ();
  unpushed開くボタン();
}
フタが閉じた状態になる
downフタ(){フタ=false;}

開くボタンが押されてない常態になる
unpushed開くボタン(){開くボタン=false;}
軽くコードっぽく書いてみよう(関数)

切ボタンを押す
push切ボタン(){
  pushed切ボタン();
  加熱器常温();
  状態切();
}
切るボタンが押された状態になる
pushed切ボタン(){切ボタン=true}
軽くコードっぽく書いてみよう(関数)
加熱器が常温になる
加熱器常温(){
  加熱器=常温;
  釜常温();
}

釜に熱が伝わる
釜常温(){釜=常温;}

状態が切になる
状態切(){現在の状態=切;}
?

なんとなくわかったけど、
手続き型でいいよねこれ
そいつはどうかな?

変数をどうするか?
● グローバル変数を使うのはまずい
  ○ どこからでも見れるグローバル変数はどこで何が起こった
   かをトレースするのが難しい
● 関数に引数を持たせる
  ○ 変数のたらいまわしによる可読性の低下
  ○ 関数の引数は基本的に値を参照するのみとする(一応
   変更可能に出来るが)
大規模時の弊害

● 手続き型だと規模が大きくなったときに、関数同
  士の関連性をぱっと見わからない
 ○ ファイルを分けることである程度その辺の部分をある程度
   お茶を濁すことが出来る
 ○ 構造体を使用することでもある程度対処可能だが、拡張
   性が低くなる
● 分割したところで関係ないところで関数を呼び出
  すことは可能なので、本質的ではない
● 副作用の問題
 ○ 影響範囲が良くわからなくなる
たしかに

C言語で
大規模プログラムは書きたくないわー
ということで

その辺をまとめて
影響範囲とかを明確にしようと
言うのが
オブジェクト指向の主旨です
(たぶん)
さっきの炊飯器をまとめると

class 炊飯器{
  boolean 炊飯ボタン;
  boolean フタ;
  ...
  start炊飯(){
     ...
  }
  ...
}
ん?


これ別に手続き型でも・・・
ここでカプセル化と言う概念
カプセル化とは、「手続きと情報を一緒にまとめる」というオブ
ジェクト指向プログラミングの考え方のことである。

カプセル化は、外部から操作できる処理に対してオブジェクト内
部で情報を紐付けることであり、外部から不要な操作や情報を
遮断できる。こうすることでオブジェクトを操作する側から見るとイ
ンターフェース(外部から操作できる処理)のみ把握すればよく、
オブジェクトの独立性が高まり、結果的に開発効率と可搬性の
向上が期待できる。
?


??????????????????
簡単に言うと

オブジェクトを
使う側から見て
内部の処理は
良くわかんなくても
使えるようにすること
炊飯器を例にすれば


ご飯炊きたい

         炊飯器オブジェクトに
         start炊飯を実行すれば
         いい
炊飯器を例にすれば


ご飯炊きたい
    炊飯器オブジェクト内で何してるか
    よくわかんなくても
       炊飯器オブジェクトに
    動作を実行することが出来る
       start炊飯を実行すれば
    (インターフェースのように扱える)
       いい
さらに継承と言う概念

例えば・・・
高機能な炊飯器を新しく考えたい

         アップ
         グレード!
このとき


 またいろいろ書き直すのめんどいお・・・
継承を使えば拡張も簡単

class高機能炊飯器 expands 炊飯器{
  新機能(){
    ...
  }
}

継承により再利用性や拡張性が高くなる!
(たぶん)
あとポリモーフィズムという考え方

こういうときどうする?
          お米だけじゃなくて
          パンも焼きたい
このとき

 [start炊飯ボタンby米]と
 [start炊飯ボタンbyパン]で
 名前別にするのはなんかあれだなあ
こういうときこそポリモーフィズム
オブジェクト指向プログラミング言語の持つ性質の
ひとつであり、同名のメソッドや型などをオブジェク
トの種類に応じて使い分けることができる性質のこ
と。日本語では「多相性」「多態性」「多様性」などと
訳される。
?


??????????????????
噛み砕くと

引数の型を変えたり、
継承先で別動作を定義したり、
同じメソッド名でも
いろいろな動作を
できるようにしようということ
さっきの炊飯器の機能でいうと

class 高機能炊飯器 expands 炊飯器{
  start炊飯(米){
    ....

   }
   start炊飯(パン){
    ...

   }
}
メソッド引数の型などによるポリモーフィズム
・・・オーバーロード
こんな感じで

● カプセル化
● 継承
● ポリモーフィズム

こういった概念を取り入れてコードの再利
用や拡張性、可読性やメンテナンスをやり
やすくしたのがオブジェクト指向
なるほど


なんとなくわかったお
今回は概念だけ

これを実現する機能としていろいろあります
● アクセサ
● プロパティ
● オーバーロード
● オーバーライド
● コンストラクタ
● とかとか?

後は自分で調べてね!
それでは


ありがとうございました
注意

この資料はukayareの独断と偏見による説明になっ
ております。
正確な事実と若干異なる部分がある可能性があり
ます。

もし「これぜんぜん違うじゃねーか」という部分があり
ましたら、twitterで@ukayareまでお願いいたしま
す。

More Related Content

Viewers also liked

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ増田 亨
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎文樹 高橋
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生Satoru Kodaira
 
ドラえもんの世界をオブジェクト指向で
ドラえもんの世界をオブジェクト指向でドラえもんの世界をオブジェクト指向で
ドラえもんの世界をオブジェクト指向でyaju88
 
デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」Hokuto Tateyama
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)nomuken
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向yamada28go
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向hakoika-itwg
 
オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版Mao Ohnishi
 
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計Akineko Shimizu
 
オブジェクト指向での世界の捉え方
オブジェクト指向での世界の捉え方オブジェクト指向での世界の捉え方
オブジェクト指向での世界の捉え方Yoshikazu Hayashi
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツShunji Konishi
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで増田 亨
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する増田 亨
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクトアシアル株式会社
 
デザインパターン(初歩的な7パターン)
デザインパターン(初歩的な7パターン)デザインパターン(初歩的な7パターン)
デザインパターン(初歩的な7パターン)和明 斎藤
 
Javaによる理想のデザインパターン
Javaによる理想のデザインパターンJavaによる理想のデザインパターン
Javaによる理想のデザインパターンTomomi Fujisaki
 
覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターンKazuya Hirota
 

Viewers also liked (20)

オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
オブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツオブジェクト指向の設計と実装の学び方のコツ
オブジェクト指向の設計と実装の学び方のコツ
 
06 オブジェクト指向の基礎
06 オブジェクト指向の基礎06 オブジェクト指向の基礎
06 オブジェクト指向の基礎
 
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
ジーノ先生の文系的オブジェクト指向(1) - ジーノ誕生
 
ドラえもんの世界をオブジェクト指向で
ドラえもんの世界をオブジェクト指向でドラえもんの世界をオブジェクト指向で
ドラえもんの世界をオブジェクト指向で
 
デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」デジタルメディア創作部勉強会「オブジェクト指向入門1」
デジタルメディア創作部勉強会「オブジェクト指向入門1」
 
オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)オブジェクト指向勉強会(基礎)
オブジェクト指向勉強会(基礎)
 
擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向擬人化で考えるオブジェクト指向
擬人化で考えるオブジェクト指向
 
第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向第2回勉強会 オブジェクト指向
第2回勉強会 オブジェクト指向
 
オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版オブジェクト指向ワークショップ 201507版
オブジェクト指向ワークショップ 201507版
 
インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計インターフェイスによるオブジェクト指向設計
インターフェイスによるオブジェクト指向設計
 
オブジェクト指向での世界の捉え方
オブジェクト指向での世界の捉え方オブジェクト指向での世界の捉え方
オブジェクト指向での世界の捉え方
 
良質なコードを高速に書くコツ
良質なコードを高速に書くコツ良質なコードを高速に書くコツ
良質なコードを高速に書くコツ
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装までドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動で開発する ラフスケッチから実装まで
 
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解するドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 
デザインパターン(初歩的な7パターン)
デザインパターン(初歩的な7パターン)デザインパターン(初歩的な7パターン)
デザインパターン(初歩的な7パターン)
 
Javaによる理想のデザインパターン
Javaによる理想のデザインパターンJavaによる理想のデザインパターン
Javaによる理想のデザインパターン
 
覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン覚えて帰ろうJavaデザインパターン
覚えて帰ろうJavaデザインパターン
 

Recently uploaded

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料Tokyo Institute of Technology
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラムKochi Eng Camp
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料Takayuki Itoh
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~Kochi Eng Camp
 

Recently uploaded (6)

ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
2024年度 東京工業大学 工学院 機械系 大学院 修士課程 入試 説明会 資料
 
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
世界を変えるクレーンを生み出そう! 高知エンジニアリングキャンプ2024プログラム
 
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
生成AIの回答内容の修正を課題としたレポートについて:お茶の水女子大学「授業・研究における生成系AIの活用事例」での講演資料
 
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
次世代機の製品コンセプトを描く ~未来の機械を創造してみよう~
 

ハトでもわかるオブジェクト指向