O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

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

2.401 visualizações

Publicada em

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

Publicada em: Tecnologia
  • Seja o primeiro a comentar

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

  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 が必須

×