Bonjour ! Bienvenue dans ce nouveau module dédié à la Programmation Orientée Objet (POO).
Dans la leçon précédente, nous avons vu comment redéfinir les méthodes equals() et hashCode() pour que nos objets personnalisés se comportent correctement dans les collections. Cette incursion nous a montré l'importance de pouvoir définir la "logique métier" de nos propres types de données. Aujourd'hui, nous allons faire un pas en arrière pour construire la fondation : nous allons apprendre à créer ces types de données de A à Z.
Cette leçon est la première pierre de votre parcours en POO. Nous allons découvrir comment modéliser des concepts du monde réel (une voiture, un utilisateur, un produit) sous forme de classes en Java. Vous apprendrez à définir leur état avec des attributs et leur comportement avec des méthodes. C'est le cœur même de la POO et une compétence fondamentale pour tout développeur Java.
1. Le concept de Classe et d'Objet
En programmation, nous avons constamment besoin de représenter des choses. Pas seulement des nombres ou du texte, mais des concepts plus complexes : un Utilisateur avec un nom et un email, un Produit avec un prix et un stock, etc. La Programmation Orientée Objet nous offre un moyen puissant de faire cela en utilisant des classes et des objets.
- Une classe est un modèle, un plan de construction. Elle définit les caractéristiques (quels sont ses attributs ?) et les actions possibles (quelles sont ses méthodes ?) pour un certain type d'entité. Par exemple, la classe
Voituredécrirait qu'une voiture a une couleur, une marque et qu'elle peut démarrer ou accélérer. - Un objet est une instance concrète d'une classe. C'est un exemplaire "vivant" créé à partir du modèle. Si
Voitureest le plan, alors une Ferrari rouge spécifique et une Porsche noire spécifique sont deux objets distincts de la classeVoiture.
La vidéo suivante introduit très bien cette distinction fondamentale.
Programmation Orientée Objet Java - Tutoriel Complet pour Débutants
Cette courte introduction de la chaîne "Apprendre à coder" utilise une analogie simple pour clarifier la différence entre une classe et un objet.
Regardez le passage de l'introduction à la POO. Concentrez-vous sur la définition de la classe comme un modèle qui décrit les variables d'instance (l'état) et les méthodes (le comportement).
Pour visualiser cette idée, imaginez un emporte-pièce (la classe) et les biscuits que vous créez avec (les objets). Tous les biscuits ont la même forme, mais chaque biscuit est une entité distincte que vous pouvez décorer différemment.
L'image ci-dessous illustre ce concept avec une classe Circle.

Comme vous avez des connaissances en UML, vous reconnaîtrez que ces structures sont souvent modélisées à l'aide de diagrammes de classes, qui sont un standard dans l'industrie pour la conception logicielle.

2. Définir une Classe en Java : Attributs et Méthodes
Maintenant que le concept est clair, voyons comment l'écrire en code Java. Une classe regroupe deux éléments principaux :
- Les attributs (aussi appelés champs ou variables d'instance) : ce sont les variables qui stockent les données propres à chaque objet. Ils représentent l'état de l'objet.
- Les méthodes : ce sont les fonctions définies à l'intérieur de la classe. Elles définissent les actions que l'objet peut effectuer, souvent en manipulant ses propres attributs. Elles représentent le comportement de l'objet.
L'article suivant vous montre la syntaxe exacte pour déclarer une classe avec ses attributs et méthodes.
Les bases de la POO en Java : Classes, Objets, Encapsulation et this
Cet article de Rachid Saad Academy est un excellent guide pour débuter. Il détaille la structure d'une classe avec des exemples clairs.
Lisez la section "2.1. La classe : le plan de construction". Portez une attention particulière à la classe Personne : La déclaration public class Personne { ... }. La définition des attributs (nom, age, profession). La définition des méthodes, en notant la différence entre une méthode void comme saluer() (qui exécute une action) et une méthode qui retourne une valeur comme getDescription() (qui renvoie un String).
Pour résumer la syntaxe, voici un exemple simple basé sur ce que vous avez lu :
// Le nom du fichier doit être Voiture.java
public class Voiture {
// ========== ATTRIBUTS (état) ==========
String marque;
String modele;
int annee;
double vitesseActuelle;
// ========== MÉTHODES (comportement) ==========
// Une méthode qui modifie l'état de l'objet
void demarrer() {
System.out.println("La voiture " + marque + " démarre.");
// Ici, on pourrait ajouter un attribut "estDemarree" et le passer à true
}
// Une méthode avec un paramètre qui modifie l'état
void accelerer(double increment) {
vitesseActuelle = vitesseActuelle + increment;
System.out.println("Vitesse actuelle : " + vitesseActuelle + " km/h.");
}
// Une méthode qui retourne une partie de l'état de l'objet
double getVitesse() {
return vitesseActuelle;
}
}
Bonnes pratiques de nommage :
- Les noms de classes commencent toujours par une majuscule et utilisent le
CamelCase(ex:Voiture,CompteBancaire). - Les noms d'attributs et de méthodes commencent par une minuscule (ex:
vitesseActuelle,accelerer).
3. Créer et Manipuler des Objets (Instanciation)
Avoir une classe Voiture ne sert à rien si on ne construit pas de voitures ! Pour créer un objet à partir d'une classe, on utilise le mot-clé new. C'est ce qu'on appelle l'instanciation.
Une fois l'objet créé, on peut accéder à ses attributs et appeler ses méthodes en utilisant l'opérateur point (.).
public class Main {
public static void main(String[] args) {
// 1. Instanciation : on crée un nouvel objet de type Voiture
Voiture maFerrari = new Voiture();
// 2. Accès et modification des attributs
maFerrari.marque = "Ferrari";
maFerrari.modele = "F8";
maFerrari.annee = 2021;
maFerrari.vitesseActuelle = 0;
// 3. Appel des méthodes
maFerrari.demarrer(); // Affiche "La voiture Ferrari démarre."
maFerrari.accelerer(100); // Affiche "Vitesse actuelle : 100.0 km/h."
// On peut créer un autre objet, complètement indépendant
Voiture maTwingo = new Voiture();
maTwingo.marque = "Renault";
maTwingo.modele = "Twingo";
maTwingo.accelerer(20); // Affiche "Vitesse actuelle : 20.0 km/h."
// La vitesse de maFerrari n'a pas changé
System.out.println("Vitesse de la Ferrari : " + maFerrari.getVitesse()); // Affiche 100.0
}
}
Chaque objet (maFerrari, maTwingo) a son propre jeu d'attributs. Modifier l'un n'affecte pas l'autre.
4. Exercice Pratique : Votre premier Garage
La meilleure façon d'apprendre est de pratiquer. Vous allez maintenant créer et utiliser vos premiers objets.
-
Dans votre IDE (IntelliJ), créez un nouveau projet Maven.
-
Dans le répertoire
src/main/java, créez un nouveau fichierVoiture.java. -
Copiez-y le code complet de la classe
Voitureci-dessous. C'est une version plus élaborée de celle que nous avons vue.// Fichier: Voiture.java public class Voiture { // Attributs String marque; String modele; String couleur; double vitesseActuelle; boolean estDemarree; // Méthodes void demarrer() { if (!estDemarree) { estDemarree = true; System.out.println("La " + marque + " " + modele + " démarre. Vroum vroum !"); } else { System.out.println("La voiture est déjà démarrée."); } } void arreter() { if (estDemarree) { estDemarree = false; vitesseActuelle = 0; System.out.println("La " + marque + " " + modele + " s'arrête."); } else { System.out.println("La voiture est déjà arrêtée."); } } void accelerer(double increment) { if (estDemarree) { vitesseActuelle += increment; System.out.println("La " + marque + " accélère à " + vitesseActuelle + " km/h."); } else { System.out.println("Impossible d'accélérer : voiture non démarrée."); } } void afficherInfos() { System.out.println("=== Informations de la voiture ==="); System.out.println("Marque: " + marque); System.out.println("Modèle: " + modele); System.out.println("Couleur: " + couleur); System.out.println("Vitesse: " + vitesseActuelle + " km/h"); System.out.println("État: " + (estDemarree ? "Démarrée" : "Arrêtée")); System.out.println("================================"); } } -
Créez un autre fichier,
Garage.java, qui contiendra votre méthodemain. -
Copiez-y le code ci-dessous pour créer et manipuler plusieurs objets
Voiture.// Fichier: Garage.java public class Garage { public static void main(String[] args) { System.out.println("=== OUVERTURE DU GARAGE ===\n"); // Création d'un premier objet Voiture Voiture maFerrari = new Voiture(); maFerrari.marque = "Ferrari"; maFerrari.modele = "488 GTB"; maFerrari.couleur = "Rouge"; // Création d'un second objet Voiture Voiture maPorsche = new Voiture(); maPorsche.marque = "Porsche"; maPorsche.modele = "911 Turbo"; maPorsche.couleur = "Noire"; // Utilisation du premier objet System.out.println("--- Scénario Ferrari ---"); maFerrari.afficherInfos(); maFerrari.demarrer(); maFerrari.accelerer(50); maFerrari.afficherInfos(); maFerrari.arreter(); System.out.println(); // Utilisation du second objet System.out.println("--- Scénario Porsche ---"); maPorsche.accelerer(30); // Essayer d'accélérer sans démarrer maPorsche.demarrer(); maPorsche.accelerer(100); maPorsche.afficherInfos(); System.out.println("\n=== FERMETURE DU GARAGE ==="); } } -
Exécutez la méthode
mainde la classeGarage. Observez la sortie dans la console et essayez de faire le lien entre chaque ligne affichée et le code que vous avez écrit. Modifiez les valeurs, créez une troisième voiture et expérimentez !
Conclusion
Félicitations ! Vous venez de créer vos premières classes et vos premiers objets en Java. C'est le concept le plus fondamental de la POO.
Points clés à retenir :
- Une classe est un plan (
class NomDeClasse { ... }). - Elle contient des attributs pour l'état (des variables) et des méthodes pour le comportement (des fonctions).
- Un objet est une instance concrète d'une classe, créée avec le mot-clé
new. - Chaque objet a son propre état (ses propres valeurs pour ses attributs).
- On interagit avec les objets en utilisant l'opérateur point (
.) pour accéder à leurs membres (ex:maVoiture.marque,maVoiture.demarrer()).
Dans cette leçon, nous avons initialisé nos objets en modifiant directement leurs attributs de l'extérieur (maFerrari.marque = "Ferrari"). Bien que simple, ce n'est pas une bonne pratique car cela ne garantit pas que l'objet soit dans un état cohérent lors de sa création.
Dans la prochaine leçon, nous aborderons les constructeurs, des méthodes spéciales dont le rôle est précisément d'initialiser correctement les objets dès leur naissance. Nous introduirons aussi le concept crucial d'encapsulation.