Création de Classe Basique
Quatre classes indépendantes démontrant les concepts OOP de base
classDiagram
class Vehicle {
-int maxSpeed
-int currentSpeed
-String make
-String model
+accelerate(int speed)
+decelerate(int speed)
}
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
Section intitulée « Computer »classDiagram
class Computer {
-String model
-int memory
-int maxMemory
+addMemory(int amount)
+removeMemory(int amount)
}
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 }}classDiagram
class City {
-String name
-String country
-double population
-String category
-boolean capital
+City(name, country, population, capital)
+isBiggerOrSameAs(City c) Boolean
}
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
classDiagram
class Orc {
-String name
-int health
-int force
+attack(Orc o)
+Orc(health, force)
+Orc(name, health, force)
}
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
Section intitulée « 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 ThrallThrall santé: 105Thrall attaque GrommashGrommash santé: 88
--- Round 2 ---Grommash attaque ThrallThrall santé: 90Thrall attaque GrommashGrommash 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

