Slide 1

Slide 1 text

超初心者向け 
 OO/OOP入門 オブジェクト指向とか オブジェクト指向プログラミングとか

Slide 2

Slide 2 text

w ܦྺ w ిؾ௨৴େֶɹిؾ௨৴ֶ෦ɹ৘ใ޻ֶՊɹଔ w גࣜձࣾχϧιϑτ΢ΣΞ w ֤छݚڀॴͷ৽نݚڀͷडୗ։ൃɺϓϩτλΠϓΛ ݚڀ಺༰ͷ૬ஊ͔Βιϑτ੍࡞·Ͱʢ%$"%ɺҩ ྍ$5ɺܗࣜతهड़πʔϧɺଞʣ w ࣗࣾ੡඼։ൃʢ6.-πʔϧɺ,"04πʔϧɺͳͲʣ w ݸਓࣄۀओ w όϯΫʔόʔʹ೥଺ࡏ w גࣜձࣾηϨε w ϞοϐʔδϣϒʢओʹόοΫΤϯυɺֆඳ͖Ҏ֎ͷ ϑϩϯτ΍Δ͜ͱ΋ʣ w εϚʔτ΢Υονʢ΢ΥονϑΣΠεͷاըɺ੍࡞ ਐߦɺ։ൃɺֆඳ͖Ҏ֎શ෦ʣ  自己紹介 • 山本智世(ともや) • 言語 • 日本語、英語(少し)、Java、C、C++、 JavaScript、PHP、Swift(少し) • ジャンル • アプリ、Web •    tmyymmt.net(個人的な活動) • ピンポイント天気予報(iGoogle、ブ ログパーツ)、Androidアプリ、ゲー ム攻略サイト、日本酒紹介サイト、他

Slide 3

Slide 3 text

lΦϒδΣΫτࢦ޲ͬͯԿʁz

Slide 4

Slide 4 text

ネットに先人の良質な説明がイロイロ あります。それを一通り読みましょう • Wikipedia • オブジェクト指向 • オブジェクト指向プログラミング • Object-oriented programming (大抵、英語の方が詳しくて、マトモ) • オブジェクトの広場 by オージス総研の有志 • ネットだと一番分かりやすくて詳しいかも • 割と最近、話題になったもの • オブジェクト指向と10年戦ってわかったこと (炎上のネタ元。本気にしちゃ嫌) • オブジェクト指向と20年戦ってわかったこと (マトモなフォロー)

Slide 5

Slide 5 text

おしまい

Slide 6

Slide 6 text

え?簡単に説明しろ? • 先ほどのサイトは、おそらくほぼ正確で十分わかりや すく、まとまった内容になっている • 短時間で無理やり説明しても、事実を網羅できなかっ たり、事実とは異なったり、乱暴な説明になるで しょ…

Slide 7

Slide 7 text

超初心者向け 
 OO/OOP入門 オブジェクト指向とか オブジェクト指向プログラミングとか ཚ๫ͳ

Slide 8

Slide 8 text

適当にまとめただけなので 間違い多いかも 後でキチンと 参考サイトを読んでください

Slide 9

Slide 9 text

OOとOOPの違いって何? • OO(オブジェクト指向) • 「オブジェクト指向」という概念 • 概念は抽象度が高いので、割と普遍的 • OOP(オブジェクト指向プログラミング) • 「オブジェクト指向を用いたプログラミング」の方法 • プログラミング言語によって、OOを簡単に適用できた り、(無茶しないと)適用できなかったり

Slide 10

Slide 10 text

で、OO/OOPって何? • 歴史 • OOPは、1950年台後半からMIT辺りで出てきたっぽい • それ以前には何があったの?(OOPに関係しそうなものだけ抜粋) • 機械語(バイナリ。CPUの命令文のリストを上から順番に実行。) • アセンブリ言語(機械語を人間に分かりやすい記述に置き換えた。アセンブラで機械語に変換。) • GOTOだらけの時代(規模が大きいと、人間は処理の内容を順番に追っかけるだけで大変。) • 構造化プログラミング(順次、反復、分岐。極力GOTO使わない。) • モジュールプログラミング(サブルーチン、関数、処理のモジュール化。) • 詳しくは • 放送大学の授業見るなり、MITの授業見るなり、「コンピュータの歴史」や「ソフトウェア開発関係 の歴史」を調べてください

Slide 11

Slide 11 text

それ以前と何が違うの? • それ以前 • データはデータ、処理は処理として、(別々に)扱っていた • 処理のモジュール化、データ構造の整理整頓しても、どこに何があって、どこで どこまで処理して、このデータはどこで定義されてるの?ってのが分かりにくかっ た(コンピュータみたいに、追っかければわかるけど、人間にはシンドイ。) • OO/OOP • 責務単位でひとまとまりにして、データと処理を一緒に持たせたら、関心のある 責務の部分ごとに見ればよくなるから、分かりやすくなって、楽になるのでは? • それって、現実界で言う「モノ」では? → オブジェクト • これだけがモチベーションではない。と思う…

Slide 12

Slide 12 text

どんな概念で実現できそう? • こんな概念があるといい感じに実現できるかも!(ついでにこん なもの思いついた!)(ついでにこんな効果も期待できるね!) • データ抽象 • カプセル化 • 継承 • ポリモーフィズム • 人や言語によって、重要視している点は、多少違うので、構成概 念の定義も異なる

Slide 13

Slide 13 text

データ抽象 by Wikipedia • データ型の詳細定義とその操作に関する手続きを情 報の局所性が高まるようにソースコード中の一カ所に まとめて記述するための記法 • 情報が一カ所に局所的にまとめて記載されているため、 非公開(private)部分の変更であればその定義部分 の詳細を変更するだけでソースコード全体の修正が完 了する • データ型の詳細定義とその操作手続きの局所的記述 を実現する方法は複数あり、抽象データ型はその一例

Slide 14

Slide 14 text

カプセル化(情報隠蔽) by Wikipedia • オブジェクトの振る舞いを隠蔽 • オブジェクト内部のデータを隠蔽 • オブジェクトの実際の型を隠蔽(?)

Slide 15

Slide 15 text

継承(インヘリタンス) by Wikipedia • あるオブジェクトが他のオブジェクトの特性を引き継 ぐ場合、両者の間に「継承関係」があると言われる • 一般的に、BがAを継承する場合、B is a A. (BはAの 一種である)という意味的な関係(Is-a関係)が成り 立つ

Slide 16

Slide 16 text

ポリモーフィズム(多態性)
 by Wikipedia • あるオブジェクトへの操作が呼び出し側ではなく、受 け手のオブジェクトによって定まる特性 • クラスベースのオブジェクト指向の場合には、派生ク ラスの複数分岐として多態性を実現する • プロトタイプベースのオブジェクト指向の場合では関 係がない概念とされる

Slide 17

Slide 17 text

l00001͚ͩɺཧղͯ͠ɺ࢖͑Ε͹0,ʁz

Slide 18

Slide 18 text

んなわけない • この業界に銀の弾丸は無い • 何事も、目的、リソース、向き不向き、などで最適なモ ノを使い分けが大事 • 関数型言語、データ指向、アスペクト指向、etc.

Slide 19

Slide 19 text

OO/OOPの向き不向き • 向いてるもの • フレームワーク、ライブラリなど • GUIとか • マシンリソースが潤沢なプロジェクト • 向いてないもの • パフォーマンスやメモリ効率を最大化したい • 3D関係や、組み込み関係だと、CやC++でOOP関係なしに書いてた り… • マシンリソースが貧弱な環境

Slide 20

Slide 20 text

おしまい ネットに先人の良質な説明がイロイロあります。それを一通り読みましょう • Wikipedia • オブジェクト指向 • オブジェクト指向プログラミング • Object-oriented programming (大抵、英語の方が詳しくて、マトモ) • オブジェクトの広場 by オージス総研の有志 • ネットだと一番分かりやすくて詳しいかも • 割と最近、話題になったもの • オブジェクト指向と10年戦ってわかったこと (炎上のネタ元。本気にしちゃ嫌) • オブジェクト指向と20年戦ってわかったこと (マトモなフォロー)