[JAVA] Objektorientierte Programmierung aus Dragonball gelernt

1. 1. Zweck

2. Überblick

Die Welt von Dragon Ball besteht aus verschiedenen Kriegern wie Goku, Android Cell und Majin Buu. Dieses Mal werden wir einen kleinen Fall entwerfen und implementieren, während wir uns auf diejenigen konzentrieren, die sich von normalen Menschen unterscheiden.

3. 3. UML-Design

UML-Diagramm (Klassendiagramm)

Zusammenfassung häufig verwendeter Artikel

image.png

Zugriffsmodifikator (UML-Diagramm)

image.png

4. Design-Implementierung

Kriegermerkmale: Kampffunktion → Als Schnittstelle behandeln

uploading-0

image.png

Fighter.java


interface Fighter {
	void fight();
}

Krieger besitzen die oben genannten Funktionen und haben die folgenden Eigenschaften

image.png

DragonballWarrior.java


public class DragonballWarrior implements Fighter {
	private String name;
	private int property;
	private int HP;

	@Override
	public void fight() {
	}

	public void getSkill() {
	}

	public void doSkill() {
	}
}

Goku kann als Unterklasse von Kriegern behandelt werden Fassen Sie die gemeinsamen Gegenstände der Krieger zusammen und unterteilen Sie sie weiter

  • Saiyajin (Super Saiyajin unter bestimmten Bedingungen / Affe beim Blick auf den Mond)

image.png

Saiyan.java


public class Saiyan extends DragonballWarrior {
	/** [1:normal / 2:monkey / 3:super-saiyan] */
	private int status;

	public void changeStatus(Saiyan saiyan) {
		this.status = saiyan.status;
	}
}

Ich möchte einen Tenkaichi Budokai entwerfen, um Krieger zu bekämpfen

  • Feld

Tenkaichi Budokai - Nachdenken über die Beziehung zwischen Kriegern Definieren Sie Konstruktoren und Getter / Setter der Oberklasse

image.png

DragonballWarrior.java


public class DragonballWarrior implements Fighter {
	private String name;
	private int property;
	private int HP;

	/** default constractor */
	DragonballWarrior() {
	}

	DragonballWarrior(String name, int property, int HP) {
		this.name = name;
		this.property = property;
		this.HP = HP;
	}

	@Override
	public void fight() {
	}

	public void getSkill() {
	}

	public void doSkill() {
	}

	// S - getter,setter
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getProperty() {
		return property;
	}

	public void setProperty(int property) {
		this.property = property;
	}

	public int getHP() {
		return HP;
	}

	public void setHP(int hP) {
		HP = hP;
	}
	// E - getter,setter
}

Saiyan.java


public class Saiyan extends DragonballWarrior {
	/** [1:normal / 2:monkey / 3:super-saiyan] */
	private int status = 0;

	public Saiyan(String name, int property, int HP) {
		super(name, property, HP);
	}

	public void changeStatus(Saiyan saiyan) {
		this.status = saiyan.status;
	}

	@Override
	public void doSkill() {
		if (super.getName().equals("Goku")) {
			System.out.println("kamehame-ha");
		}
	}

	@Override
	public void fight() {
		if (super.getName().equals("Goku")) {
			System.out.println("ora-Goku!");
		}
	}

Saiyan.java


public class MartialArtist extends DragonballWarrior {
	public MartialArtist(String name, int property, int HP) {
		super(name, property, HP);
	}

	@Override
	public void doSkill() {
		if (super.getName().equals("Kuririn")) {
			System.out.println("kien-zan");
		}
	}

	@Override
	public void fight() {
		if (super.getName().equals("Kuririn")) {
			System.out.println("oreha-Kuririn!");
		}
	}
}

BattleTournament.java


public class BattleTournament {
	private List<DragonballWarrior> dwlist;

	public static void main(String args[]) {
		List<DragonballWarrior> dwlist = new ArrayList<>();
		dwlist.add(new Saiyan("Goku", 50000, 200));
		dwlist.add(new Saiyan("Vegeta", 40000, 250));
		dwlist.add(new MartialArtist("Kuririn", 3000, 80));
		dwlist.add(new MartialArtist("Kamesennin", 3000, 80));
		for (DragonballWarrior dw : dwlist) {
			dw.fight();
			dw.doSkill();
		}
	}
}

5. Ausführungsergebnis

Ausführungsergebnis.java


ora-Goku!
kamehame-ha
oreha-Kuririn!
kien-zan

Es ist voller Sachen, Ich konnte bestätigen, dass Polymorphismus funktioniert

→ Eines Tages

6. das Ende

3 Monate Tester → Ich dachte, ich müsste zum Grunddesign gehen und Designmuster lernen Die vollständige Zelle ist ein Singleton-Klassendesign, die Technik ist eine Schnittstelle oder eine abstrakte Klasse und die Kompositionsbeziehung

Jetzt möchte ich anonyme Klassen-> Generika-> Lambda-Ausdrücke und funktionale Schnittstellen-> Stream-API zusammenfassen.

Recommended Posts

Objektorientierte Programmierung aus Dragonball gelernt
Objekt orientierte Programmierung
Objektorientierter Programmierbegriff
Objektorientiertes Design aus "Gründliche Erfassung der Java SE 11 Silver-Problemsammlung"