Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

オブジェクト指向勉強会(基礎)

2,382 views

Published on

初心者不在の中で行われた勉強会の俺氏のスライド.

Published in: Technology
  • Be the first to comment

オブジェクト指向勉強会(基礎)

  1. 1. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study あなたと Java 〜今すぐアンインストール〜 Nomuken - @nomuken
  2. 2. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study つらみ ● 90 …………分 ※ 直していただきました
  3. 3. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study つらみ ● 初心者いないっぽくないですか
  4. 4. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Agenda 1. 自己紹介 2. Java のアンインストール方法(重要) 3. オブジェクト指向の話(くどい) 4. Java での書き方 5. このセッションの後に何をするべきか 6. ちょこっと発展的な話
  5. 5. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 自己紹介 (@nomuken) ● C 科に所属 ● 好きなものは ArchLinux ● なんか怖い人が来ると聞いて昨日オブジェクト指向勉強した ● Java 歴 -32768 日 ● プログラミング初心者 →証明として 1 年次配当のコンピュータ基礎 I (プログラミン グの初歩の初歩)を落としている
  6. 6. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……なので今日は 初心者がやるので非常に簡単な話をします (間違ったことも言うかもです)
  7. 7. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 0. Java のアンインストール方法
  8. 8. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study そもそも Java とは ● 「 30 billion devices run Java 」 → 30 億のデバイスで動く「さいきょう の げんご」 →一節には「 30 億 ( ドル ) のデバイスしか動かない」と言われ ている(要出典) ● 人間を苦しめる闇の言語 →( I 科)サバプロ,( C 科)アルゴリズム
  9. 9. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 真面目な話では ● 仮想マシンを PC 上に作りその上で動くもの →だから一度コンパイルしたら, Mac でも Linux でも Windows でも動く ● 大量のライブラリを持っている巨大な言語 →だから他からライブラリを入手する必要がない
  10. 10. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ともあれ,アンインストール
  11. 11. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study よくある OS ( ArchLinux )の場合 1. ターミナルを開きます 2. yaourt もしくは pacman から消します → yaourt : % yaourt -Rdn java-common → pacman : # pacman -Rdn java-common ( Oracle な場合→ archlinux-java ) 3. お手持ちの Java の本を図書館とか寄贈とかして手元から消し ます
  12. 12. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 次に多い OS ( Ubuntu )の場合 ● ターミナルを起動します ● apt-get から消します → $ sudo apt-get purge default-jre (Oracle な場合は知りません ) ● お手持ちの Java に関するものを手元から消します
  13. 13. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 終わり ( openjre ……なら消す理由ないのだが )
  14. 14. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 1. くどいオブジェクト指向の話
  15. 15. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 避けては通れぬオブジェクト指向 ● 2 年次配当の以下の教科は Java インターネットプログラミング(失笑) 基礎プログラミング ● 不十分な教育 →オブジェクト指向の説明不足(インターネッツプログラミン グ) →基礎プログラミングは数値計算が主
  16. 16. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 避けては通れぬオブジェクト指向 ● I 科はしっかりやるっぽいです
  17. 17. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……そもそもオブジェクトとは 物
  18. 18. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ではオブジェクト指向とは? ● プログラミングの処理(とか)を「物」として考える手法 →人間の世界で使われてるから簡単? →でゎなぃ ● それではどのように考えるべきか →単に慣習であると思うべき → ……これを使えば良いプログラム ではない!
  19. 19. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 閑話休題 (んなことどうでも良い)
  20. 20. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study オブジェクト指向の定義 ● 言語によって考え方が違っている →例えば Ruby では全てがオブジェクトと考える (オブジェクトの定義はこの後で) → Java は全てがオブジェクトではない ● オブジェクト指向を考えた人からすれば重要なのは「メッセー ジング」
  21. 21. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study オブジェクト指向であることの条件 ● 「隠蔽性(カプセル化)」……だけ!! → 物事全てを隠す.自分の持っているデータも隠すし,どう やっているかも教えない
  22. 22. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study …… つまり? ● 以下のようなプログラムを考える #include<stdio.h> int main(void){ int a,b,result; printf("ab =>"); scanf("%d %d",&a,&b); result=a+b; printf("ans=>%dn",result); return 0; }
  23. 23. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……つまり ● 入力された値の和を出力するだけのプログラム → 2 つの値の和を知りたいときはいつでもこれを実行すれば良 い.
  24. 24. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ちょっと待って! ● 必要としているのは結果だけという事実 →その処理に関しては見てもしょうがない
  25. 25. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 理想図 何か 3,9 12
  26. 26. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……つまり 「多くの機能をプログラムの中に含めるときに,機能を自分で作 るではなく,既にある機能から結果だけを得る」 既にある機能 = 隠蔽(カプセル化)したもの
  27. 27. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study やった!終わり!! ● でゎなぃ → オブジェクトって? →メッセージングって?
  28. 28. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study オブジェクトの定義 ● 「データ」と「機能」を持つ
  29. 29. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study メッセージング ● 会話のようなもの. →オブジェクトに「値を渡す」 →オブジェクトから「値が返ってくる」
  30. 30. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……あれ?もしかして ? オブジェクト 3,9 12 メッセージング
  31. 31. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 完
  32. 32. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study で,終わりたかったが ● 自分のセッションでは Java の話だった
  33. 33. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 2. Java での書き方
  34. 34. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Java でオブジェクト指向 ● 実は「クラス」がキーワード →オブジェクトの設計図の役割を持つ ……→こんな感じのもの「クラスベース」とか言ったり ● クラスからオブジェクトが生成される →これをインスタンス化という →ということは設計図を元に別の個体が存在する ● さらにオブジェクトを強める別の性質が追加されている
  35. 35. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……ところでクラスとは ● 設計図以上のなんでもない →例えば RPG のキャラクターについて考えてみる. →キャラクターは冒険者という意味では共通だが,職も違うし 能力値も違う
  36. 36. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……えっと ● クラスはあくまで「概念」的な存在 →実際に使うにはデータを決めなくてはならない ……(概念の概念もあるんですが ) ● ここから実体を作る
  37. 37. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……つまり ボーカロイド 名前 = 初音ミク 名前 = 亞北ネル 名前を持っている
  38. 38. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study さて
  39. 39. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Java ……でのオブジェクト指向では さらに以下が追加されている 1. 継承 2. 多態性 これらはオブジェクト = 物という意味を強めている
  40. 40. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 継承とは ● 日本語そのままの意味→「引き継ぐ」
  41. 41. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……えっと とある「オブジェクト」からその全て(データと機能)を引き継 いだ「オブジェクト」を作れるということ!!
  42. 42. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study ……えっと ● 継承を使えばツンデレだけを実装してミクの機能を利用できる 1.歌える 2.可愛い 継承!! 1.歌える 2.可愛い 3.ツンデレ(← New! )
  43. 43. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study _人人人人人人人人人人_ > 逆に分かりづらい <  ̄ Y^Y^Y^Y^Y^Y^Y^Y^Y  ̄ ……他の人説明してるし,いいよね
  44. 44. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 多態性 ● 多態性とは「どのようなものにでも適したものになれる」とい うこと.(原義的には違うかも?) ● Java ではそれとして 2 つの機能がある オーバーライド(上書き) オーバーロード(多重定義)
  45. 45. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study この 2 ……つの説明をしたいのだが ● C 科では前期配当のコン基礎 I では「関数」を扱わないので説 ……明できない ● ……しかし,説明しないとサボったと言われそう ● …… やるか
  46. 46. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 関数とは ● C 言語において関数とは今までの説明での「機能」にあたる → C ……言語では機能という言葉を使いたくはないのだが ● (実は printf ……も関数なのだが )
  47. 47. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 関数の実例 #include<stdio.h> int sum(int a,int b){ returna+b; } int main(void){ int num1=3,num2=9,result; result=sum(num1,num2); printf("%dn",result); return0; }
  48. 48. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study C での関数のルール ● 予約語は使えない( if,int,void,return..... ) = 同名の関数は作れない(例では sum をもうひとつ作るのは無 理)
  49. 49. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study で, Java にもっていく ● Java では関数ではなく「メソッド」 ● そういえば以下の 2 つの話であった オーバーライド(上書き) オーバーロード(多重定義)
  50. 50. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study オーバーライド(上書き) ● 継承した機能(メソッド)を書き換える(上書き)することが できる. 歌う 歌う 可愛らしく真面目に歌う ダルそうに歌う 継承
  51. 51. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study オーバーロード(多重定義) ● ……同名の機能(メソッド)を作れる(語弊があるが ) → 与えられるものによって同名の処理を依頼しても,正しい処 理をできる 歌う( KAITO に) ダルそうに歌う 歌う(レンに) ちょっと照れながら歌う
  52. 52. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study で,ようやくこの章の本題に入れるわけで ● この章の本題→ Java での書き方 ● とりあえず,実際にコードを読んでみましょう
  53. 53. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study の前に模式図こんな感じです 1) 機能 歌う 踊る 2)データ 年齢 身長 1) 機能 歌う 踊る レンを想う 2)データ 年齢 身長 寝た回数 HatsuneMiku クラス AkitaNeru クラス 継承 …… 本当はクラス図を使うのですがそちらは分かりづらいので
  54. 54. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Demo (手元に欲しい? github:nomuken/TDU_OOP_study )
  55. 55. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 軽くポイント ● 継承→ extends というので表している ● オーバーロード→単純に同名のメソッドを作り,引数を得るこ とにより別物になっている ● オーバーライド→踊るメソッドを再定義している
  56. 56. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study と,注意! ● このコードはこの章の理解のために作りました →実はカプセル化(隠蔽)してないんです. (アクセスの話はもっとできるようになってから) ● それ以前にプログラマとして失格なコード ● 謎の package → これは include ……に近いものと思えば (本当は違う)
  57. 57. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 3. このセッションの後に何をすべきか
  58. 58. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 今まで解説したこと ● 全てではない → Java での前にオブジェクト指向とは何かに力を入れてみた →なので,省略に省略を重ねた →(作るの疲れた) ● オブジェクト指向について → これも全てではない
  59. 59. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Java をやる上で次に知るべきこと ● ライブラリ理解 ● データ構造理解 ● アクセス ● デザインパターン ● コーディング規則 ● Java のダメなところ
  60. 60. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study Any question......?
  61. 61. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study
  62. 62. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study そういえば ● Agenda 全部やってませんね
  63. 63. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 4. ちょっと発展的な話
  64. 64. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study betterClass の話 ● なんかサンプルで示したコードをそのままにするのは恥という か嫌なので,しっかり書いておきました. Git : https://github.com/nomuken/TDU_OOP_study
  65. 65. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 個人的 Java のダメなところ
  66. 66. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 何故 Java はダメなのか ● 製品には完全に向かない →仮想マシンで解釈し直すので,デコンパイルしやすい ……→技術の漏洩?(法律的にはダメなのだが ) ● 多いセキュリティホール →しょうが無いといえばそこまでだが,多くの危険性が指摘さ れている
  67. 67. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 何故 Java はダメなのか ● 安定性と速度の問題 → Java はやっぱり重い →安定性にも疑問がある ● 実質的に Android 位しか良さがない? → Web 系を Java で書くのはほぼ罰ゲーム,デスクトップはデ コンパイルの容易性を考えると微妙. → Jenkins が Java ……であるとはいえ
  68. 68. オブジェクト指向勉強会 ( 基礎 ) TwitterHashTag - #OOP_study 何故 Java はダメなのか ● 言語が巨大すぎる →だからデバッグが大変(自分のコードが悪いのですが) → Javadoc が必須

×