Classes & Objets
La programmation orientée objet (POO)
Le plan et ses objets
La classe Chien est un plan. Chaque new Chien() crée un objet (une instance) avec ses propres attributs. Clique pour instancier !
Une classe = un plan • Chaque objet a ses propres valeurs d'attributs
Pourquoi la POO est partout ?
La quasi-totalité des logiciels modernes utilisent la programmation orientée objet : jeux vidéo, apps mobiles, sites web, logiciels d'entreprise, systèmes d'exploitation...
💡 En Java, tout le code vit dans des classes ! Même le programme principal est dans une classe. C'est le langage le plus utilisé en entreprise justement grâce à cette rigueur.
⚔️ Comparaison : Sans POO vs Avec POO
# Données en vrac joueur1_nom = "Link" joueur1_pv = 100 joueur1_attaque = 25 joueur2_nom = "Ganon" joueur2_pv = 200 joueur2_attaque = 40 # Fonctions séparées def attaquer(attaquant_atk, cible_pv): return cible_pv - attaquant_atk # Galère si 100 joueurs... # joueur47_pv = ???
😵 Données et fonctions séparées, difficile à maintenir
class Personnage: def __init__(self, nom, pv, atk): self.nom = nom self.pv = pv self.attaque = atk def attaquer(self, cible): cible.pv -= self.attaque # Créer des objets link = Personnage("Link", 100, 25) ganon = Personnage("Ganon", 200, 40) link.attaquer(ganon) # Simple !
🎯 Données + comportements ensemble, réutilisable
Le concept
Une classe c'est comme un moule à gâteau : elle définit la forme, mais ce n'est pas encore un gâteau.
Un objet c'est le gâteau créé à partir du moule. On peut en faire plusieurs, chacun avec ses propres décorations !
Classe (blueprint) → Objets (instances)
Créateur d'objet
class Personnage: ... hero = Personnage("Link", "Guerrier", 100, 1)
Définir une classe
class Voiture: # Constructeur def __init__(self, marque, couleur): self.marque = marque # Attribut self.couleur = couleur # Attribut self.vitesse = 0 # Attribut par défaut # Méthode def accelerer(self, kmh): self.vitesse += kmh return f"Vitesse: {self.vitesse} km/h" # Créer un objet ma_voiture = Voiture("Tesla", "rouge") print(ma_voiture.marque) # "Tesla" print(ma_voiture.accelerer(50)) # "Vitesse: 50 km/h"
class Voiture { // Constructeur constructor(marque, couleur) { this.marque = marque; // Attribut this.couleur = couleur; // Attribut this.vitesse = 0; // Attribut par défaut } // Méthode accelerer(kmh) { this.vitesse += kmh; return `Vitesse: ${this.vitesse} km/h`; } } // Créer un objet const maVoiture = new Voiture("Tesla", "rouge"); console.log(maVoiture.marque); // "Tesla" console.log(maVoiture.accelerer(50)); // "Vitesse: 50 km/h"
public class Voiture { // Attributs private String marque; private String couleur; private int vitesse = 0; // Constructeur public Voiture(String marque, String couleur) { this.marque = marque; this.couleur = couleur; } // Méthode public String accelerer(int kmh) { this.vitesse += kmh; return "Vitesse: " + vitesse + " km/h"; } } // Utilisation Voiture maVoiture = new Voiture("Tesla", "rouge"); System.out.println(maVoiture.accelerer(50));
public class Voiture { // Propriétés public string Marque { get; set; } public string Couleur { get; set; } public int Vitesse { get; private set; } = 0; // Constructeur public Voiture(string marque, string couleur) { Marque = marque; Couleur = couleur; } // Méthode public string Accelerer(int kmh) { Vitesse += kmh; return $"Vitesse: {Vitesse} km/h"; } } // Utilisation var maVoiture = new Voiture("Tesla", "rouge"); Console.WriteLine(maVoiture.Accelerer(50));
class Voiture { private: std::string marque; std::string couleur; int vitesse = 0; public: // Constructeur Voiture(std::string m, std::string c) : marque(m), couleur(c) {} // Méthode std::string accelerer(int kmh) { vitesse += kmh; return "Vitesse: " + std::to_string(vitesse) + " km/h"; } std::string getMarque() { return marque; } }; // Utilisation Voiture maVoiture("Tesla", "rouge"); std::cout << maVoiture.accelerer(50) << std::endl;
self / this
Premier paramètre de chaque méthode
def methode(self):
Mot-clé automatique
this.attribut
C'est quoi ? self / this fait référence à l'objet courant.
Ca permet d'accéder aux attributs et méthodes de l'instance.
Le constructeur
Méthode spéciale appelée automatiquement à la création d'un objet
__init__
constructor
NomClasse()
NomClasse()
class Joueur: def __init__(self, nom, niveau=1): # Initialise les attributs self.nom = nom self.niveau = niveau self.pv = 100 self.inventaire = [] print(f"{nom} créé !") # Le constructeur s'exécute automatiquement hero = Joueur("Link") # "Link créé !" boss = Joueur("Ganon", 50) # "Ganon créé !"
class Joueur { constructor(nom, niveau = 1) { // Initialise les attributs this.nom = nom; this.niveau = niveau; this.pv = 100; this.inventaire = []; console.log(`${nom} créé !`); } } // Le constructeur s'exécute automatiquement const hero = new Joueur("Link"); // "Link créé !" const boss = new Joueur("Ganon", 50); // "Ganon créé !"
public class Joueur { private String nom; private int niveau; private int pv = 100; // Constructeur public Joueur(String nom, int niveau) { this.nom = nom; this.niveau = niveau; System.out.println(nom + " créé !"); } // Constructeur avec niveau par défaut public Joueur(String nom) { this(nom, 1); // Appelle l'autre constructeur } } Joueur hero = new Joueur("Link"); // "Link créé !" Joueur boss = new Joueur("Ganon", 50); // "Ganon créé !"
Méthodes
Fonctions qui appartiennent à une classe
class Joueur: def __init__(self, nom): self.nom = nom self.pv = 100 self.xp = 0 # Méthode pour subir des dégâts def subir_degats(self, degats): self.pv -= degats if self.pv <= 0: return f"{self.nom} est KO !" return f"{self.nom}: {self.pv} PV restants" # Méthode pour gagner de l'XP def gagner_xp(self, points): self.xp += points return f"+{points} XP ! Total: {self.xp}" hero = Joueur("Link") print(hero.subir_degats(30)) # "Link: 70 PV restants" print(hero.gagner_xp(100)) # "+100 XP ! Total: 100"
class Joueur { constructor(nom) { this.nom = nom; this.pv = 100; this.xp = 0; } // Méthode pour subir des dégâts subirDegats(degats) { this.pv -= degats; if (this.pv <= 0) { return `${this.nom} est KO !`; } return `${this.nom}: ${this.pv} PV restants`; } // Méthode pour gagner de l'XP gagnerXp(points) { this.xp += points; return `+${points} XP ! Total: ${this.xp}`; } } const hero = new Joueur("Link"); console.log(hero.subirDegats(30)); // "Link: 70 PV restants" console.log(hero.gagnerXp(100)); // "+100 XP ! Total: 100"
Exemple pratique : RPG
class Personnage: def __init__(self, nom, classe): self.nom = nom self.classe = classe self.pv = 100 self.attaque = 10 def attaquer(self, cible): cible.subir_degats(self.attaque) return f"{self.nom} attaque {cible.nom} !" def subir_degats(self, degats): self.pv = max(0, self.pv - degats) def est_vivant(self): return self.pv > 0 def __str__(self): return f"{self.nom} ({self.classe}) - {self.pv} PV" # Combat ! hero = Personnage("Link", "Guerrier") monstre = Personnage("Goblin", "Monstre") while hero.est_vivant() and monstre.est_vivant(): print(hero.attaquer(monstre)) print(monstre) if monstre.est_vivant(): print(monstre.attaquer(hero))
class Personnage { constructor(nom, classe) { this.nom = nom; this.classe = classe; this.pv = 100; this.attaque = 10; } attaquer(cible) { cible.subirDegats(this.attaque); return `${this.nom} attaque ${cible.nom} !`; } subirDegats(degats) { this.pv = Math.max(0, this.pv - degats); } estVivant() { return this.pv > 0; } toString() { return `${this.nom} (${this.classe}) - ${this.pv} PV`; } } // Combat ! const hero = new Personnage("Link", "Guerrier"); const monstre = new Personnage("Goblin", "Monstre"); while (hero.estVivant() && monstre.estVivant()) { console.log(hero.attaquer(monstre)); console.log(monstre.toString()); }
Ce qu'il faut retenir
Quiz Mode Survie
1 erreur = Game OverClasses & Objets
10 questions aleatoires - Mode Survie