Java基礎

1,246 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,246
On SlideShare
0
From Embeds
0
Number of Embeds
35
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • ・最近、開発者向けのチャットツールであるASの最新版をリリースしました\n・コードハイライトとかRedmine連携があるので開発者の人は使うといいと思います。\n
  • \n
  • 12年でいろいろありました。\n会社もかわったし\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • 当然、最初から今のJavaだったわけじゃない\n順次リリースされていった\n--(全部だしてから)\n最大の変更はJava 5だと思っている。 今日の話題でもあるジェネリクスが導入された\n
  • このキャストのあたりがヤバイ。\n大事なことなのでもう一度いいます。ヤバイ。\n
  • \n
  • javac -target jsr14 Foo.java\n
  • C#とうか.NETだとジェネリクスを導入する際にCLRを作りなおしています。\n
  • \n
  • C++はよくわかりません。\n
  • ・マーチンオデスキー先生\n
  • \n
  • \n
  • あ、Javaの話はここで終わりです。\n
  • \n
  • \n
  • \n
  • \n
  • Featherweightパターンとは無関係\n最小限はコレです。異論は受け付けます。\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • FJは非常にシンプルなので他のことにもつかえます\n
  • \n
  • 死の予感しかしない\n
  • 武器を準備しておこう\n言い換えれば証明できるようになる\n
  • 水掛け論をある程度防止できる\n
  • \n
  • Java基礎

    1. 1. Java基礎勉強会ジェネリクスの @mzp 1
    2. 2. @mzp 2
    3. 3. 3
    4. 4. AsakusaSatellite 0.7.2 リリースしました 4
    5. 5. Java8リリース目前 5
    6. 6. ←Java8 ←Java1.0 6http://www.flickr.com/photos/deming0131/5879385869/in/photostream/
    7. 7. Java1.0
    8. 8. Java1.1Java1.0
    9. 9. Java1.2Java1.1Java1.0
    10. 10. Java1.3Java1.2Java1.1Java1.0
    11. 11. Java 1.4Java1.3Java1.2Java1.1Java1.0
    12. 12. Java 5Java 1.4Java1.3Java1.2Java1.1Java1.0
    13. 13. Java 6Java 5Java 1.4Java1.3Java1.2Java1.1Java1.0
    14. 14. Java 7Java 6Java 5Java 1.4Java1.3Java1.2Java1.1Java1.0
    15. 15. Java 8Java 7Java 6Java 5Java 1.4Java1.3Java1.2Java1.1Java1.0
    16. 16. Java 8Java 7Java 6Java 5 ←最大の変更Java 1.4Java1.3Java1.2Java1.1Java1.0
    17. 17. ArrayList xs = new ArrayList();xs.add((Object)"foo");String str = (String)xs.get(0); 8
    18. 18. ArrayList xs = new ArrayList(); ヤバイxs.add((Object)"foo"); ヤバイString str = (String)xs.get(0); 8
    19. 19. ArrayList<String> xs = ...xs.add("foo");String str = s.get(0); 9
    20. 20. Java 8Java 7Java 6Java 5Java 1.4Java1.3 } ちゃんと 繋ってるJava1.2Java1.1Java1.0 10
    21. 21. ←C# 2.0 ←C# 1.0 (CLR2.0) (CLR1.0) C#(.NET) 11http://www.flickr.com/photos/ihorner/65073758/
    22. 22. OCaml/Haskell/SML 12
    23. 23. ←?????C++ 13
    24. 24. なぜJavaのジェネリクスは 特殊なのかJavaのジェネリクスはイレージャー方式ランタイムはそのまま非ジェネリクスに変換し 14
    25. 25. Odersky先生らの偉大なる 功績 GJ(Generic Java) として実装 後にJava5として 取り込まれた 15
    26. 26. 完16
    27. 27. Java基礎勉強会ジェネリクスの @mzp 17
    28. 28. 基礎とはある物事を成り立たせる、大もとの部分。もとい。 ――デジタル大辞泉 なぜJavaのジェネリクス が成立するか 18
    29. 29. ホントにジェネリクスは動 くのかすべての状況で必ず変換できる?既存の言語機能と衝突しない? 19
    30. 30. Java言語を直接拡張するの はキツい 20
    31. 31. 模型で実験しよう 21
    32. 32. FJ(Featherweight Java) 最小限のJavaサブセット•クラス定義 あるもの ないもの •アクセス制御(e.g.•フィールド定義 public, private)•メソッド定義 •static•オーバーライド •final •リフレクション•キャスト 22
    33. 33. FJの例class Point extends Object{ int x; Point(int x’) { this.x = x’; } int getX() { return this.x; }} 23
    34. 34. 他に定義されていること簡約規則、型付規則重要な性質‣ Subject Reduction‣ Progress 24
    35. 35. FGJ FJ + ジェネリクス•クラス定義 + ジェ あるもの ないものネリクス •アクセス制御(e.g.•フィールド定義 public, private) •static•メソッド定義 + •finalジェネリクス •リフレクション•オーバーライド 25
    36. 36. FGJの例class Point<T> extends Object{ T x; Point(T x’) { this.x = x’; } T getx() { return this.x; }} 26
    37. 37. 他に定義されていること簡約規則、型付規則重要な性質‣ Subject Reduction‣ Progress 27
    38. 38. FGJからFJへの変換 (type erasure)型をなるべく上位のスーパークラスに置き換えるキャストを適宜挿入する 28
    39. 39. class PointA extends Point<A>{ PointA(A x) { super(x); } PointA update(A y) { return new Point<T>(y); }}class PointA extends Point{ PointA(Object x) { super(x); } Point update(Object y) { return new PointA((A)y); }} 29
    40. 40. class PointA extends Point<A>{ PointA(A x) { super(x); } PointA update(A y) { return new Point<T>(y); }} A→Object PointA→Pointclass PointA extends Point{ PointA(Object x) { super(x); } Point update(Object y) { return new PointA((A)y); }} 29
    41. 41. class PointA extends Point<A>{ PointA(A x) { super(x); } PointA update(A y) { return new Point<T>(y); }} A→Object PointA→Pointclass PointA extends Point{ PointA(Object x) { super(x); } Point update(Object y) { return new PointA((A)y); }} キャストを挿入 29
    42. 42. 変換に関する性質type preservation‣ FGJがwell-typedならFJをwell- typedexecution preservation‣ FGJとFJで実行結果が同じ 30
    43. 43. FJの他の使い方 31
    44. 44. 例:関数型言語との比較オブジェクト指向型言語より関数型言語のほ うが表現能力が高い気がする 32
    45. 45. 33
    46. 46. オブジェクト指向型言語より関数言語のほうが表現能力が高い FJはλ計算+レコードで 表現できる http://www.flickr.com/photos/garrettwade/5839608287/ 34
    47. 47. どう証明するかFJをラムダ計算に変換できる評価結果が変化しない詳しくは http://ocaml- 35
    48. 48. まとめ?ジェネリクス使っとけFJのことも、ときどき思い出してください議論に便利 36

    ×