Programmation Orientée Objet en Java

La programmation orientée objet (POO) est un paradigme fondamental en Java. Ce guide explore ses concepts clés.

1. Classes et Objets

1.1 Définition et utilisation d'une classe

Une classe est un modèle qui définit les propriétés (attributs) et les comportements (méthodes) d'un type d'objet. Un objet est une instance concrète de cette classe.

// Définition de la classe
public class Vehicule {
    String marque;
    int vitesseMax;

    public void demarrer() {
        System.out.println("Le véhicule démarre.");
    }
}

// Création d'une instance (objet) et utilisation
Vehicule maVoiture = new Vehicule();
maVoiture.marque = "Renault";
maVoiture.demarrer();

1.2 Le constructeur

Un constructeur est une méthode spéciale, portant le nom de la classe, appelée automatiquement lors de la création d'un objet. Son rôle est d'initialiser l'état de l'objet.

public class Livre {
    String titre;
    String auteur;

    // Constructeur par défaut (sans paramètres)
    public Livre() {
        this.titre = "Inconnu";
        this.auteur = "Anonyme";
    }

    // Constructeur avec paramètres (surcharge)
    public Livre(String titre, String auteur) {
        this.titre = titre;
        this.auteur = auteur;
    }
}

Livre livre1 = new Livre(); // Utilise le constructeur par défaut
Livre livre2 = new Livre("Le Petit Prince", "Saint-Exupéry");

Points importants : Un constructeur peut être surchargé. Si vous définissez un constructeur avec paramètres, le compilateur ne génère plus automatiquement le constructeur par défaut. Vous devez alors le définir explicitement si nécessaire.

1.3 Mémoire et références

L'opérateur new alloue de la mémoire sur le tas (heap) pour l'objet et retourne une référence vers cet objet. La variable d'objet (ex: maVoiture) stocke cette référence, pas l'objet lui-même.

2. Les Trois Piliers de la POO

2.1 Encaspulation

Principe consistant à cacher les détails internes d'un objet et à n'exposer qu'une interfaec publique contrôlée pour interagir avec ses données. On utilise les modificateurs d'accès (private, protected, public).

public class CompteBancaire {
    // Attributs privés (encapsulés)
    private double solde;
    private String proprietaire;

    // Accesseur (getter)
    public double getSolde() {
        return solde;
    }

    // Mutateur (setter) avec validation
    public void effectuerDepot(double montant) {
        if (montant > 0) {
            this.solde += montant;
        }
    }
}

2.2 Héritage

Permet à une classe enfant de réutiliser les attributs et méthodes d'une classe parente, favorisant la réutilisabilité du code. Utilise le mot-clé extends.

public class Animal {
    public void manger() {
        System.out.println("L'animal mange.");
    }
}

public class Chien extends Animal {
    // Hérite de la méthode manger()
    public void aboyer() {
        System.out.println("Le chien aboie.");
    }
}

Chien rex = new Chien();
rex.manger(); // Méthode héritée
rex.aboyer();  // Méthode spécifique

Redéfinition de méthode : Une classe enfant peut redéfinir (override) une méthode de son parent pour changer son comportement.

2.3 Polymorphisme

Capacité d'un objet à prendre plusieurs formes. En pratique, une référence d'un type parent peut pointer vers un objet d'un type enfant. L'appel de méthode redéfinitie se fait de manière dynamique au moment de l'exécution.

Animal monAnimal = new Chien(); // Polymorphisme
monAnimal.manger(); // Appelle la version de Animal ou de Chien si redéfinie
// monAnimal.aboyer(); // Erreur de compilation, la référence est de type Animal

// Vérification de type avec instanceof
if (monAnimal instanceof Chien) {
    ((Chien) monAnimal).aboyer(); // Cast vers Chien
}

3. Les Exceptions

Les exceptions sont des événements qui perturbent le flux normal d'exécution d'un programme. Java fournit un mécanisme robuste pour les gérer.

3.1 Hiérarchie des exceptions

Toutes les exceptions héritent de Throwable. Les deux branches principales sont Error (erreurs système graves, ingérables) et Exception (exceptions applicatives).

3.2 Mécanisme de gestion

On utilise les blocs try, catch, finally et les mots-clés throw, throws.

import java.io.*;

public class LectureFichier {
    public static void main(String[] args) {
        BufferedReader lecteur = null;
        try {
            lecteur = new BufferedReader(new FileReader("donnees.txt"));
            String ligne = lecteur.readLine();
            System.out.println(ligne);
        } catch (FileNotFoundException e) {
            System.err.println("Fichier non trouvé: " + e.getMessage());
        } catch (IOException e) {
            System.err.println("Erreur d'E/S: " + e.getMessage());
        } finally {
            // Nettoyage des ressources
            if (lecteur != null) {
                try {
                    lecteur.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

Exception personnalisée : On peut créer ses propres exceptions en étendant la classe Exception.

// Définition d'une exception personnalisée
public class AgeInvalideException extends Exception {
    public AgeInvalideException(String message) {
        super(message);
    }
}

// Utilisation dans une méthode
public void setAge(int age) throws AgeInvalideException {
    if (age < 0) {
        throw new AgeInvalideException("L'âge ne peut pas être négatif.");
    }
    this.age = age;
}

Étiquettes: Java POO classe objet constructeur

Publié le 4 juillet à 17h54