Aller au contenu principal

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:

  1. Instancier deux Orcs avec des noms, santé et force différents
  2. Créer une boucle où ils s'attaquent alternativement
  3. Afficher la santé de chaque Orc après chaque attaque
  4. Arrêter quand la santé d'un Orc atteint 0 ou moins
  5. 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