講義の概要
この講義では、プログラミングの基本を学ぶと同時に標準的なプログラミングツールの使い方に習熟することを目指す。
参考書
参考書を3冊挙げる。1や2は比較的やさしく初心者向きで自習教材に適している。3はJavaによるプログラミングの経験を少し積んだ後に読むと面白いが、初心者には難しい。
- 結城 浩 著「Java言語プログラミングレッスン」上(Java言語をはじめよう)、下(オブジェクト指向をはじめよう)、SOFTBANK.
- 高橋 麻奈 著「やさしいJava」ソフトバンクパブリッシング
- キャシー シエラ, バート ベイツ 著「Head First Java―頭とからだで覚えるJavaの基本」オライリージャパン
Javaとは何か? (What's Java?)
Javaはプログラミング言語のひとつである。Javaはオブジェクト指向のプログラミング言語であるが、春学期は、その他の多くの言語に共通する手続き的なプログラム書法を学ぶ。オブジェクト指向、スレッド、グラフィックスのプログラミングは秋学期に学ぶ予定である。
Javaの利用例
Javaは様々な場面で利用される。
- インターネットでのサービス、商取引を実現する情報システムのソフトウェア
- 携帯電話のソフトウェア
- i-Appli, Java Appli
- いろいろなコンピュータで動くソフトウェア
- Mac, Windows, Linuxなどで共通に動く
Java言語でのプログラムの作成から実行まで (The Process of Java Programming)
プログラムの作成から実行までには以下のステップが必要である。
- ソースプログラム(source program)を書く
- → ソースプログラムファイル(java file)
- コンパイル(compile)を行う
- → クラスファイル(class file)
- 実行する
- (うまく動かなかったら→)ステップ1に戻ってソースプログラムの誤りを修正し、先と同じステップをたどる。
ソースプログラムを書く (Write a Source Program)
たとえば
public class Hello { public static void main(String[] args) { System.out.println("Hello!"); } }
という内容のファイルを作成する。Javaのプログラムは、このように
public class Hello
という形で始まる。これはHelloという名前のclassのプログラムであることを表す。publicやclassの意味はおいおい説明する(今は、いつもこのように書くとだけ覚えておけばよい)。このプログラムをファイルとして保存するときには、Hello.javaという名前のファイルとする。すなわち、ファイルの名前はclass名に”.java”を付けたものでなければならない。このファイルは、以後のコンパイル処理のもと(sourceソース)になるのでソースファイルと呼ばれ、このファイルの中身であるプログラムはソースプログラムと呼ばれる。
コンパイルを行う (Compile a Program):
ソースプログラムは文字列であるに過ぎないから、ソースプログラムを作っただけでは、計算機で実行することは出来ない。ソースプログラムを計算機で実行できる形に変換する必要がある。その作業がコンパイルである。
ソースファイルHello.javaのコンパイルを行うには
javac Hello.java
と入力する(と参考書には書かれているが、本講義ではEclipseというソフトを使うので少し違う)。その結果、ソースプログラムに誤りがなければ、ソースプログラムがjavaのコンパイラによってコンパイルされて、Hello.classというファイルが作られる。これが計算機で実行できる形のものであり、オブジェクトプログラムまたはオブジェクトファイルと呼ばれる。ここでの「オブジェクト」はコンパイラが作り出す「目的」の物という意味で、「オブジェクト指向」のオブジェクトとは関係ない。
実行する (Run a Program):
Hello.classというファイルをプログラムとして実行するには
java Hello
と入力する(と参考書には書かれているが、本講義ではEclipseというソフトを使うので少し違う)。これによって
public static void main(String[] args) { System.out.println("Hello!"); }
の部分が(実行できる形に変換されたものが)実行される。System.out.printlnは括弧の中に書かれた文字列を表示するという命令を表し、その結果、画面に
Hello!
と出力される。
プログラムの構造
プロジェクト
プロジェクトとは、ある目的で作成したプログラム全体のことである。先ほどの例 "Hello.java" では、ソースプログラムファイルを一つしか用意しなかったが、大きなプロジェクトではソースプログラムファイルをたくさん用いる場合が多い。
一つのプロジェクトは、たいてい次のようなものを含む。
- パッケージ
- 階層的にソースプログラムファイルを格納しておくための箱
- クラス
- 各ソースプログラムファイルに一つ存在する、メソッドなどをまとめて宣言するためのブロック
- メソッド
- いくつかの命令の束ねて1つの命令として実行できるようにする仕組み
- 命令文
- プログラムに与える指示
パッケージ
パッケージとは、階層的にソースプログラムを格納しておくための箱のことである。階層的に配置できるため、ソースプログラムの管理がしやすくなるという利点がある。
- 関連性のあるクラス(ソースプログラム)は同じパッケージに置く
クラス
クラスとは、各ソースプログラムファイルに一つは存在する、メソッドなどをまとめて宣言するためのブロックのことである。先ほど例を挙げた"Hello.java"について見てみることにする (説明のため、行を表す番号を付与している)。
1: public class Hello { 2: public static void main(String[] args) { 3: System.out.println("Hello!"); 4: } 5: }
1行目の"public class Hello {"はHelloというクラスの開始を表している。そして、5行目の"}"でHelloというクラスの終了を表している。クラスの範囲は "{" から "}" で囲まれた部分(ブロック)で有効であり、その中に "public static void main(String[] args)" というメソッドを宣言している。
メソッド
メソッドとは、いくつかの命令の束ねて1つの命令として実行できるようにする仕組みのことである。先ほど例を挙げた"Hello.java"について再度見てみることにする。
1: public class Hello { 2: public static void main(String[] args) { 3: System.out.println("Hello!"); 4: } 5: }
2行目の"public static void main(String[] args)"はmain(String[])というメソッドの開始を表している(詳しくは今後の授業で触れる)。そして、4行目の"}"でmain(String[])というメソッドの終了を表している。メソッドの範囲は "{" から "}" で囲まれた部分(ブロック)で有効であり、その中に "System.out.println("Hello");" という命令を記述している。先の例では命令は1行しかなかったが、複数の命令を連続して記述することも可能である。
命令文
命令文とはプログラムに与える指示のことである。メソッド内に連続して記述され、上から順番に実行される。
例を挙げると、「aという箱を作り、その中に1+2の結果を格納」「aの箱の中身を表示」という一連の命令は次のように表される (これらの意味については2回目で詳しく説明する)。
public class Hello { public static void main(String[] args) { int a = 1 + 2; System.out.println(a); } }
プログラムの動き
作成したソースプログラムを実行させると、そのソースプログラム内にある"public static void main(String[])"というメソッドが開始される。このメソッド内に書かれた命令列が、上から下に順番に解釈され実行されていくことになる。
ただし、命令を上から下のみではなく、違うパスを通って実行させることもできる。これらは本授業の中でおいおい紹介する。
- 条件分岐 (第03回)
- ループ (第04回)
- 手続き呼び出し (第07回)
命令文の紹介
今回は、「文字列を表示する」という、単純な命令を紹介する。
文字列の表示
次の2種類の命令を使うと、好きな文字列を画面上に表示させることができる。
- System.out.print("好きな文字列");
- System.out.println("好きな文字列");
"System.out.print"と"System.out.println"の違いは、前者は指定した文字列を表示するのみであるのに対し、後者は指定した文字列を表示した後、次回以降の表示を次の行の先頭からにする (改行する)。
つまり、
System.out.print("Hello, "); System.out.print("world!");
では
Hello, world!
と表示されるのに対し、
System.out.println("Hello, "); System.out.println("world!");
では
Hello, world!
と表示される。
文字列
単純に文字列と表記してきたが、文字列とは「"」で始まり「"」で終わる文字の列のことを表す。文字列の例を挙げると以下のようなものがある。
- "" (空の文字列)
- "a" (a)
- "こんにちは" (こんにちは)
「文字列とは「"」で始まり「"」で終わる文字の列」という文字列を使用する場合、そのままではコンパイラは次のように解釈する。
- "文字列とは「"(文字列) / 」で始まり「(不明)/ "」で終わる文字の列"(文字列)
「 で始まり 」という部分は文字列でないため解釈することができず、通常はコンパイルが失敗する。そこで、「"」の代わりに「\"」という記号を用いることによってこの問題を回避できる (「\」は環境によってはバックスラッシュ文字に見えたり円記号に見えたりする)。
System.out.println("文字列とは「\"」で始まり「\"」で終わる文字の列");