SlideShare a Scribd company logo
超初心者向け

OO/OOP入門
オブジェクト指向とか
オブジェクト指向プログラミングとか
• 経歴
• 電気通信大学 電気通信学部 情報工学科 卒
• 株式会社ニルソフトウェア
• 各種研究所の新規研究の受託開発、プロトタイプを
研究内容の相談からソフト制作まで(3D CAD、医
療CT、形式的記述ツール、他)
• 自社製品開発(UMLツール、KAOSツール、など)
• 個人事業主
• バンクーバーに1年滞在
• 株式会社セレス
• モッピージョブ(主にバックエンド、絵描き以外の
フロントやることも)
• スマートウォッチ(ウォッチフェイスの企画、制作
進行、開発、絵描き以外全部)
 自己紹介
• 山本智世(ともや)
• 言語
• 日本語、英語(少し)、Java、C、C++、
JavaScript、PHP、Swift(少し)
• ジャンル
• アプリ、Web
•    tmyymmt.net(個人的な活動)
• ピンポイント天気予報(iGoogle、ブ
ログパーツ)、Androidアプリ、ゲー
ム攻略サイト、日本酒紹介サイト、他
オブジェクト指向って何?
ネットに先人の良質な説明がイロイロ
あります。それを一通り読みましょう
• Wikipedia
• オブジェクト指向
• オブジェクト指向プログラミング
• Object-oriented programming (大抵、英語の方が詳しくて、マトモ)
• オブジェクトの広場 by オージス総研の有志
• ネットだと一番分かりやすくて詳しいかも
• 割と最近、話題になったもの
• オブジェクト指向と10年戦ってわかったこと (炎上のネタ元。本気にしちゃ嫌)
• オブジェクト指向と20年戦ってわかったこと (マトモなフォロー)
おしまい
え?簡単に説明しろ?
• 先ほどのサイトは、おそらくほぼ正確で十分わかりや
すく、まとまった内容になっている
• 短時間で無理やり説明しても、事実を網羅できなかっ
たり、事実とは異なったり、乱暴な説明になるで
しょ…
超初心者向け

OO/OOP入門
オブジェクト指向とか
オブジェクト指向プログラミングとか
乱暴な
適当にまとめただけなので
間違い多いかも
後でキチンと
参考サイトを読んでください
OOとOOPの違いって何?
• OO(オブジェクト指向)
• 「オブジェクト指向」という概念
• 概念は抽象度が高いので、割と普遍的
• OOP(オブジェクト指向プログラミング)
• 「オブジェクト指向を用いたプログラミング」の方法
• プログラミング言語によって、OOを簡単に適用できた
り、(無茶しないと)適用できなかったり
で、OO/OOPって何?
• 歴史
• OOPは、1950年台後半からMIT辺りで出てきたっぽい
• それ以前には何があったの?(OOPに関係しそうなものだけ抜粋)
• 機械語(バイナリ。CPUの命令文のリストを上から順番に実行。)
• アセンブリ言語(機械語を人間に分かりやすい記述に置き換えた。アセンブラで機械語に変換。)
• GOTOだらけの時代(規模が大きいと、人間は処理の内容を順番に追っかけるだけで大変。)
• 構造化プログラミング(順次、反復、分岐。極力GOTO使わない。)
• モジュールプログラミング(サブルーチン、関数、処理のモジュール化。)
• 詳しくは
• 放送大学の授業見るなり、MITの授業見るなり、「コンピュータの歴史」や「ソフトウェア開発関係
の歴史」を調べてください
それ以前と何が違うの?
• それ以前
• データはデータ、処理は処理として、(別々に)扱っていた
• 処理のモジュール化、データ構造の整理整頓しても、どこに何があって、どこで
どこまで処理して、このデータはどこで定義されてるの?ってのが分かりにくかっ
た(コンピュータみたいに、追っかければわかるけど、人間にはシンドイ。)
• OO/OOP
• 責務単位でひとまとまりにして、データと処理を一緒に持たせたら、関心のある
責務の部分ごとに見ればよくなるから、分かりやすくなって、楽になるのでは?
• それって、現実界で言う「モノ」では? → オブジェクト
• これだけがモチベーションではない。と思う…
どんな概念で実現できそう?
• こんな概念があるといい感じに実現できるかも!(ついでにこん
なもの思いついた!)(ついでにこんな効果も期待できるね!)
• データ抽象
• カプセル化
• 継承
• ポリモーフィズム
• 人や言語によって、重要視している点は、多少違うので、構成概
念の定義も異なる
データ抽象 by Wikipedia
• データ型の詳細定義とその操作に関する手続きを情
報の局所性が高まるようにソースコード中の一カ所に
まとめて記述するための記法
• 情報が一カ所に局所的にまとめて記載されているため、
非公開(private)部分の変更であればその定義部分
の詳細を変更するだけでソースコード全体の修正が完
了する
• データ型の詳細定義とその操作手続きの局所的記述
を実現する方法は複数あり、抽象データ型はその一例
カプセル化(情報隠蔽)by Wikipedia
• オブジェクトの振る舞いを隠蔽
• オブジェクト内部のデータを隠蔽
• オブジェクトの実際の型を隠蔽(?)
継承(インヘリタンス)by Wikipedia
• あるオブジェクトが他のオブジェクトの特性を引き継
ぐ場合、両者の間に「継承関係」があると言われる
• 一般的に、BがAを継承する場合、B is a A. (BはAの
一種である)という意味的な関係(Is-a関係)が成り
立つ
ポリモーフィズム(多態性)
by Wikipedia
• あるオブジェクトへの操作が呼び出し側ではなく、受
け手のオブジェクトによって定まる特性
• クラスベースのオブジェクト指向の場合には、派生ク
ラスの複数分岐として多態性を実現する
• プロトタイプベースのオブジェクト指向の場合では関
係がない概念とされる
OO/OOPだけ、理解して、使えればOK?
んなわけない
• この業界に銀の弾丸は無い
• 何事も、目的、リソース、向き不向き、などで最適なモ
ノを使い分けが大事
• 関数型言語、データ指向、アスペクト指向、etc.
OO/OOPの向き不向き
• 向いてるもの
• フレームワーク、ライブラリなど
• GUIとか
• マシンリソースが潤沢なプロジェクト
• 向いてないもの
• パフォーマンスやメモリ効率を最大化したい
• 3D関係や、組み込み関係だと、CやC++でOOP関係なしに書いてた
り…
• マシンリソースが貧弱な環境
おしまいネットに先人の良質な説明がイロイロあります。それを一通り読みましょう
• Wikipedia
• オブジェクト指向
• オブジェクト指向プログラミング
• Object-oriented programming (大抵、英語の方が詳しくて、マトモ)
• オブジェクトの広場 by オージス総研の有志
• ネットだと一番分かりやすくて詳しいかも
• 割と最近、話題になったもの
• オブジェクト指向と10年戦ってわかったこと (炎上のネタ元。本気にしちゃ嫌)
• オブジェクト指向と20年戦ってわかったこと (マトモなフォロー)

More Related Content

Similar to 超初心者向けOO/OOP入門

情報システム概論 Kanban Pizza Game
情報システム概論 Kanban Pizza Game情報システム概論 Kanban Pizza Game
情報システム概論 Kanban Pizza Game
Yoshiaki Rikitake
 

Similar to 超初心者向けOO/OOP入門 (20)

20180621_Node学園LT
20180621_Node学園LT20180621_Node学園LT
20180621_Node学園LT
 
Koyomin Zの紹介
Koyomin Zの紹介Koyomin Zの紹介
Koyomin Zの紹介
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 
ORB-SLAMを動かしてみた
ORB-SLAMを動かしてみたORB-SLAMを動かしてみた
ORB-SLAMを動かしてみた
 
run Keras model on opencv
run Keras model on opencvrun Keras model on opencv
run Keras model on opencv
 
20150212 ピクト図解入門(リクルートジョブズ様 IT朝大学)
20150212 ピクト図解入門(リクルートジョブズ様 IT朝大学)20150212 ピクト図解入門(リクルートジョブズ様 IT朝大学)
20150212 ピクト図解入門(リクルートジョブズ様 IT朝大学)
 
JAWSDAYS 2018 LUNCH SESSION
JAWSDAYS 2018 LUNCH SESSIONJAWSDAYS 2018 LUNCH SESSION
JAWSDAYS 2018 LUNCH SESSION
 
情報システム概論 Kanban Pizza Game
情報システム概論 Kanban Pizza Game情報システム概論 Kanban Pizza Game
情報システム概論 Kanban Pizza Game
 
3Dプリント×Python ~コードからアプローチする3Dプリンティング~
3Dプリント×Python ~コードからアプローチする3Dプリンティング~3Dプリント×Python ~コードからアプローチする3Dプリンティング~
3Dプリント×Python ~コードからアプローチする3Dプリンティング~
 
20180424 orb slam
20180424 orb slam20180424 orb slam
20180424 orb slam
 
30年来真名んできた中で IoT 実装で役立っている基礎技術
30年来真名んできた中で IoT 実装で役立っている基礎技術30年来真名んできた中で IoT 実装で役立っている基礎技術
30年来真名んできた中で IoT 実装で役立っている基礎技術
 
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
Visual Studio Codeを使い倒そう! ~プログラミングから機械学習、クラウド連携、遠隔ペアプロまで~
 
Self introduction for Career select
Self introduction for Career selectSelf introduction for Career select
Self introduction for Career select
 
UX Sketch vol.1 事業とUXデザイン
UX Sketch vol.1 事業とUXデザインUX Sketch vol.1 事業とUXデザイン
UX Sketch vol.1 事業とUXデザイン
 
事業とUXデザイン
事業とUXデザイン事業とUXデザイン
事業とUXデザイン
 
アジャイルにモデリングは必要か
アジャイルにモデリングは必要かアジャイルにモデリングは必要か
アジャイルにモデリングは必要か
 
セレンディピティと機械学習
セレンディピティと機械学習セレンディピティと機械学習
セレンディピティと機械学習
 
20171206 tsumugu4 人工知能特集_v1.00_抜粋
20171206 tsumugu4 人工知能特集_v1.00_抜粋20171206 tsumugu4 人工知能特集_v1.00_抜粋
20171206 tsumugu4 人工知能特集_v1.00_抜粋
 
2017-12-06 tsumugu4 人工知能特集
2017-12-06 tsumugu4 人工知能特集2017-12-06 tsumugu4 人工知能特集
2017-12-06 tsumugu4 人工知能特集
 
マイクロソフトにおけるエバンジェリズム活動
マイクロソフトにおけるエバンジェリズム活動マイクロソフトにおけるエバンジェリズム活動
マイクロソフトにおけるエバンジェリズム活動
 

超初心者向けOO/OOP入門