LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-03-30

はじめに

オブジェクト指向の学習のために作成しました。
ストライクガンダムとストライクダガーの組み立てをイメージし、それぞれの特徴と共通する部分を意識して作成しました。

手順

以下の手順で作成しました。
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で作成した3つのインタフェースも使用できるようにします。

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ガンランチャー 
------------

以上となります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1