Découverte POO avec Java
Notions théoriques
Pourquoi la programmation orientée objet ?
En programmation procédurale, le code est organisé en une suite d'instructions et de fonctions. Cette approche fonctionne bien pour de petits programmes, mais devient difficile à maintenir quand le projet grandit.
La programmation orientée objet (POO) propose une autre façon de penser : on modélise le monde réel en regroupant les données et les comportements qui vont ensemble dans des entités appelées objets.
Imaginez un jeu RPG. Un personnage a un nom, des points de vie, une force... et il peut attaquer, se défendre, se soigner. Avec la POO, on regroupe tout cela dans un seul endroit : la classe Personnage.
La classe : un plan de construction
Une classe est un modèle (ou plan) qui décrit :
- les attributs : les données que possède l'objet (le nom, les points de vie...)
- les méthodes : les actions que peut effectuer l'objet (attaquer, se soigner...)
Un objet est une instance de cette classe, c'est-à-dire un personnage concret créé à partir du plan.
// La classe = le plan
class Personnage {
String nom;
int pointsDeVie;
void attaquer() {
System.out.println(nom + " attaque !");
}
}
// Les objets = les instances concrètes
Personnage hero = new Personnage();
Personnage villain = new Personnage();
Java : tout est classe
En PHP, on peut écrire du code procédural directement dans un fichier, sans classe. En Java, c'est impossible : tout le code doit être à l'intérieur d'une classe. Il n'existe pas de fonctions "libres" en Java.
// En Java, même le point d'entrée du programme est dans une classe
public class Main {
public static void main(String[] args) {
System.out.println("Bienvenue dans le jeu !");
}
}
En Java, le nom du fichier doit correspondre exactement au nom de la classe publique qu'il contient. La classe Personnage doit être dans un fichier Personnage.java.
Avantages de la POO
| Avantage | Explication |
|---|---|
| Réutilisabilité | Une classe créée une fois peut être réutilisée dans plusieurs projets. |
| Maintenabilité | Le code est organisé en unités cohérentes, plus faciles à modifier. |
| Modularité | Chaque classe gère une responsabilité précise. |
| Extensibilité | On peut créer de nouvelles classes en s'appuyant sur des classes existantes (héritage). |
Les 4 piliers de la POO
Tout au long de ce cours, vous allez découvrir les 4 concepts fondamentaux de la POO :
- Encapsulation : protéger les données internes d'une classe
- Héritage : créer de nouvelles classes à partir de classes existantes
- Polymorphisme : traiter des objets différents de façon uniforme
- Abstraction : simplifier la complexité en ne montrant que l'essentiel
Exemple pratique
// Fichier : Personnage.java
public class Personnage {
// Attributs : les données du personnage
String nom;
int pointsDeVie;
int force;
// Méthode : une action du personnage
void attaquer(Personnage cible) {
System.out.println(nom + " attaque " + cible.nom + " avec une force de " + force + " !");
cible.pointsDeVie -= force;
System.out.println(cible.nom + " a maintenant " + cible.pointsDeVie + " PV.");
}
void afficherStatistiques() {
System.out.println("=== " + nom + " ===");
System.out.println("PV : " + pointsDeVie);
System.out.println("Force : " + force);
}
}
// Fichier : Main.java
public class Main {
public static void main(String[] args) {
// Créer deux personnages (deux instances de la classe Personnage)
Personnage hero = new Personnage();
hero.nom = "Aria";
hero.pointsDeVie = 100;
hero.force = 15;
Personnage ennemi = new Personnage();
ennemi.nom = "Golem";
ennemi.pointsDeVie = 80;
ennemi.force = 10;
// Afficher les statistiques
hero.afficherStatistiques();
ennemi.afficherStatistiques();
// Simuler un combat
hero.attaquer(ennemi);
}
}
Remarquez que hero et ennemi sont deux objets indépendants : modifier les points de vie de l'un n'affecte pas l'autre.
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Dans ce TP, vous allez créer vos premiers personnages Java et observer comment les objets sont indépendants les uns des autres.
Étape 1 — Déclarer la classe Personnage
Créez un fichier Personnage.java dans IntelliJ. Déclarez la classe avec trois attributs : nom (String), pointsDeVie (int) et force (int).
En Java, il est habituel de déclarer les classes avec le modificateur public. Cela les rend accessibles depuis n'importe quel autre fichier du projet. Une classe sans public n'est accessible que depuis les classes du même package.
Étape 2 — Créer deux personnages dans Main
Dans Main.java, créez deux instances de Personnage : un héros nommé "Aria" avec 100 PV et 15 de force, et un ennemi nommé "Golem" avec 80 PV et 10 de force.
En Java, chaque classe publique doit être dans son propre fichier. Ne mettez jamais deux classes publiques dans le même fichier. IntelliJ vous aidera à respecter cette convention en créant automatiquement un fichier du bon nom.
Étape 3 — Ajouter une méthode d'affichage
Ajoutez une méthode afficherStatistiques() dans la classe Personnage, puis appelez-la sur les deux personnages.
Les méthodes représentent des actions. Par convention, leur nom commence par un verbe en minuscule : afficher, calculer, attaquer. Cela rend le code lisible comme une phrase : hero.afficherStatistiques() se lit "le héros affiche ses statistiques".