オブジェクト指向言語 Java は,「クラスベース」であるためクラスを定義す ることにより,プログラミングする.最初に,オブジェクト指向言語で説明し た例題を Java により定義してみよう.「オブジェクト指向」とは,最初に説 明したように「概念」であるため,前節で定義した抽象化されたクラスを プログラミングの際に「具体化」する必要がある.この具体化は,各プログラマの 責任である.そのため,以下で定義するプログラムは,筆者の解 釈 であると考 えてよい.
public class Person {
private int AirplaneColor,AirplaneSpeed;
private boolean TreeStatus;
private Airplane knownAirplane;
private Tree knownTree;
Person(Tree t,Airplane a) {
knownTree = t; knownAirplane = a;
}
public void Seeing() {
TreeStatus=knownTree.WhatIsYourStatus();
AirplaneSpeed=
knownAirplane.WhatIsYourSpeed();
AirplaneColor=
knownAirplane.WhatIsYourColor();
System.out.println(
"TStatus: "+TreeStatus+
",ASpeed: "+AirplaneSpeed+",AColor: "+
Color.toString(AirplaneColor));
}
public static void main(String args[]) {
Tree t = new Tree();
Airplane a = new Airplane(t);
Person p = new Person(t,a);
for(int i=0;i<21;i++) {
for(int j=0;j<10000;j++){}
p.Seeing(); a.Flying();
}
p.Seeing();
}
}
class Color {
static int White=0,Red=1,Green=2,Blue=4;
static String toString(int Col) {
switch(Col) {
case 0: return "White";
case 2: return "Read";
case 4: return "Green";
case 8: return "Blue";
default: return "unknownColor";
}
}
}
class Airplane {
private int Speed,Col = Color.White;
private Tree knownTree;
private boolean Upper=true;
Airplane(Tree t) {
knownTree = t;
}
public void Flying() {
if(Upper==true) {
if(Speed++==9) Upper=false;
} else
if(--Speed<=0) Speed=0;
if(Speed>0) knownTree.Wind();
else knownTree.stopWind();
}
public int WhatIsYourSpeed() {
return Speed;
}
public int WhatIsYourColor() {
return Col;
}
}
class Tree {
private boolean Status = false;
public boolean WhatIsYourStatus() {
return Status;
}
public void Wind() {
Status = true;
}
public void stopWind() {
Status = false;
}
}
このプログラムを実行すると以下のようになる.
TStatus: false,ASpeed: 0,AColor: White TStatus: true,ASpeed: 1,AColor: White TStatus: true,ASpeed: 2,AColor: White TStatus: true,ASpeed: 3,AColor: White TStatus: true,ASpeed: 4,AColor: White TStatus: true,ASpeed: 5,AColor: White TStatus: true,ASpeed: 6,AColor: White TStatus: true,ASpeed: 7,AColor: White TStatus: true,ASpeed: 8,AColor: White TStatus: true,ASpeed: 9,AColor: White TStatus: true,ASpeed: 10,AColor: White TStatus: true,ASpeed: 9,AColor: White TStatus: true,ASpeed: 8,AColor: White TStatus: true,ASpeed: 7,AColor: White TStatus: true,ASpeed: 6,AColor: White TStatus: true,ASpeed: 5,AColor: White TStatus: true,ASpeed: 4,AColor: White TStatus: true,ASpeed: 3,AColor: White TStatus: true,ASpeed: 2,AColor: White TStatus: true,ASpeed: 1,AColor: White TStatus: false,ASpeed: 0,AColor: White TStatus: false,ASpeed: 0,AColor: White
では,順次説明してみよう.Java では,前節で説明した「メッセージの受渡 し」は,メソッド呼出しとなる.クラスより生成されたインスタンス(オブ ジェクト) のメソッドを通常の手続き呼出しのように呼出す.例えば, クラス Airplane のメソッド Flying() の定義の中での,
knownTree.Wind();
前節に無かった定義では,各クラスは コンストラクタ(constructor) という部分を持っている.例えば,クラ ス Person では,
Person(Tree t,Airplane a) {
knownTree = t; knownAirplane = a;
}
各クラスの状態と,メソッドの宣言は,以下のようになっている.
| クラス | 状態 | メソッド |
| Person | AirPlaneColor | Seeing() |
| AirPlaneSpeed | ||
| TreeStatus | ||
| knownTree | ||
| Airplane | Speed | Flying() |
| Col | WhatIsYourSpeed() | |
| knownTree | WhatIsYourColor() | |
| Upper | ||
| Tree | Status | WhatIsYourStatus() |
| Wind() | ||
| stopWind() |
全体を統括するメソッド main は,クラス Person の中で定義されているが,特別な意味を持つので (特に Person の中でなくてもよい), static として定義する.
public static void main(String args[]) {
Tree t = new Tree();
Airplane a = new Airplane(t);
Person p = new Person(t,a);
for(int i=0;i<21;i++) {
for(int j=0;j<10000;j++){}
p.Seeing(); a.Flying();
}
p.Seeing();
}
これより,全体の処理の流れは,
Java では,前に定義した仮想的な言語と異なり「実際に実行させる」必要が あるので,このように「全体を統括する」プログラムが必要となる. しかし,他の「クラス定義」の部分は,全く同様に定義することができた.