Scalaやろうぜ
Java Programing上級
講師: 有田一平@Cambridge Energy Data Lab
1Saturday, September 7, 13
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
講師紹介 有田一平
現職はArchitect@Cambridge Energy
Data Lab, Ltd
前職はグリー株式会社、JPモルガン証券
株式会社
名古屋出身
趣味はアウトドアスポーツ
2005年早稲田大学人間科学部卒業
github...
皆さんの事も教えて下さい :-)
名前
受講した理由
趣味
出身
などなんでも
生徒自己紹介
4Saturday, September 7, 13
講義の目的
本科目では、インターネットにおいて主力のプログラミング言
語の一つとなっているJava言語をもとにプログラミングの応用
なスキルを身につける。授業は、講義・演習のサイクルの繰り
返しで行われる。講義では、まずオブジェクト指向の基礎を...
提案: Scalaやりませんか
ScalaはイケてるJava
JVM上で動くプログラミング言語(という意味ではJavaの一種)
Javaのライブラリがそのまま使えます(ので基本的にJavaでできること
は全部できる)
記述が簡単で、すぐに覚えら...
Javaの特徴
Java
JVM(Javaの実行環境)上で動く、強い静的
片付け、オブジェクト指向言語、文法が厳しい
一方Script言語(Python, Ruby, Perl)は
動的型付け、インタープリタ、文法が緩い
7Saturday, ...
Scalaを使っている会社
8Saturday, September 7, 13
JVM
How does Scala work?
hello.java
hello.class
javac
java
Hello!
hello.scala
hello.class
scalacscala
Hello!
OS
9Saturday,...
Java vs Scala
Hello.java Hello.scala
やっぱりJavaは冗長すぎる
Scalaだとコードの量は半分くらいになります
10Saturday, September 7, 13
Hello.javaを作って実行しよう
Hello.javaファイルをエディタで開く(e.g. #vim Hello.java)
Helloクラスを作る
main methodを作る
compile する(#javac Hello.java)
...
Javaは面倒くさい
Editorで長いコードを
書き書きして
javacでコンパイルして
classファイル作って
javaで実行
12Saturday, September 7, 13
ScalaならREPLで楽々
コマンドラインで確認しながら
楽々実行もできます
13Saturday, September 7, 13
提案: JavaとScalaを
対比しながらScalaで実装
あくまでも効率のよいJavaとして利用
実装はScalaでサクサクやりましょう
14Saturday, September 7, 13
Java7のインストール
JDK7をインストール
http://www.oracle.com/technetwork/java/javase/downloads/
index.html
環境変数 (~/.profileとかに)
export J...
Scalaのインストール
XcodeのCommand Line Toolsをインストール
Preference -> Downloads -> Command Line Tools
16Saturday, September 7, 13
Scalaのインストール
Homebrew(http://brew.sh/)でgitとScalaとsbtのインストール
ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)...
Hello.scalaを作って実行しよう
Hello.scalaファイルをエディタで開く(e.g. #vim Hello.scala)
Helloオブジェクトを作る
main methodを作る
compile する(#scalac Hello...
GitHubの設定
GitHubとは
gitという分散バージョン管理
システムのWebでのコラボ
レーションツール
My Account
https://github.com/peisan
授業のRepository
https://githu...
GitHubの使い方
授業のRepositoryを自分の
RepositoryにFork
Local PCにcloneする
課題の提出は授業の
RepositoryにPull Requestで
行う
Someone’s
Repository
L...
GitHub Tutorial
Tutorial
http://git-scm.com/docs/gittutorial
Video
http://git-scm.com/videos
gitの使い方を1ステップずつ学べるサイト
http://...
IDE: IntelliJ IDEA
IDE (Integrated development environment)
シンタックスハイライト、デバッグ機能、補完機能などを備えた 統合開発環境
IntelliJ IDEAのダウンロード(Free...
Scala Plugin
plugins -> Browse RepositoriesからScala Pluginのインストール
23Saturday, September 7, 13
Scala Compiler
CompilerからUse External Compilerのチェックを外す
Compiler -> Scala Compilerからインストールしたscala 2.10.2を選択
24Saturday, Sep...
Java Tutorials
「Java 1 はじめてみようプログラミング」
「Java 2 アプリケーションづくりの初歩」
サポートページ
http://mitani.cs.tsukuba.ac.jp/book_support/java/
2...
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
Main Method
一番初めに書くいつものやつです
27Saturday, September 7, 13
変数定義
valで定数宣言
varで変数宣言
: <Type>で型指定(しな
くてもよい)
final修飾子で定数宣言
修飾子なしで変数宣言
宣言時の型指定は必須
28Saturday, September 7, 13
変数の型
Java
(Primitive/Class)
Scala
(Classのみ)
型なし
なんでも
文字
文字列
4Byte整数
8Byte整数
4Byte浮動少数
8Byte浮動少数
真偽値
配列
void / Void Unit
NA...
条件分岐
if文はJavaと同じ
match文を使うとより簡潔
に書けます
30Saturday, September 7, 13
ループ
1から10まで出力するだけの単純なループ
for文も一行でスッキリ豆知識: toとuntilはInt
型のmethod
31Saturday, September 7, 13
実習: FizzBuzz
以下のルールに従って1から100までの文字列を出力するプログラムを作る
3で割り切れる場合は 「Fizz」、5で割り切れる場合は 「Buzz」、両者
で割り切れる場合は 「Fizz Buzz」
完成したらPull Re...
関数定義
Hello or Gaoと出力する関数
def <関数名>(引数) : <返り値の型>
= {<関数の式>}で宣言
返り値の型は省略可
33Saturday, September 7, 13
実習: Count関数
与えられたArrayの要素数を数える関数を作る
Object名: CountArray
関数名: Count
引数: Array[Int]
返り値: Int
与えられたArrayの中で3の倍数と5の倍数の要素数を数える関...
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
オブジェクト指向とは?
オブジェクト同士の相互作用として、システムの振る
舞いをとらえる考え方である
オブジェクトとは?
属性(変数)と振る舞い(関数やMethod)を持
つ
オブジェクト指向のテクニック
カプセル化
多様性
継承
36Satu...
オブジェクトの生成
Human
firstName
lastName
age
getName()
Class (Type)
New
New
Human Object 1
firstName => Ippei
lastName => Arita
...
オブジェクトの基礎
38Saturday, September 7, 13
オブジェクトの基礎
Animal Class
name : 動物の名前
kind : 動物の種類
say() : nameとkindを含む文字列を出力
39Saturday, September 7, 13
演習: オブジェクトの基礎
以下のように定義されたBook Classを作成
Book
title : 本のタイトル
author : 本の著者
description() : titleとauthorを含む文字列を返す
Bookクラスから任意...
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
継承とは?
スーパークラスの構造と機能がサブクラスにその
まま引き継がれる
スーパークラスを継承したサブクラスは、そのク
ラスと同等の型としての使用が可能になる
Animal
name
kind
say()
スーパークラス
(親クラス)
継承
...
継承
Dog Class (Animal Classを継承)
name : 動物の名前
kind : 動物の種類(Dogで固定)
say() : nameとkindを含む文字列を出力
bark() : Wan!と吠える
43Saturday, ...
演習: 継承
以下のように定義されたCat Classを作成
Cat Class (Animal Classを継承)
name : 動物の名前
kind : 動物の種類(Catで固定)
say() : nameとkindを含む文字列を出力
ba...
演習: 継承応用編
以下のルールに従って任意のスーパークラス及び
サブクラスを作成
スーパークラスは一つ以上の属性及び振る舞いを持つ
サブクラスは一つ以上の独自の属性及び振る舞いを持つ
サブクラスはスーパークラスの属性と振る舞いを一つ以上上書き...
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
例外とは?
プログラムがある処理を実行している途中で、な
んらかの異常が発生すること
0 division
Null Pointer Exception
Array Index Out of Bounds Exception
Class Not...
例外
throw new <Exception>で例外を投げる
try / catchでエラーハンドリング
48Saturday, September 7, 13
演習: 例外
JavaやScalaの実行時にも以下のようにいろいろな例外が発生します。以
下のような例外をハンドルするようなプログラムを書いてください
null.toString
java.lang.NullPointerException
1...
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
File Read
やっぱJavaはめんどくさい
51Saturday, September 7, 13
File Write
PrintWriterを使いました
52Saturday, September 7, 13
演習: ファイル処理
text fileを読み込んで行番号をつけて別のファイ
ルとして書きだすプログラムを書く
53Saturday, September 7, 13
スケジュール
第1回: イントロダクション(授業の概要と進め方)
第2回: Java言語の基礎的知識の確認
第3回: クラスとオブジェクト1:オブジェクトの基礎
第4回: クラスとオブジェクト1:オブジェクトの基礎(演習)
第5回: クラスとオ...
Threadとは
スレッド(thread)とは、CPU利用の単位。プ
ロセスに比べて、プログラムを実行するときの
コンテキスト情報が最小で済むので切り替えが
早くなる。スレッドは、thread of execution(実
行の脈絡)という言葉...
Threadとは
処理の分割の単位
Computer
Process
Thread
Thread
Memory Space
Process
Thread
Thread
Memory SpaceMemory
CPU
CPU
56Saturday,...
Thread
ScalaではActorを使うのが定石
57Saturday, September 7, 13
Actor
Message Queueを持ち、メッセージを逐次処理
できるThread
Threadとして実行される
メールボックス(キュー)にメッセージを受信する
メールボックスからメッセージを取り出して処理、またパターンマッ
チでメッセージ...
おまけ: Web Framework
Play - かんたん
http://www.playframework.com/
Struts - ふるい
http://struts.apache.org/
Spring - むずい
http://ww...
おまけ: ポインタ?
Stackにある変数はHEAPにあるオブジェクトへの参照(ポインタ)
(*)プリミティブ型はStack領域に値を持つ
HEAPStack
s
String Object
“test”
n Null
GCにより掃除される
6...
おまけ: jvisualvm
javaのプロセ
スの確認やモ
ニタリングが
できるツール
61Saturday, September 7, 13
演習: 素数の確認
与えられた値が素数かどうかを確認する関数
isPrime(n : Int) : Booleanを作る
Example
1 => false
2 => true
3 => true
4 => false
62Saturday,...
演習: 素因数分解
引数で与えられたIntに対して素因数分解をして
結果をStringで返す関数を作る
Example: 99999 = 3 * 3 * 3 * 3 * 41 * 41 * 271 *
271
63Saturday, Septe...
演習: エイト・クイーン
エイト・クイーンのプログラムを作る
http://ja.wikipedia.org/wiki/エイト・クイーン
(ヒント)碁盤をBooleanの2次元配列で表現して
置ける場所を表現、後は力ずくで計算すれば…
(上級編...
Upcoming SlideShare
Loading in …5
×

早稲田大学授業 - Java Programing上級

2,059 views

Published on

Scalaで説明したJavaの授業

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,059
On SlideShare
0
From Embeds
0
Number of Embeds
913
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

早稲田大学授業 - Java Programing上級

  1. 1. Scalaやろうぜ Java Programing上級 講師: 有田一平@Cambridge Energy Data Lab 1Saturday, September 7, 13
  2. 2. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 2Saturday, September 7, 13
  3. 3. 講師紹介 有田一平 現職はArchitect@Cambridge Energy Data Lab, Ltd 前職はグリー株式会社、JPモルガン証券 株式会社 名古屋出身 趣味はアウトドアスポーツ 2005年早稲田大学人間科学部卒業 github: @peisan twitter: @ippeeeee 3Saturday, September 7, 13
  4. 4. 皆さんの事も教えて下さい :-) 名前 受講した理由 趣味 出身 などなんでも 生徒自己紹介 4Saturday, September 7, 13
  5. 5. 講義の目的 本科目では、インターネットにおいて主力のプログラミング言 語の一つとなっているJava言語をもとにプログラミングの応用 なスキルを身につける。授業は、講義・演習のサイクルの繰り 返しで行われる。講義では、まずオブジェクト指向の基礎を学 び、続けてJavaプログラミングの概念(例外処理、ファイル入 出力、スレッド、ネットワークなど)について知識を習得す る。演習では講義内容をふまえて実際にプログラミングを行 う。第13回—15回では自身でテーマを決めて、学習したプログ ラミングスキルを活用してソフトの作成を行う。 5Saturday, September 7, 13
  6. 6. 提案: Scalaやりませんか ScalaはイケてるJava JVM上で動くプログラミング言語(という意味ではJavaの一種) Javaのライブラリがそのまま使えます(ので基本的にJavaでできること は全部できる) 記述が簡単で、すぐに覚えられるので学習用途に最適 イメージ的にはJavaの進化系(Java 20くらい) オブジェクト指向言語かつ関数型言語 6Saturday, September 7, 13
  7. 7. Javaの特徴 Java JVM(Javaの実行環境)上で動く、強い静的 片付け、オブジェクト指向言語、文法が厳しい 一方Script言語(Python, Ruby, Perl)は 動的型付け、インタープリタ、文法が緩い 7Saturday, September 7, 13
  8. 8. Scalaを使っている会社 8Saturday, September 7, 13
  9. 9. JVM How does Scala work? hello.java hello.class javac java Hello! hello.scala hello.class scalacscala Hello! OS 9Saturday, September 7, 13
  10. 10. Java vs Scala Hello.java Hello.scala やっぱりJavaは冗長すぎる Scalaだとコードの量は半分くらいになります 10Saturday, September 7, 13
  11. 11. Hello.javaを作って実行しよう Hello.javaファイルをエディタで開く(e.g. #vim Hello.java) Helloクラスを作る main methodを作る compile する(#javac Hello.java) 実行する (#java Hello Fujikura) 11Saturday, September 7, 13
  12. 12. Javaは面倒くさい Editorで長いコードを 書き書きして javacでコンパイルして classファイル作って javaで実行 12Saturday, September 7, 13
  13. 13. ScalaならREPLで楽々 コマンドラインで確認しながら 楽々実行もできます 13Saturday, September 7, 13
  14. 14. 提案: JavaとScalaを 対比しながらScalaで実装 あくまでも効率のよいJavaとして利用 実装はScalaでサクサクやりましょう 14Saturday, September 7, 13
  15. 15. Java7のインストール JDK7をインストール http://www.oracle.com/technetwork/java/javase/downloads/ index.html 環境変数 (~/.profileとかに) export JAVA_HOME=/Library/Java/JavaVirtualMachines/ jdk1.7.0_21.jdk/Contents/Home/ export PATH=$PATH:$JAVA_HOME/bin 15Saturday, September 7, 13
  16. 16. Scalaのインストール XcodeのCommand Line Toolsをインストール Preference -> Downloads -> Command Line Tools 16Saturday, September 7, 13
  17. 17. Scalaのインストール Homebrew(http://brew.sh/)でgitとScalaとsbtのインストール ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)" #brew install git scala sbt --with-docs Proxy設定 ダウンロードが上手く行かない場合は以下を試してみてください export https_proxy=www-proxy.waseda.jp:8080 export http_proxy=www-proxy.waseda.jp:8080 環境変数 export SCALA_HOME=/usr/local/Cellar/scala/2.10.1/ 17Saturday, September 7, 13
  18. 18. Hello.scalaを作って実行しよう Hello.scalaファイルをエディタで開く(e.g. #vim Hello.scala) Helloオブジェクトを作る main methodを作る compile する(#scalac Hello.java) 実行する (#scala Hello Fujikura) 18Saturday, September 7, 13
  19. 19. GitHubの設定 GitHubとは gitという分散バージョン管理 システムのWebでのコラボ レーションツール My Account https://github.com/peisan 授業のRepository https://github.com/peisan/ WasedaAdvancedJavaClass 19Saturday, September 7, 13
  20. 20. GitHubの使い方 授業のRepositoryを自分の RepositoryにFork Local PCにcloneする 課題の提出は授業の RepositoryにPull Requestで 行う Someone’s Repository Local Repository clone My Repository My Local Repository clone github.com Local PC Push Pull Request Fork 20Saturday, September 7, 13
  21. 21. GitHub Tutorial Tutorial http://git-scm.com/docs/gittutorial Video http://git-scm.com/videos gitの使い方を1ステップずつ学べるサイト http://try.github.io 21Saturday, September 7, 13
  22. 22. IDE: IntelliJ IDEA IDE (Integrated development environment) シンタックスハイライト、デバッグ機能、補完機能などを備えた 統合開発環境 IntelliJ IDEAのダウンロード(FreeのCommunity Editionで十分) http://www.jetbrains.com/idea/ Projectの準備 $sbt compile $sbt gen-idea gen-ideaで生成されたprojectをOpen 22Saturday, September 7, 13
  23. 23. Scala Plugin plugins -> Browse RepositoriesからScala Pluginのインストール 23Saturday, September 7, 13
  24. 24. Scala Compiler CompilerからUse External Compilerのチェックを外す Compiler -> Scala Compilerからインストールしたscala 2.10.2を選択 24Saturday, September 7, 13
  25. 25. Java Tutorials 「Java 1 はじめてみようプログラミング」 「Java 2 アプリケーションづくりの初歩」 サポートページ http://mitani.cs.tsukuba.ac.jp/book_support/java/ 25Saturday, September 7, 13
  26. 26. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 26Saturday, September 7, 13
  27. 27. Main Method 一番初めに書くいつものやつです 27Saturday, September 7, 13
  28. 28. 変数定義 valで定数宣言 varで変数宣言 : <Type>で型指定(しな くてもよい) final修飾子で定数宣言 修飾子なしで変数宣言 宣言時の型指定は必須 28Saturday, September 7, 13
  29. 29. 変数の型 Java (Primitive/Class) Scala (Classのみ) 型なし なんでも 文字 文字列 4Byte整数 8Byte整数 4Byte浮動少数 8Byte浮動少数 真偽値 配列 void / Void Unit NA / Object Any char / Character Char NA / String String int / Integer Int long / Long Long float / Float Float double / Double Double fool / Boolean Boolean array / Array Array 29Saturday, September 7, 13
  30. 30. 条件分岐 if文はJavaと同じ match文を使うとより簡潔 に書けます 30Saturday, September 7, 13
  31. 31. ループ 1から10まで出力するだけの単純なループ for文も一行でスッキリ豆知識: toとuntilはInt 型のmethod 31Saturday, September 7, 13
  32. 32. 実習: FizzBuzz 以下のルールに従って1から100までの文字列を出力するプログラムを作る 3で割り切れる場合は 「Fizz」、5で割り切れる場合は 「Buzz」、両者 で割り切れる場合は 「Fizz Buzz」 完成したらPull Requestを出してみましょう https://help.github.com/articles/using-pull-requests 32Saturday, September 7, 13
  33. 33. 関数定義 Hello or Gaoと出力する関数 def <関数名>(引数) : <返り値の型> = {<関数の式>}で宣言 返り値の型は省略可 33Saturday, September 7, 13
  34. 34. 実習: Count関数 与えられたArrayの要素数を数える関数を作る Object名: CountArray 関数名: Count 引数: Array[Int] 返り値: Int 与えられたArrayの中で3の倍数と5の倍数の要素数を数える関数をつくる 関数名: CountIfFactorOfThreeOrFive (上級編)与えられたArrayの中で 任意の条件式に一致する要素数を数える関数を作る(カリー化) 関数名: CountIf 34Saturday, September 7, 13
  35. 35. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 35Saturday, September 7, 13
  36. 36. オブジェクト指向とは? オブジェクト同士の相互作用として、システムの振る 舞いをとらえる考え方である オブジェクトとは? 属性(変数)と振る舞い(関数やMethod)を持 つ オブジェクト指向のテクニック カプセル化 多様性 継承 36Saturday, September 7, 13
  37. 37. オブジェクトの生成 Human firstName lastName age getName() Class (Type) New New Human Object 1 firstName => Ippei lastName => Arita age => 31 getName() => “Ippei Arita” Human Object 1 firstName => Shigeki lastName => Fujioka age => 22 getName() => “Shigeki Fujioka” Human Object 1 firstName => Shohei lastName => Fujikura age => 23 getName() => “Fujikura Shohei” New 37Saturday, September 7, 13
  38. 38. オブジェクトの基礎 38Saturday, September 7, 13
  39. 39. オブジェクトの基礎 Animal Class name : 動物の名前 kind : 動物の種類 say() : nameとkindを含む文字列を出力 39Saturday, September 7, 13
  40. 40. 演習: オブジェクトの基礎 以下のように定義されたBook Classを作成 Book title : 本のタイトル author : 本の著者 description() : titleとauthorを含む文字列を返す Bookクラスから任意のtitleとauthorを持ったオ ブジェクトを作成してdescriptionを出力 40Saturday, September 7, 13
  41. 41. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 41Saturday, September 7, 13
  42. 42. 継承とは? スーパークラスの構造と機能がサブクラスにその まま引き継がれる スーパークラスを継承したサブクラスは、そのク ラスと同等の型としての使用が可能になる Animal name kind say() スーパークラス (親クラス) 継承 (extends) Dog name kind(上書き) say() bark()(追加) サブクラス (子クラス、派生クラス) スーパークラスの属性と 振る舞いを受け継ぎつ つ、サブクラスで上書き または追加ができる 42Saturday, September 7, 13
  43. 43. 継承 Dog Class (Animal Classを継承) name : 動物の名前 kind : 動物の種類(Dogで固定) say() : nameとkindを含む文字列を出力 bark() : Wan!と吠える 43Saturday, September 7, 13
  44. 44. 演習: 継承 以下のように定義されたCat Classを作成 Cat Class (Animal Classを継承) name : 動物の名前 kind : 動物の種類(Catで固定) say() : nameとkindを含む文字列を出力 bark() : Nyan!と吠える 44Saturday, September 7, 13
  45. 45. 演習: 継承応用編 以下のルールに従って任意のスーパークラス及び サブクラスを作成 スーパークラスは一つ以上の属性及び振る舞いを持つ サブクラスは一つ以上の独自の属性及び振る舞いを持つ サブクラスはスーパークラスの属性と振る舞いを一つ以上上書き (override)する サブクラスは2つ以上定義する サブクラスは2階層以上でもOK 45Saturday, September 7, 13
  46. 46. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 46Saturday, September 7, 13
  47. 47. 例外とは? プログラムがある処理を実行している途中で、な んらかの異常が発生すること 0 division Null Pointer Exception Array Index Out of Bounds Exception Class Not Found Exception 47Saturday, September 7, 13
  48. 48. 例外 throw new <Exception>で例外を投げる try / catchでエラーハンドリング 48Saturday, September 7, 13
  49. 49. 演習: 例外 JavaやScalaの実行時にも以下のようにいろいろな例外が発生します。以 下のような例外をハンドルするようなプログラムを書いてください null.toString java.lang.NullPointerException 123 / 0 java.lang.ArithmeticException Array(1,2,3)(4) java.lang.ArrayIndexOutOfBoundsException "abc".toInt java.lang.NumberFormatException 49Saturday, September 7, 13
  50. 50. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 50Saturday, September 7, 13
  51. 51. File Read やっぱJavaはめんどくさい 51Saturday, September 7, 13
  52. 52. File Write PrintWriterを使いました 52Saturday, September 7, 13
  53. 53. 演習: ファイル処理 text fileを読み込んで行番号をつけて別のファイ ルとして書きだすプログラムを書く 53Saturday, September 7, 13
  54. 54. スケジュール 第1回: イントロダクション(授業の概要と進め方) 第2回: Java言語の基礎的知識の確認 第3回: クラスとオブジェクト1:オブジェクトの基礎 第4回: クラスとオブジェクト1:オブジェクトの基礎(演習) 第5回: クラスとオブジェクト2:継承 第6回: クラスとオブジェクト2:継承(演習) 第7回: 例外処理 第8回: 例外処理(演習) 第9回: ファイル処理 第10回: ファイル処理(演習) 第11回: スレッド(演習) 第12回: スレッド(演習) 第13回: ミニプロジェクト 第14回: ミニプロジェクト 第15回: ミニプロジェクト発表 54Saturday, September 7, 13
  55. 55. Threadとは スレッド(thread)とは、CPU利用の単位。プ ロセスに比べて、プログラムを実行するときの コンテキスト情報が最小で済むので切り替えが 早くなる。スレッドは、thread of execution(実 行の脈絡)という言葉を省略したものである。 (Wikipediaより) 55Saturday, September 7, 13
  56. 56. Threadとは 処理の分割の単位 Computer Process Thread Thread Memory Space Process Thread Thread Memory SpaceMemory CPU CPU 56Saturday, September 7, 13
  57. 57. Thread ScalaではActorを使うのが定石 57Saturday, September 7, 13
  58. 58. Actor Message Queueを持ち、メッセージを逐次処理 できるThread Threadとして実行される メールボックス(キュー)にメッセージを受信する メールボックスからメッセージを取り出して処理、またパターンマッ チでメッセージを選択して処理をする 58Saturday, September 7, 13
  59. 59. おまけ: Web Framework Play - かんたん http://www.playframework.com/ Struts - ふるい http://struts.apache.org/ Spring - むずい http://www.springsource.org/javaconfig 59Saturday, September 7, 13
  60. 60. おまけ: ポインタ? Stackにある変数はHEAPにあるオブジェクトへの参照(ポインタ) (*)プリミティブ型はStack領域に値を持つ HEAPStack s String Object “test” n Null GCにより掃除される 60Saturday, September 7, 13
  61. 61. おまけ: jvisualvm javaのプロセ スの確認やモ ニタリングが できるツール 61Saturday, September 7, 13
  62. 62. 演習: 素数の確認 与えられた値が素数かどうかを確認する関数 isPrime(n : Int) : Booleanを作る Example 1 => false 2 => true 3 => true 4 => false 62Saturday, September 7, 13
  63. 63. 演習: 素因数分解 引数で与えられたIntに対して素因数分解をして 結果をStringで返す関数を作る Example: 99999 = 3 * 3 * 3 * 3 * 41 * 41 * 271 * 271 63Saturday, September 7, 13
  64. 64. 演習: エイト・クイーン エイト・クイーンのプログラムを作る http://ja.wikipedia.org/wiki/エイト・クイーン (ヒント)碁盤をBooleanの2次元配列で表現して 置ける場所を表現、後は力ずくで計算すれば… (上級編)Actorを利用して各パターンを並列に 試行するように変更する 64Saturday, September 7, 13

×