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