次のようなクラスを考える
クラス名 ClassA
フィールド(属性) field0:int,field1:String
メソッド(操作) method0:void,method1:int,method2:String
この時,クラス図とJavaプログラムとの対応は次のようになる.
右側のJavaプログラムのように具体的な内容を記述していないものをスケルトンコードと呼ぶ.
| クラス図 | Javaプログラム |
|---|---|
public class ClassA{
private int field0;
private String field1;
public void method0(){
//処理内容の記述
}
public int method1(){
//処理内容の記述
return 0;
}
public String method2(){
//処理内容の記述
return null;
}
}
|
但し,フィールドとメソッドのアクセス制限はそれぞれprivate(-)とpublic(+)に限定している.
メソッドの戻り値は,上の例ではmethod1は0,method2はnullとしているが,実際には適切な値をreturnの後ろに記述する.
2つ以上のクラス間の関係は,一方が他方のクラスのオブジェクト(インスタンス)を利用するが,その形態は様々である.
関係のうち,クラス間で構造的な結びつきがある場合に関連と呼ぶ.
関連のうち,一方が他方を利用する場合を考える.Javaプログラムでは,利用するクラスが利用されるクラスのオブジェクト(インスタンス)を属性として持つことに対応する.
(注:利用する側のクラスがMainクラスの場合は,他方のインスタンスをmainメソッド内で生成する場合もある.)
| クラス図 | Javaプログラム |
|---|---|
public class ClassA{
private ClassB instanceB;
・・・
}
|
全体と部分の関係(part ofの関係)である.(1)のようにClassAはClassBのオブジェクトを属性として持つと同時に,ClassAのオブジェクトがコンストラクタ(*)により生成されるときにClassBのオブジェクトが組み込まれるように,コンストラクタの引数としてClassBのオブジェクトが渡される.
| クラス図 | Javaプログラム |
|---|---|
public class ClassA{
private ClassB instanceB;
public ClassA(ClassB instance){
instanceB = instance;
}
・・・
}
|
集約よりも結びつきが強く,ClassAのオブジェクトが生成されると同時にClassBのオブジェクトも生成されて組み込まれる.つまり,ClassBのオブジェクトの生成がClassAのコード内に記入されている.
| クラス図 | Javaプログラム |
|---|---|
1)コンストラクタ内でオブジェクトが生成される場合
public class ClassA{
private ClassB instanceB;
public ClassA(){
instanceB = new ClassB();
・・・
}
・・・
}
2)フィールドの宣言時にオブジェクトが生成される場合
public class ClassA{
private ClassB instanceB = new ClassB();
・・・
}
|