【Java】集約:別のクラスをインスタンスして呼び出す

■集約

あるクラスが、別のクラスをインスタンスし、呼び出すことを集約と呼ぶ。

図_集約のイメージ

■今回作成するプログラムの仕様

▼処理概要

食べ物の名前を種類ごとに表示するクラスを作成する。
例:
果物であれば「りんご」、「みかん」、「ばなな」
魚であれば「マグロ」、「サバ」、「サーモン」

▼ざっくりクラス図

▼処理詳細

・食べ物の名前を格納・取得するクラス

・フィールド(メンバ変数)

文字列:食べ物の名前


・フィールドの値を返すメソッド

【処理】
食べ物の名前を返す。


・コンストラクタ

文字列:食べ物の名前

・食べ物のクラス(集約クラス)

・フィールド(メンバ変数)

文字列:食べ物の種類名
配列(クラス):食べ物の名前(食べ物の名前を格納・取得するクラスを配列でインスタンス)


・食べ物の名前を表示するメソッド

【処理】
食べ物の種類名を表示する。
# 繰り返し処理開始 #
  設定した食べ物の名前をすべて表示する。
# 繰り返し処理終了 #


・コンストラクタ

文字列:食べ物の種類名
配列(クラス):食べ物の名前(食べ物の名前を格納・取得するクラスを配列でインスタンス)

・メインクラス

【処理】
「食べ物の名前を格納・取得するクラス」をインスタンスし、果物の名前(りんご、みかん、ばなな)をセットする。
「食べ物クラス」をインスタンスする(食べ物の種類名:果物)。
「食べ物クラス」の「食べ物の名前を表示するメソッド」を実行する。

「食べ物の名前を格納・取得するクラス」をインスタンスし、魚の名前(マグロ、サバ、サーモン)をセットする。
「食べ物クラス」をインスタンスする(食べ物の種類名:魚)。
「食べ物クラス」の「食べ物の名前を表示するメソッド」を実行する。

▼サンプルコード

// 食べ物の名前を格納・取得するクラス
class FoodName {
	// 食べ物の名前
	protected String food_name;
	
	// フィールドの値を返すメソッド
	public String getFruitName() {
		return food_name;
	}
	
	// コンストラクタ
	public FoodName(String name) {
		this.food_name = name;
	}
}

// 食べ物のクラス(集約クラス)
class Food{
	String kind_name;		// 食べ物の種類名
	FoodName[] fd_name;		// 食べ物の名前
	
	// 食べ物の名前を表示するメソッド
	public void ShowFoodName() {
		System.out.println("####################");
		System.out.println("食べ物の種類:" + this.kind_name);
		System.out.println("####################");
		for(int i = 0; i < this.fd_name.length; i ++) {
			System.out.println("食べ物の名前:" + this.fd_name[i].getFruitName());
		}
	}
	
	// コンストラクタ
	public Food(String name, FoodName[] fd_name) {
		this.kind_name = name;
		this.fd_name = fd_name;
	}
}

// メインクラス
public class Sample {
	public static void main(String[] args) {
		// 食べ物名前クラスをインスタンスし、果物の名前をセットする
		FoodName[] fruit_name = {
				new FoodName("りんご"),
				new FoodName("みかん"),
				new FoodName("ばなな")
		};
		
		// 食べ物クラスを果物でインスタンス
		Food fruit = new Food("果物", fruit_name);
		
		// 食べ物の名前を表示するメソッドを呼び出す
		fruit.ShowFoodName();
		
		
		// 食べ物名前クラスをインスタンスし、魚の名前をセットする
		FoodName[] fish_name = {
				new FoodName("マグロ"),
				new FoodName("サバ"),
				new FoodName("サーモン")
		};
		
		// 食べ物クラスを果物でインスタンス
		Food fish = new Food("魚", fish_name);
		
		// 食べ物の名前を表示するメソッドを呼び出す
		fish.ShowFoodName();
	}
}

▼実行結果

####################
食べ物の種類:果物
####################
食べ物の名前:りんご
食べ物の名前:みかん
食べ物の名前:ばなな
####################
食べ物の種類:魚
####################
食べ物の名前:マグロ
食べ物の名前:サバ
食べ物の名前:サーモン

コメント