Création de Classe Basique
Quatre classes indépendantes démontrant les concepts OOP de base
Vehicle
Classe de base avec attributs privés et méthodes publiques.
- Les propriétés privées ont des getters et setters
- Méthodes publiques pour contrôler le comportement
⚠️ Important: Sans validation appropriée dans les méthodes accelerate() et decelerate(), la currentSpeed pourrait:
- Devenir négative (si decelerate est appelé trop de fois ou avec de grandes valeurs)
- Dépasser
maxSpeed(si accelerate est appelé sans vérifier la limite)
💡 Cliquer pour voir l'implémentation de la validation
Bonne pratique: Ces méthodes devraient inclure la validation:
public void accelerate(int speed) {
currentSpeed += speed;
if (currentSpeed > maxSpeed) {
currentSpeed = maxSpeed; // Limiter à maxSpeed
}
}
public void decelerate(int speed) {
currentSpeed -= speed;
if (currentSpeed < 0) {
currentSpeed = 0; // Ne peut pas être négatif
}
}
Computer
Démontre l'encapsulation avec gestion de la mémoire.
- Les propriétés privées ont des getters et setters
- Méthodes pour ajouter/retirer de la mémoire avec validation contre maxMemory
- Montre comment gérer l'état avec des contraintes
⚠️ Important: Sans validation appropriée dans les méthodes addMemory() et removeMemory(), la memory pourrait:
- Devenir négative (si removeMemory est appelé avec un montant supérieur à la mémoire actuelle)
- Dépasser
maxMemory(si addMemory est appelé sans vérifier la limite)
💡 Cliquer pour voir l'implémentation de la validation
Bonne pratique: Ces méthodes devraient inclure la validation:
public void addMemory(int amount) {
memory += amount;
if (memory > maxMemory) {
memory = maxMemory; // Limiter à maxMemory
}
}
public void removeMemory(int amount) {
memory -= amount;
if (memory < 0) {
memory = 0; // Ne peut pas être négatif
}
}
City
Plusieurs types de données (String, double, boolean), constructeur et méthode de comparaison.
- population: En millions
- category:
- Si pas capitale: population > 6 = "Big", sinon: "Small"
- Si capitale: population > 7 = "Big", sinon: "Small"
- Les propriétés privées ont des getters et setters
- Méthode de comparaison prend un autre objet City en paramètre
Orc
Surcharge de constructeur : 2 constructeurs avec paramètres différents.
- Un constructeur avec (health, force)
- Un autre constructeur avec (name, health, force)
- Les propriétés privées ont des getters et setters
- Méthode pour attaquer un autre Orc
Exercice Pratique : Combat d'Orcs
Objectif: Créer deux instances d'Orc et les faire combattre dans une boucle jusqu'à ce que l'un soit vaincu.
Exigences:
- Instancier deux Orcs avec des noms, santé et force différents
- Créer une boucle où ils s'attaquent alternativement
- Afficher la santé de chaque Orc après chaque attaque
- Arrêter quand la santé d'un Orc atteint 0 ou moins
- Annoncer le gagnant
💡 Cliquer pour voir la solution suggérée
public class OrcBattle {
public static void main(String[] args) {
// Créer deux orcs
Orc orc1 = new Orc("Grommash", 100, 15);
Orc orc2 = new Orc("Thrall", 120, 12);
System.out.println("=== Le combat commence! ===");
System.out.println(orc1.getName() + " (Santé: " + orc1.getHealth() + ", Force: " + orc1.getForce() + ")");
System.out.println(orc2.getName() + " (Santé: " + orc2.getHealth() + ", Force: " + orc2.getForce() + ")");
System.out.println();
int round = 1;
// Boucle de combat
while (orc1.getHealth() > 0 && orc2.getHealth() > 0) {
System.out.println("--- Round " + round + " ---");
// Orc1 attaque Orc2
orc1.attack(orc2);
System.out.println(orc1.getName() + " attaque " + orc2.getName());
System.out.println(orc2.getName() + " santé: " + orc2.getHealth());
// Vérifier si orc2 est vaincu
if (orc2.getHealth() <= 0) {
break;
}
// Orc2 attaque Orc1
orc2.attack(orc1);
System.out.println(orc2.getName() + " attaque " + orc1.getName());
System.out.println(orc1.getName() + " santé: " + orc1.getHealth());
System.out.println();
round++;
}
// Annoncer le gagnant
System.out.println("=== Le combat est terminé! ===");
if (orc1.getHealth() > 0) {
System.out.println(orc1.getName() + " gagne avec " + orc1.getHealth() + " points de santé restants!");
} else {
System.out.println(orc2.getName() + " gagne avec " + orc2.getHealth() + " points de santé restants!");
}
}
}
Sortie attendue:
=== Le combat commence! ===
Grommash (Santé: 100, Force: 15)
Thrall (Santé: 120, Force: 12)
--- Round 1 ---
Grommash attaque Thrall
Thrall santé: 105
Thrall attaque Grommash
Grommash santé: 88
--- Round 2 ---
Grommash attaque Thrall
Thrall santé: 90
Thrall attaque Grommash
Grommash santé: 76
...
=== Le combat est terminé! ===
Grommash gagne avec 4 points de santé restants!
Points clés:
- La méthode
attack()réduit la santé de l'adversaire de la force de l'attaquant - La boucle continue tant que les deux orcs ont une santé > 0
- On vérifie après chaque attaque si le défenseur est vaincu
- Les getters sont utilisés pour accéder aux propriétés privées