超初心者向け

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年戦ってわかったこと (マトモなフォロー)

超初心者向けOO/OOP入門