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

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



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

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


ポリモーフィズム


ポリモーフィズム (Polymorphism)

大雑把に言えば、実体化したクラスの性質によって、 指定したメソッドの名前が同じでも、そのクラスに合わせた処理を行えるようにすること。
多態性、多相性、多様性とも呼ばれる。

例えば、両手が塞がっていて誰かに扉を開けて欲しい時に、 引き戸が有ったり、開き戸が有ったりして、それぞれ動作が違うが、 「扉を開けて!」という言葉で、扉が開く様にすること。
乱暴に言えば自動ドア。アリババなら「Open Sesame!」。
対義語はモノモーフィズム(Monomorphism)、単態性、単相性で、 上の例で言えば、 「引き戸を開けて!」「開き戸を開けて!」と言わないと相手が判ってくれない。

ポリモーフィズムは、後述のインタフェースによって、さらに強化される。

昔書いたのを引っ張り出して抜粋した、呆れかえるほど手抜きなサンプルプログラム。

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

基本となるドアを定義するクラス
ドアに対する動作は3つの呪文。openSesami() 、closeSesame() 、infoDoor() 。
// Kihon_1.java			2013.05.28	by Ryn

public class Kihon_1 {

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

	public Kihon_1(String name) {			// コンストラクタ
		this.name = name;
	}


	public void openSesame() {

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


	public void closeSesame() {

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


	public void infoDoor() {

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

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

public class Hikido_1 extends Kihon_1{

	public Hikido_1(String name) {			// コンストラクタ
		super(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 + "は、既に閉じています");
	}
}

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

public class Hirakido_1 extends Kihon_1{

	public Hirakido_1(String name) {			// コンストラクタ
		super(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 + "は、既に閉じています");
	}
}

扉をコントロールするクラス
書斎は開き戸、玄関と和室は引き戸。
openSesame() や closeSesame() といった同じ名前のメソッドで、 引き戸、開き戸、それぞれの処理が出来る。
ドアを配列にすると、有難味が増す。
import java.util.Scanner;

// Alibaba_1			2013.05.28	by Ryn

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

		Kihon_1 door[] = new Kihon_1[2];

		door[0] = new Hirakido_1 ("寝室");
		door[1] = new Hikido_1("和室");

		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("終了");
	}
}





その2
その1を一寸だけ書き換えると成績処理プログラムのひな形になる
基本となるクラスの成績処理を定義するクラス
//Kihon.java		2013.05.28	by Ryn

public class Kihon {

	protected String name;

	public Kihon(String name) {				// コンストラクタ
		this.name = name;
	}

	public void syori() {
	}
}

文系クラスの成績処理を定義するクラス
//Bunkei.java		2013.05.28	by Ryn

public class Bunkei extends Kihon{

	public Bunkei(String name) {				// コンストラクタ
		super(name);
	}

	public void syori() {
		System.out.println(name + "は、文系クラスの処理を、行います");
	}
}

理系クラスの成績処理を定義するクラス
//Rikei.java		2013.05.28	by Ryn

public class Rikei extends Kihon{

	public Rikei(String name) {				// コンストラクタ
		super(name);
	}

	public void syori() {
		System.out.println(name + "は、理系クラスの処理を、行います");
	}
}

全体の成績処理をコントロールするクラス
文系クラス、理系クラス、それぞれの処理がなされる。
//SeisekiSyori		2013.05.28	by Ryn

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

		Kihon home[] = new Kihon[3];
		
		home[0] = new Rikei ("31ホーム");
		home[1] = new Bunkei("32ホーム");
		home[2] = new Bunkei("33ホーム");

		for (int i = 0 ; i < 3 ; i++)
			home[i].syori();
	}
}










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