ストライクガンダムでオブジェクト指向(java)

#はじめに
オブジェクト指向の学習のために作成しました。
ストライクガンダムとストライクダガーの組み立てをイメージし、それぞれの特徴と共通する部分を意識して作成しました。
#手順
以下の手順で作成しました。
1. インタフェースの作成
　→3種のストライカーパックをインタフェースとします。
2. スーパークラスの作成
　→X100系フレームをスーパークラスとします。
3. サブクラスの作成
　→ストライクガンダムとストライクダガーをサブクラスとします。
4. Factoryクラスの作成
　→Factoryクラスにインスタンスの生成と、メソッドを呼び出すための記述を行います。
#インタフェースの作成
エール、ソード、ランチャーをインタフェースの形で作成し、それぞれの武装を以下のように記述します。

```Striker.java
package practice;

public interface Striker {
	
	String[] arrayAile = {"57mm高エネルギービームライフル", "ビームサーベル", "対ビームシールド"};
	String[] arraySword = {"15.78m対艦刀「シュベルトゲベール」", "ビームブーメラン「マイダスメッサー」", "ロケットアンカー「パンツァーアイゼン」"};
	String[] arrayLauncher = {"320mm超高インパルス砲「アグニ」", "120mm対艦バルカン砲", "350mmガンランチャー"};

//STRIKEクラス、DAGGERクラスで実装を提供します
	void printDataAile();
	void printDataSword();
	void printDataLauncher();
}
```
#スーパークラスの作成
ストライクガンダムとストライクダガーはX100系フレームを基本骨格に使用しています。
また、特徴としてストライカーパックシステムという機能があります。
これらの特徴をX100frame.javaに以下のように記述します。

```X100frame.java
package practice;

//　継承することを前提としているためabstractにしています
public abstract class X100frame {
	private String name = "";
	private String type = "X100系フレーム";
	private String feature = "ストライカーパックシステム";
	
	public X100frame(String name) {
		this.name = name;
	}
	
	public String getName() {
		return this.name;
	}
	
	public String getType() {
		return this.type;
	}
	
	public String getFeature() {
		return this.feature;
	}

    public void list() {
		System.out.println("武装一覧：");
		System.out.println("-------------------------");
	}

//　サブクラス側でオーバーライドするので、空のメソッドを記述しておきます
    public abstract void printData();
	public abstract void printDataPersonal();
	
}
```

#サブクラスの作成
ストライクガンダムをSTRIKEクラス、ストライクダガーをDAGGERクラスとして作成します。
その際、X100frameクラスを継承し、手順1で作成した３つのインタフェースも使用できるようにします。

```STRIKE.java
package practice;

//　X100frameクラスを継承し、Strikerインタフェースを使用可に
public class STRIKE extends X100frame implements Striker {

	public STRIKE() {super("ストライクガンダム"); }
//　素ストライクのみの特徴
	private String Model = "GAT-X105";
	private String Armor = "フェイズシフト装甲";
	private double height = 17.72;
	private double weight = 64.80;
	private String WEAPON[] = {"イーゲルシュテルン", "アーマーシュナイダー"};

//　素ストライクのみの特徴を出力するためメソッド
    @Override
	public void printData() {
		System.out.println("モビルスーツ名：" + this.getName());
		System.out.println("型式番号：" + this.Model);
    //　フレームと特徴はX100frameクラスから継承
		System.out.println("フレーム：" + this.getType());
		System.out.println("特徴：" + this.getFeature());
		System.out.println("装甲：" + this.Armor);
		System.out.println("全高：" + this.height + "m");
		System.out.println("重量：" + this.weight + "t");
		System.out.println();
	}

    @Override
	public void printDataPersonal() {
		for(int a = 0; a < WEAPON.length; a++ ) {
			System.out.print(WEAPON[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}

//　ストライカーパックを装備した場合の武装を出力(Strikerインタフェースの実装を提供)
	public void printDataAile() {
		for(int a = 0; a < arrayAile.length; a++ ) {
			System.out.print(arrayAile[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
	public void printDataSword() {
		for(int a = 0; a < arraySword.length; a++ ) {
			System.out.print(arraySword[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
	public void printDataLauncher() {
		for(int a = 0; a < arrayLauncher.length; a++ ) {
			System.out.print(arrayLauncher[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
}
```
ストライクガンダム

```DAGGER.java
package practice;

//　X100frameクラスを継承し、Strikerインタフェースを使用可に
public class DAGGER extends X100frame implements Striker {

	public DAGGER() {super("ストライクダガー"); }
//　素ストライクダガーのみの特徴
	private String Model = "GAT-01A1";
	private String Armor = "ラミネート装甲（胴体部のみ）";
	private double height = 18.00;
	private double weight = 57.05;
	private String WEAPON[] = {"イーゲルシュテルン", "52mm機関砲ポッド", "ビームカービン", "12.5mm対人機関銃×2"};

//　素ストライクダガーのみの特徴を出力するためメソッド
    @Override
	public void printData() {
		System.out.println("モビルスーツ名：" + this.getName());
		System.out.println("型式番号：" + this.Model);
    //　フレームと特徴はX100frameクラスから継承
		System.out.println("フレーム：" + this.getType());
		System.out.println("特徴：" + this.getFeature());
		System.out.println("装甲：" + this.Armor);
		System.out.println("全高：" + this.height + "m");
		System.out.println("重量：" + this.weight + "t");
		System.out.println();
	}

    @Override
	public void printDataPersonal() {
		for(int a = 0; a < WEAPON.length; a++ ) {
			System.out.print(WEAPON[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}

//　ストライカーパックを装備した場合の武装を出力(Strikerインタフェースの実装を提供)
	public void printDataAile() {
		for(int a = 0; a < arrayAile.length; a++ ) {
			System.out.print(arrayAile[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
	public void printDataSword() {
		for(int a = 0; a < arraySword.length; a++ ) {
			System.out.print(arraySword[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
	public void printDataLauncher() {
		for(int a = 0; a < arrayLauncher.length; a++ ) {
			System.out.print(arrayLauncher[a] + " ");
			}
		System.out.println();
		System.out.println("------------");
	}
	
}
```
ストライクダガー

#Factoryクラスの作成
インスタンスを生成し、各メソッドを呼び出します。

```Factory.java
package practice;

public class Factory {
	
	public static void main(String[] args) {
		STRIKE s = new STRIKE();
		DAGGER d = new DAGGER();
		s.printData();
		s.list();
		s.printDataPersonal();
		s.printDataAile();
		s.printDataSword();
		s.printDataLauncher();
		System.out.println();
		d.printData();
		d.list();
		d.printDataPersonal();
		d.printDataAile();
		d.printDataSword();
		d.printDataLauncher();
	}
	
}
```
#出力結果
このように出力されました。

```
モビルスーツ名：ストライクガンダム
型式番号：GAT-X105
フレーム：X100系フレーム
特徴：ストライカーパックシステム
装甲：フェイズシフト装甲
全高：17.72m
重量：64.8t

武装一覧：
-------------------------
イーゲルシュテルン アーマーシュナイダー 
------------
57mm高エネルギービームライフル ビームサーベル 対ビームシールド 
------------
15.78m対艦刀「シュベルトゲベール」 ビームブーメラン「マイダスメッサー」 ロケットアンカー「パンツァーアイゼン」 
------------
320mm超高インパルス砲「アグニ」 120mm対艦バルカン砲 350mmガンランチャー 
------------

モビルスーツ名：ストライクダガー
型式番号：GAT-01A1
フレーム：X100系フレーム
特徴：ストライカーパックシステム
装甲：ラミネート装甲（胴体部のみ）
全高：18.0m
重量：57.05t

武装一覧：
-------------------------
イーゲルシュテルン 52mm機関砲ポッド ビームカービン 12.5mm対人機関銃×2 
------------
57mm高エネルギービームライフル ビームサーベル 対ビームシールド 
------------
15.78m対艦刀「シュベルトゲベール」 ビームブーメラン「マイダスメッサー」 ロケットアンカー「パンツァーアイゼン」 
------------
320mm超高インパルス砲「アグニ」 120mm対艦バルカン砲 350mmガンランチャー 
------------
```
以上となります。