キーワード辞典
物凄く乱暴なJava for全商1級+

登録日 14/09/10  更新日 16/10/25



物凄く乱暴なJavaに関する用語(オブジェクト的なこと)

詳しくは公式マニュアルをお読みください。
Javaって、こんな風にも書ける、とか、こうとも言う、とか、色々有るので、 以下は雰囲気だけのざっくりとした説明です。
作成中です。ミス有ったら後免。


インタフェース


インタフェース

物凄く乱暴に言うと、抽象クラスの内容を全て抽象化し、クラスでさえ無くしたもの。
継承で起きる様な上下関係が無く、 1つのクラスが複数のインタフェースを使う事も出来る。 クラスが「モノ」としてより独立(カプセル化、隠蔽)し、 処理は「モノ」が持つ共通のインタフェースを通して遣り取り(ポリモーフィズム)、という形になる。 プログラムがモジュール化し易く、使い回しし易いので大きなシステムに便利だが、 インタフェースを変更することは関係するクラスに大きな影響を与える為、 あらかじめ、インタフェースをきちんと設計をしておかねばならない。
現在存在するプログラムに対し、 これから新しく作られるプログラムのメソッドの仕様を統一するためのもの。

下の例ではインタフェースを使っているが、 インタフェースが良くて抽象クラスはダメ、と言う訳では無く、 抽象クラス、インタフェース、それぞれに特徴がある為、 場合によって上手く使い分ける事が重要。
その1
かなり無理矢理な、扉の例のサンプルプログラム
例えば、回転扉とかシャッターとか、新しいタイプのドアが出て来た時も、 新しいクラスに、 インタフェースに書かれた名前と仕様に合わせたメソッドや定数で動作を定義することで、 既存のクラスと連携が出来る、と、いうこと。

今回は動作確認なので、あくまでもシンプルにしてあります。
pushDoor() や、rightDoor()、leftDoor() とか upDoor()、downDoor()、など、 共通する色々な動作に対する結果(開く、開かない、壊れる、など)を設定すれば、 アドベンチャーゲームっぽくなるかも。

ドアを操作するメソッドの名前と仕様を定義するインタフェース
ドアに対する動作は、openSesami() 、closeSesame() 、infoDoor() の3つ。
インタフェースで書かれたメソッドは、 必ず implements されたクラスの中で定義しなければならない。
// door_Interface				2013.5.28	By Ryn

public interface door_Interface {
	public void openSesame();
	public void closeSesame();
	public void infoDoor();
}

引き戸(横にずらして開けるドア)を定義するクラス
// Hikido_3.java			2013.05.28	by Ryn

public class Hikido_3 implements Door_Interface{

	protected String name;
	protected String type;
	protected Boolean open = false;

	public Hikido_3(String name) {			// コンストラクタ
		this.name = name;
		type = "引き戸";
	}


	public void openSesame() {

		if( ! open ){
			System.out.println(name + "の" + type + "が、右に動いて開きました");
				open = true;
			}else
				System.out.println(name + "の" + type + "は、既に開いています");
		}


	public void closeSesame() {

		if( open ){
			System.out.println(name + "の" + type + "が、左に動いて閉まりました");
				open = false;
			}else
				System.out.println(name + "の" + type + "は、既に閉じています");
	}


	public void infoDoor() {

		if( open )
			System.out.println(name + "の" + type + "は、開いています");
		else
			System.out.println(name + "の" + type + "は、閉じています");
	}
}

開き戸(手前に引いて開けるドア)を定義するクラス
// Hirakido_3.java			2013.05.28	by Ryn

public class Hirakido_3 implements Door_Interface{

	protected String name;
	protected String type;
	protected Boolean open = false;

	public Hirakido_3(String name) {			// コンストラクタ
		this.name = name;
		type = "開き戸";
	}


	public void openSesame() {

		if( ! open ){
			System.out.println(name + "の" + type + "が、手前に動いて開きました");
			open = true;
		}else
			System.out.println(name + "の" + type + "は、既に開いています");
	}


	public void closeSesame() {

		if( open ){
			System.out.println(name + "の" + type + "が、向こうに動いて閉まりました");
			open = false;
		}else
			System.out.println(name + "の" + type + "は、既に閉じています");
	}


	public void infoDoor() {

		if( open )
			System.out.println(name + "の" + type + "は、開いています");
		else
			System.out.println(name + "の" + type + "は、閉じています");
	}
}

扉をコントロールするクラス
書斎は開き戸、玄関と和室は引き戸。
7行目、door_Interface というインタフェースを持つ door というオブジェクトが配列で3つ作られ、 openSesame() や closeSesame() といった同じ名前のメソッドで、 クラスによって、引き戸、開き戸、それぞれの処理が出来る。
ドアを配列にすると、有難味が増す。
import java.util.Scanner;

// Alibaba_3		2013.05.28	by Ryn

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

		Door_Interface door[] = new Door_Interface[2];

		door[0] = new Hirakido_3 ("寝室");
		door[1] = new Hikido_3("和室");

		Scanner sc = new Scanner(System.in);

		int command;
		System.out.println("1 = Open Sesame!   2 = Close Sesami!   3 = info   0 = End");

		while(( command = sc.nextInt()) != 0 ) {
			switch(command){
				case 1:
					for (int i = 0 ; i < 2 ; i++)
						door[i].openSesame();
					break;
				case 2:
					for (int i = 0 ; i < 2 ; i++)
						door[i].closeSesame();
					break;
				case 3:
					for (int i = 0 ; i < 2 ; i++)
						door[i].infoDoor();
					break;
				default:
					break;
			}
		}
		sc.close();
		System.out.println("終了");
	}
}






[ 黒板消しとチョーク受けの画像 ]