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

その2 もっともシンプルな「時間割表示システム」を完成する

 ここでは先ほど作成した「授業表」(ClassTable.java)をさらに拡張して、一応の「時間割表示システム」の原型を完成します。いままでの「授業表」は「授業の情報」を構成する3項目を定型化しただけのものでした。こんどはそれに、「項目の内容をディスプレイに表示する」という操作を定型化して、「授業表」に加えます。

(1)操作を定型化して「授業表」に加える

 先ほどは「授業の情報」を作成するためのひな形として「授業表」を定義しました。その際に注目したのは「授業の情報」がどのような情報の項目から成り立っているかという点でした。「授業の情報」は必ず「時限」「科目名」「教室名」という3項目から成り立っているというところから、それらをひとまとめにして「授業表」というひな形を作ったのでした。

 ただし「授業表」を利用したプログラムを見ても、利用しない場合と比較して、それほど記述が簡潔になっているわけではありません。なぜなら各項目の値を代入したり、ディスプレイに表示したり、といった「操作」に当たる部分は相変わらず一つ一つの項目について行われているからです。

 Javaではひな形として定型化した情報を対象に行われる操作をも、ひな形の一部として定義することが可能です。例えば「授業表」というひな形の内容として、3つの情報の項目に加えて、「3つの各項目に値を代入する操作」や「3つの各項目をディスプレイに表示する操作」をあらかじめ書いておくことができるのです。それぞれの操作の手順と名前をひな形の中に登録しておき、ひな形を利用する側は操作の名前を呼び出すことで登録済みの手順を実行させることができれば、これまで以上にプログラムが効率よくかけるでしょう。

 このことを図にまとめると以下のようになります。

授業表

時限

科目名

教室名

<代入>:各項目に値を代入

<表示>:各項目を表示
   ↓            ↓
  「授業の情報1」    「授業の情報2」
          
情報処理       法学
i308         e307
<代入>        <代入>
<表示>        <表示>

(2)「授業表」に「各項目の内容をディスプレイに表示する操作」を加える

 今回は「授業表」の各項目を対象に行われる操作のうち、項目の内容をディスプレイに表示するという操作を定型化してひな形に加えます。「値を代入する操作」は少々難しい部分が出てくるので今回はやりません。

 やり方は「授業表」のファイルに決まった書式で操作の名前とその手順を記入するだけです。決まった書式とは以下のようなものです。

public void 操作名 (){

	操作の手順を記入
}

 それでは、操作名を「showData」として、各項目を表示する手順を記入してみましょう。

public void showData (){

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

 これを、「ClassTable.java」の中に加えます。

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

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

	/* 各項目を表示する操作 */
	public void showData (){

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

	}
}

 これでコンパイルをすれば、出来上がりです。

(3)「授業表」に加えた「操作」を利用する

もっともシンプルな「時間割表示システム」の完成

 さて、それでは先ほど「授業表」に加えた「各項目を表示する操作」をプログラムの中で利用してみましょう。

 利用のしかたは、先ほどひな形に登録された項目を呼び出す書式と似ています。ひな形から実体を作成した後、このように記述します
実体名.操作名();

 例えば「授業表」から作られた「info1」から先ほどの「showData()」を呼び出すならば、
info1.showData();

と書けばよいわけです。プログラムの中でこの命令が読まれると、「info1」のひな形の中にある「showData()」の操作手順がそのまま実行されます。

 ここまでくると、「授業の情報」を表示するプログラム「ClassInfo.java」がひな形の「ClassTable.java」を利用しながら、「ユーザーに授業の情報を提供する」という目的を実現しているという様子が明らかとなってきます。2つの要素が連携して全体の機能を果たしているという点で、これは立派な「システム」といえそうですね。

 それではコメントを頼りに「ClassInfo.java」を作成し、もっともシンプルな「時間割表示システム」を完成させて下さい。

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

		/*「ClassTable」を利用して2つの「授業の情報」を作る*/
		ClassTalbe info1 = new ClassTable();	// 「info1」を作る
		ClassTalbe info2 = new ClassTable();	// 「info2」を作る

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

		info2.no = 2;			// 「info2」の「時限」に「2」を代入する
		info2.subject = "民法";		// 「info2」の「科目名」に「民法」を代入する
		info2.room = "e307";		// 「info2」の「教室名」に「e307」を代入する

		/*2つの「授業の情報」の内容をディスプレイに表示する*/
		// 「info1」の内容を表示する
		// 「info2」の内容を表示する
	}
}

>>解答例のプログラム


リンク:
<全体のトップページ>

     |

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

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

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