Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 15

Classes: Attributs et Méthodes

Recommended resources

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 Voiture dé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 Voiture est le plan, alors une Ferrari rouge spécifique et une Porsche noire spécifique sont deux objets distincts de la classe Voiture.

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.

Cette image montre la classe `Circle` comme un modèle unique (à gauche) et trois objets `Circle` distincts (à droite), `c1`, `c2`, et `c3`. Bien qu'ils partagent la même structure (attributs `radius` et `color`, méthode `getArea`), chaque objet a ses propres valeurs pour ses attributs, donc son propre état.

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.

Ce diagramme UML montre comment différentes classes (`Personne`, `Livre`, `Utilisateur`) sont définies avec leurs listes d'attributs et de méthodes. C'est une façon formelle de représenter le "plan" d'une classe avant même d'écrire le code.

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 :

  1. 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.
  2. 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.

  1. Dans votre IDE (IntelliJ), créez un nouveau projet Maven.

  2. Dans le répertoire src/main/java, créez un nouveau fichier Voiture.java.

  3. Copiez-y le code complet de la classe Voiture ci-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("================================");
        }
    }
    
  4. Créez un autre fichier, Garage.java, qui contiendra votre méthode main.

  5. 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 ===");
        }
    }
    
  6. Exécutez la méthode main de la classe Garage. 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.