[JAVA] Programmation orientée objet apprise de Dragonball

1. 1. Objectif

2. Aperçu

Le monde de Dragon Ball est composé de divers guerriers tels que Goku, Android Cell et Majin Buu. Cette fois, nous allons concevoir et mettre en œuvre un petit cas tout en nous concentrant sur ceux qui sont différents des gens ordinaires.

3. 3. Conception UML

Diagramme UML (diagramme de classes)

Résumé des éléments fréquemment utilisés

image.png

Modificateur d'accès (diagramme UML)

image.png

4. Conception-mise en œuvre

Caractéristiques du guerrier: Fonction de combat → Traiter comme une interface

uploading-0

image.png

Fighter.java


interface Fighter {
	void fight();
}

Les guerriers possèdent les fonctions ci-dessus et ont les caractéristiques suivantes

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 peut être traité comme une sous-classe de guerriers Résumez les objets communs des guerriers et subdivisez-les davantage

  • Saiyan (Super Saiyan sous certaines conditions / Singe en regardant la lune)

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;
	}
}

Je veux concevoir un Tenkaichi Budokai pour combattre les guerriers

  • Champ

Tenkaichi Budokai-Réflexion sur la relation has-a des guerriers Définir les constructeurs et les getters / setters de superclasse

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. Résultat d'exécution

Résultat d'exécution.java


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

C'est plein de trucs, J'ai pu confirmer que le polymorphisme fonctionne

→ Un jour

6. la fin

3 mois de testeur → Je pensais que je devais passer au design de base et apprendre les modèles de conception La cellule complète est une conception de classe singleton, la technique est une interface ou une classe abstraite et la relation de composition

Maintenant, je voudrais résumer les classes anonymes-> génériques-> expressions lambda et interfaces fonctionnelles-> Stream API.

Recommended Posts

Programmation orientée objet apprise de Dragonball
Programmation orientée objet
Terme de programmation orienté objet
Conception orientée objet tirée de la «capture approfondie de la collecte des problèmes Java SE 11 Silver»