第2講:もっともシンプルな「時間割表示システム」をつくる(1)

その2 「授業の情報」を表示するプログラムを作成する

 その1では「時間割表示システム」を分析することによって、システムにとってもっとも重要な機能が「ユーザーに情報を提供すること」だということを確認しました。そして、このシステムが扱う情報の定義と、情報の提供を実現する方法についても明らかにしました。その2では、その結果得られた「授業の情報」を表示するプログラムの設計に従って作成を進めながら、Javaを用いてプログラムを作成する場合に共通して必要となる書式を習得します。

(1)「授業の情報」を表示するために必要な命令

 プログラムを作成するということは、あらかじめなされた設計に従ってプログラミング言語を用いながらコンピュータに対する命令を記述するということです。それではここでもう一度今回のプログラムの設計を見直してみましょう。

1)プログラム全体の目的:時間割という情報をユーザーに提供する。

2)このプログラムにおける時間割とは:1時限分の「授業の情報」

3)必要な仕事と手順:<1>「授業の情報」を定義する

           <2>「授業の情報」に具体的な内容を与える

           <3>「授業の情報」の内容をディスプレイに表示する

 この設計をプログラムとして実現するためには、いったいどのような命令を記述する必要があるのでしょうか。幸いなことに、Javaという言語には「必要な仕事と手順」の<1><2><3>それぞれに対応するような命令が用意されています。それぞれの命令を正しく記述できれば、ひとまずは「プログラム全体の目的」を実現することができそうです。ではJavaではどのようにこれらの命令を記述するのかを見てゆきましょう。

(2)Javaにおけるプログラムの書式とファイル名の注意事項

 個々の命令を記述する前に、いくつか知る必要のある注意事項を先に紹介しておきます。

 プログラムはテキストファイルの形式で記述・保存します。この点は普通の文書と変わりありません。しかしJavaを使ってプログラムを書く場合、その書式に関していくつかの約束事があります。まず第一に次の書式を覚えておいて下さい。

public class ABC{

	プログラムの内容は、すべて{}の内側に記述する

}

 黒字の部分がその書式に当たります。必ずプログラムの書き出しは「public class ABC { 」です。この書き出しの「{」に始まって、最後の「}」で囲まれる範囲の中にプログラムの内容を記述します。この書式はプログラムの外枠にあたるもと考えて差し支えないでしょう。「public class」の意味は後々説明しますが、いまは気にせず単なる書式の一部として「そう書くものだ」とだけ理解して下さい。

 緑字の「ABC」は、そのプログラムが保存されるファイル名に対応して記述されます。ところでこれはファイル名についての注意事項ですが、Javaのプログラムを記述したファイルには必ず「〜.java」という名前を付けて保存します。そして先ほどの「ABC」の部分にはファイル名「〜.java」のピリオドから前の「〜」の部分と全く同じ文字を記入するのです。だから例えばファイル名が「ProgramA.java」ならば書き出しは「public class ProgramA{」となるのです。

 さらにもう一つ、今のところ(その理由は第3講で説明しますが)コンピュータにさせたい仕事の命令は、先ほどの「外枠」の内側に次のような枠を設けてその中に記述して下さい。

public class ABC{
	public static void main( String args[] ){

		この{}の範囲内に命令を記述する

	}
}

 黒字の部分が内側の枠を表す書式です。この範囲内に書かれた命令を、コンピュータは上の行から順に行ってゆきます。この少々長い「public static void main( String args[] ){」という書き出しも今のところはあまり深く考えずにその通り記述して下さい。ということで、今回のプログラムの命令は、実際のところはすべてこの範囲の内側に記述されることになります。

(3)「授業の情報」を表示するプログラムの作成・1
   プログラム上での情報の扱い

 まずはじめに「授業の情報」をプログラム上で定義してみましょう。「授業の情報」とは、「時限」「科目名」「教室名」の3項目から成り立つ情報のことでした。人間が相手ならあるいはこれで十分な定義かもしれませんが、コンピュータはもう少し詳しい情報の分類を要求します。それは、これらの情報がいったいどのような種類の文字記号によって成り立っているのかということに関する分類です。早い話、コンピュータにとっは例えば「文字」と「数字」は全く別の種類の情報として認識されるのです。この分類のことを情報の「型(type)」と呼びます。

 この「型」の分類は使用するプログラミング言語ごとに独自になされています(但しそれほど言語ごとにバラバラなわけではありませんが)。それでは「時限」「科目名」「教室名」は、それぞれJavaではどのような分類を当てはめればよいのでしょうか。ここでは次のように考えてみましょう。

・「時限」 → 整数型(int
・「科目名」、「教室名」 → 文字列型(String

 Javaでは数字に関して「整数」と「小数」を区別して扱います(さらに小数にも分類があるのですがここでは触れません)。「時限」は当然「1時限目、2時限目、、、」なので「整数型」として扱います。また「文字」に関しても1文字1文字を単独で扱う場合と複数の文字をまとめて一つの単位として扱う場合とで区別が存在します。「科目名」「教室名」はそれぞれ複数の文字から成り立つ(つまり「情報処理」とか「i308」とか)ので、「文字列型」として分類します。()内の「int」「String」は、それぞれJavaにおける型の名前を表します。

 ここでは「授業の情報」の定義を、コンピュータに対して「時限」「科目名」「教室名」という3項目の情報を記憶するための場所を用意させることで行います。ある型を持った情報を記憶するための場所、比喩を使うならば「箱」、のことを一般に「変数」と呼びます。「変数」の用意は次のような書式によって行います。
型の名前 変数名;

「型の名前」とは先ほどの「int」や「String」のことです。変数(=情報を記憶する「箱」)には名前を付けます。「型の名前」はあらかじめJavaに用意されているもの(それ以外は受け付けない)ですが、「変数名」は自分で付けるものです。変数名は英文字で始まり32文字以内の範囲で考えます。あと、書式の最後にある「;」を忘れずにつけて下さい。これは一つの命令が終了することを表す区切りの記号で、どんな命令の最後にもつけるものです。

 ということで、これらの約束に基づいてプログラムを書いてみるとこのようになります。ここではプログラムを保存するファイル名を「ClassInfo.java」としました。

public class ClassInfo {
	public static void main(String args[]){

		/*「授業の情報」を定義する*/
		int no;		// 「時限」を記憶する変数
		String subject;	// 「科目名」を記憶するための変数
		String room;	// 「教室名」を記憶するための変数

	}
}

 プログラム中の「//」の記号はそこから先改行が行われるまではプログラムの記述とは見なさない(無視する)という意味です。また「/*」と「*/」に囲まれた部分も同じです。したがってこのように日本語を書き込んでおいても問題はありません。第1講でも少し触れた「コメント」というものです。また「no」「sbject」「room」はそれぞれ「変数名」にあたります。これで3つの項目を記憶するための記憶場所である変数が用意されました。 

(4)「授業の情報」を表示するプログラムの作成・2
   変数を利用した情報の記憶

 今度は用意したそれぞれの変数に「授業の情報」の具体的な内容を記憶させます。変数はあくまでも情報を記憶する「箱」ですから、ただ変数を用意するだけでは空の箱をおいておくようなものなのです。

 変数に対してそこに記憶されるべき具体的な情報のことを、プログラミングの世界では「値(あたい)」と呼びます。そして、変数に値を記憶させることを「代入」と呼びます。それでは「no」「subject」「room」のそれぞれに値を代入してみましょう。ちなみにここでは「授業の情報」を仮に「1時限目、情報処理、i308」と想定します。値の代入は次のように行います。
変数名 = 変数の値;

 ただし変数の値が文字列の場合には

変数名 = "変数の値";

 というふうに変数の値を" "で囲む

 例えば「no = 1;」と書けば、空だった「no」の中に「1」という値が入ります。それではプログラムの続きを書いてみましょう。

public class ClassInfo {
	public static void main(String args[]){

		/*「授業の情報」を定義する*/
		int no;		// 「時限」を記憶する変数
		String subject;	// 「科目名」を記憶するための変数
		String room;	// 「教室名」を記憶するための変数

		/*「授業の情報」に具体的な内容を与える*/
		no = 1;			// 「時限」に「1」を代入
		subject = "情報処理";	// 「科目名」に「情報処理」を代入
		room = "i308";		// 「教室名」に「i308」を代入

	}
}

 注意しなければならないのは、「=」の記号は数学の等号記号ではなくあくまでも左辺の変数に対する右辺の値の代入を命令する記号である、ということです。このことは、この違いが大きな意味を持つ場面が出てきたときに再び確認します。また、型名の記号(int, String)が必要なのはその変数を初めて記述するときだけです。

(5)「授業の情報」を表示するプログラムの作成・3
   文字をディスプレイに表示する
 文字や数字をディスプレイに表示させたい場合、Javaでは次のような命令を使います。
System.out.print("表示させたい文字・数字");

「" "」で囲まれた範囲内に、ディスプレイに表示させたい文字・数字を直接書き込むのです。また、命令の「.print」の部分を「.println」とすれば、単に文字・数字を表示するだけでなく表示を終えた後で改行も行ってくれます。さらに次のように記述すると、現在変数の中に記憶されている値を表示してくれます。
System.out.print(変数名);

 例えば現在作成中のプログラムでいえば、「System.out.println( no );」ならば、変数「no」の中にある値「1」を表示し、改行を行ってくれるのです。今回の場合、3つの情報を改行しながら「時限」「科目名」「教室名」の順に3行にわたって表示させたいとします。するとプログラムはこうなります。

public class ClassInfo {
	public static void main(String args[]){

		/*「授業の情報」を定義する*/
		int no;		// 「時限」を記憶する変数
		String subject;	// 「科目名」を記憶するための変数
		String room;	// 「教室名」を記憶するための変数

		/*「授業の情報」に具体的な内容を与える*/
		no = 1;			// 「時限」に「1」を代入
		subject = "情報処理";	// 「科目名」に「情報処理」を代入
		room = "i308";		// 「教室名」に「i308」を代入

		/*「授業の情報」の内容をディスプレイに表示する*/
		System.out.println(no);		// 「時限」の値を表示して改行
		System.out.println(subject);	// 「科目名」の値を表示して改行
		System.out.println(room);	// 「教室名」の値を表示して改行

	}
}

 これで、当初設計の段階で想定した3つの仕事を順序通りにプログラムとして書いたことになるわけです。果たしてこれがちゃんと目的を達するプログラムであるのかどうかは、コンピュータにこのプログラムを読ませ、その通りに動いてもらわなければ分かりません。そこでつぎの「その3」では、その方法を紹介し、このプログラムを評価します。


リンク:

<全体のトップページ>

     |

<第2講のトップページ>

     |-------------------------|-------------------------|

<第2講・その1>      <第2講・その2>      <第2講・その3