Aller au contenu principal

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.

info

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 !");
}
}
attention

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

AvantageExplication
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 :

  1. Encapsulation : protéger les données internes d'une classe
  2. Héritage : créer de nouvelles classes à partir de classes existantes
  3. Polymorphisme : traiter des objets différents de façon uniforme
  4. 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);
}
}
info

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


En Java, peut-on écrire du code en dehors d'une classe ?


Quelle est la différence entre une classe et un objet ?


Quel mot-clé Java permet de créer une nouvelle instance d'une classe ?


Dans un fichier Java, que doit-il se passer si la classe publique s'appelle `Personnage` ?


Quels sont les deux types de membres que contient une classe ?


Parmi les 4 piliers de la POO, lequel consiste à protéger les données internes d'une classe ?


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).


Bonne pratique - Déclarer les classes public

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.


Bonne pratique - Une classe par fichier

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.


Bonne pratique - Nommer les méthodes avec un verbe

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".

📌 Une solution