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

その1 「授業の情報」のひな形を「授業表」として登録する

 ここでは「授業の情報」を構成する3つの情報(「時限」「科目名」「教室名」)をプログラム上でひとまとめに扱えるように「ひな形」(テンプレート、あるいは型枠)として登録する作業をします。登録した「ひな形」をここでは「授業表」と呼びます。「授業表」を登録しておけば、それをもとにより簡単に複数の「授業の情報」を作成することができます。 

(1)なぜ「授業表」が必要か

 前回の講義では、この講座のテーマである「時間割表示システム」が扱うことになる「時間割」という情報の定義を行いましたこちらを参照)。そしてまた、この定義の中で「時間割」を構成する情報の最小単位となる、1回分の「授業の情報」を表示するプログラムを作成してみました。

 これから先は「授業の情報」を徐々に「時間割」へと近づけてゆかなければなりません。その際に「ひな形を登録する」という発想は非常に重要となってきます。

 例えば前回のプログラムを2回分の「授業の情報」を表示するように拡張したい場合を考えてみます。前回表示したのは「1時限、情報処理、i308」だけでしたが、それに加えて「2時限、民法、e307」を表示させるにはどうすればよいでしょうか。

 もちろんこのように書き換えれば問題なく表示が行われます。

/* 2回分の「授業の情報」を表示するプログラム*/
public class ClassInfo {
	public static void main(String args[]){

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

		int no2;		// 「時限2」を記憶する変数
		String subject2;	// 「科目名2」を記憶するための変数
		String room2;		// 「教室名2」を記憶するための変数

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

		no2 = 2;		// 「時限2」に「2」を代入
		subject2 = "民法";	// 「科目名2」に「民法」を代入
		room2 = "e307";	// 「教室名2」に「e307」を代入

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

		System.out.print("時限:");
		System.out.println(no2);	// 「時限2」の値を表示して改行
		System.out.print("科目名:");
		System.out.println(subject2);	// 「科目名2」の値を表示して改行
		System.out.print("教室名:");
		System.out.println(room2);	// 「教室名2」の値を表示して改行
	}
}

 少しだけ補足説明をしておくと、一つの変数には一つの値しか入らないという原則があります。つまり「int no」に「1」と「2」という別の値を同時に入れようとしても無理なのです。だから、「1時限、情報処理、i308」用と「2時限、民法、e307」用にそれぞれ別の変数のセットを用意したのです。

 このやり方だと1週間すべての「授業の情報」を扱うのは非常に大変です。そこでもしコンピュータにあらかじめ「授業の情報=時限+科目名+教室名」と教え込んでおいて、直接「授業の情報1」「授業の情報2」という単位で情報を扱うことができれば、複数の「授業の情報」を扱う際により便利ですよね。

 Javaではそれを「ひな形」を登録するというやり方で実現することができるのです。ここから先はそのやり方を学習してゆきます。

(2)「授業表」と「授業の情報」の関係

 これから「授業の情報」のひな形を作り登録するやり方を学びます。ところで、ここからしばらくは説明の便宜上、このひな形のことを「授業表」と呼ぶことにします。それに対して「1時限、情報処理、i308」や「2時限、法学、e307」といった個々の具体的な情報のことを「授業の情報」と呼ぶことにします。

 プログラムを書く前にあらかじめ「授業表」と「授業の情報」の関係を整理しておくと次のようになります。

授業表

時限

科目名

教室名
   ↓       ↓
  「授業の情報1」 「授業の情報2」
       
情報処理    法学
i308      e307

 「授業表」は「授業の情報」がどのような項目から成り立っているのかという設計図に当たります。個々の「授業の情報」は、必要になったときにその都度設計図を元に作られます。

(3)「授業表」の作成と登録

 それではさっそく「授業表」を作成・登録してみましょう。

 Javaでプログラミングをする場合、この「授業表」のようにある定型化された情報のひな形をたびたび作成します。その際にはひな形も「〜.java」ファイルにプログラムとして記述します。例えば「授業表」を「ClassTable.java」という名前のファイルとして記述する場合、まずは前回のプログラム同様以下のような「外枠」を記述します。

public class ClassTable{

}

 ただし前回作成したプログラムのように直接コンピュータに実行させるわけではなく、今回のようにあくまで情報のひな形として登録したい場合には、外枠の中に記述した「public void main(String args[]) {  }」は必要ありません。用意した「外枠」の中に、これから登録したい情報がいったいどんな要素で成り立っているのかを書けばよいのです。

 「授業の情報」は「時限」「科目名」「教室名」で成り立っていました。それらを「授業表の定義」として、変数の形式で記述します。

/* 「授業表」の定義 */
public class ClassTable{

	int no;		// 時限
	String subject;	// 科目名
	String room;	// 教室名

}

 記述すべきことはこれですべてです。これをひな形として登録します。やり方は、このファイルをひな形を利用しようとしているプログラム(今回の場合は「ClassInfo.java」)と同じディレクトリ(フォルダ)に保存し、コンパイルするというだけです。コンパイルが無事に終われば完成です。

(4)「授業表」の利用

 今度は完成した「授業表」をプログラムの中で利用してみます。例えば冒頭で紹介した2つの「授業の情報」を表示するプログラムを、「授業表」を利用する形式に書き換えてみましょう。

 一般的に「授業表」のようなひな形を利用して個々の「授業の情報」のような「実体」を作成する場合には次のような命令を記述します。ひな形のファイル名が「XXX.java」ならば、
XXX 実体名 = new XXX();

 「実体名」というのは変数名と同様に自分で好きな名前が付けられます。それ以外の部分は決まった書式です。だから例えば「授業表」から一つの「授業の情報」を作成したい場合には、「授業の情報」を表す適当な名前を考えて次のように書けばよいわけです。「授業の情報」を「info1」とすれば、記述は以下のようになります。
ClassTable info1 = new ClassTable();

 以上の命令が実行された時点で、「ClassTable」に記述された定義に従って「int no」「String subject」「String room」という3項目の情報の項目を持った「info1」がプログラム上に生まれます。ただしまだこの時点では、3項目には何の値も入っていません。

 では「info1」の「no」に「1」を代入したいときにはどうすればよいのでしょうか。一般的に、「実体」を構成する情報の項目を呼び出したいときにはこのようにします。
実体名.項目名

 「info1」の「no」に「1」を代入するならば、
info1.no = 1;

 同じく「info1」の「subject」に「情報処理」を代入するならば、
info1.subject = "情報処理";

 それらの内容を画面に表示したい場合は、
System.out.println(info1.no);
System.out.println(info1.subject);

 とします。

 それでは、コメントによって示された手順に従って、2つの「授業の情報」を表示するプログラムを実際に書いてみて下さい。

/* 2回分の「授業の情報」を表示するプログラム*/
public class ClassInfo {
	public static void main(String args[]){

		/*「ClassTable」を利用して2つの「授業の情報」を作る*/
		// 「info1」を作る
		// 「info2」を作る

		/*2つの「授業の情報」に具体的な内容を与える*/
		// 「info1」の「時限」に「1」を代入する
		// 「info1」の「科目名」に「情報処理」を代入する
		// 「info1」の「教室名」に「i308」を代入する

		// 「info2」の「時限」に「2」を代入する
		// 「info2」の「科目名」に「民法」を代入する
		// 「info2」の「教室名」に「e307」を代入する

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

		System.out.print("時限:");
		// 「info2」の「時限」の値を表示して改行する
		System.out.print("科目名:");
		// 「info2」の「科目名」の値を表示して改行する
		System.out.print("教室名:");
		// 「info2」の「教室名」の値を表示して改行する

	}
}

>>解答例のプログラム


リンク:

<全体のトップページ>

     |

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

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

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