Classes et Objets

Apprenez les concepts fondamentaux de la programmation orientée objet en Java

Introduction

La programmation orientée objet (POO) est un paradigme de programmation basé sur le concept d'objets. En Java, tout est objet (sauf les types primitifs). Comprendre les classes et les objets est essentiel pour maîtriser Java.

Qu'est-ce qu'une classe ?

Une classe est un modèle ou un plan qui définit les propriétés (attributs) et les comportements (méthodes) d'un objet. C'est comme un moule qui permet de créer des objets.

Syntaxe d'une classe

public class Personne {
    // Attributs (variables d'instance)
    private String nom;
    private int age;

    // Constructeur
    public Personne(String nom, int age) {
        this.nom = nom;
        this.age = age;
    }

    // Méthodes
    public void sePresenter() {
        System.out.println("Je m'appelle " + nom + " et j'ai " + age + " ans.");
    }

    // Getters et setters
    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

Qu'est-ce qu'un objet ?

Un objet est une instance d'une classe. C'est une entité concrète créée à partir du modèle défini par la classe. Chaque objet possède son propre état (valeurs des attributs).

Création d'objets

public class Main {
    public static void main(String[] args) {
        // Création d'objets
        Personne personne1 = new Personne("Alice", 25);
        Personne personne2 = new Personne("Bob", 30);

        // Utilisation des objets
        personne1.sePresenter(); // Affiche : Je m'appelle Alice et j'ai 25 ans.
        personne2.sePresenter(); // Affiche : Je m'appelle Bob et j'ai 30 ans.

        // Modification d'un objet
        personne1.setAge(26);
        System.out.println(personne1.getNom() + " a maintenant " + personne1.getAge() + " ans.");
    }
}

Les composants d'une classe

1. Les attributs

Les attributs (ou variables d'instance) représentent l'état d'un objet. Ils sont généralement déclarés en private pour respecter l'encapsulation.

private String nom;
private int age;
private String email;

2. Le constructeur

Le constructeur est une méthode spéciale appelée lors de la création d'un objet. Il initialise les attributs de l'objet.

// Constructeur par défaut
public Personne() {
    this.nom = "Inconnu";
    this.age = 0;
}

// Constructeur avec paramètres
public Personne(String nom, int age) {
    this.nom = nom;
    this.age = age;
}

3. Les méthodes

Les méthodes définissent les comportements d'un objet. Elles permettent d'interagir avec l'objet et de modifier son état.

public void sePresenter() {
    System.out.println("Je m'appelle " + nom + " et j'ai " + age + " ans.");
}

public void vieillir() {
    this.age++;
}

Encapsulation

L'encapsulation est un principe fondamental de la POO qui consiste à cacher les détails d'implémentation d'une classe. On utilise les modificateurs d'accès pour contrôler la visibilité des attributs et des méthodes.

Modificateur Classe Package Sous-classe Tous
private
(default)
protected
public

Le mot-clé this

Le mot-clé this fait référence à l'instance courante de la classe. Il est utile pour :

  • Différencier les attributs des paramètres ayant le même nom
  • Appeler un constructeur depuis un autre constructeur
  • Passer l'instance courante en paramètre
public class Personne {
    private String nom;

    public Personne(String nom) {
        this.nom = nom; // this.nom = attribut, nom = paramètre
    }

    public Personne(String nom, int age) {
        this(nom); // Appel du constructeur précédent
        this.age = age;
    }
}

Méthodes statiques

Les méthodes statiques appartiennent à la classe elle-même, pas à une instance particulière. Elles sont appelées directement sur la classe.

public class Calculatrice {
    public static int additionner(int a, int b) {
        return a + b;
    }
}

// Utilisation
int resultat = Calculatrice.additionner(5, 3); // Pas besoin de créer un objet

💡 Bonne pratique : Utilisez toujours l'encapsulation en déclarant vos attributs en private et en fournissant des getters/setters publics pour y accéder. Cela permet de contrôler l'accès aux données et de maintenir la cohérence de l'objet.

Exemple complet

public class CompteBancaire {
    private String numeroCom pte;
    private double solde;
    private String titulaire;

    public CompteBancaire(String numeroCompte, String titulaire) {
        this.numeroCompte = numeroCompte;
        this.titulaire = titulaire;
        this.solde = 0.0;
    }

    public void deposer(double montant) {
        if (montant > 0) {
            solde += montant;
            System.out.println("Dépôt de " + montant + "€ effectué.");
        }
    }

    public boolean retirer(double montant) {
        if (montant > 0 && montant <= solde) {
            solde -= montant;
            System.out.println("Retrait de " + montant + "€ effectué.");
            return true;
        }
        System.out.println("Retrait impossible.");
        return false;
    }

    public double getSolde() {
        return solde;
    }

    public void afficherInfos() {
        System.out.println("Compte : " + numeroCompte);
        System.out.println("Titulaire : " + titulaire);
        System.out.println("Solde : " + solde + "€");
    }
}