Section courante

A propos

Section administrative du site

Constructeurs et destructeurs

Rôle des constructeurs et destructeurs

En POO, un objet possède un cycle de vie :

Les constructeurs et destructeurs encadrent ce cycle.

Le constructeur

Définition

Un constructeur est une méthode spéciale :

Un objet ne devrait jamais exister dans un état incohérent.

Caractéristiques générales

Propriété Description
Nom Identique à la classe (Java, C++)
Type de retour Aucun
Appel Implicite via new
Surcharge Autorisée

Exemple simple de constructeur

  1. class Personne {
  2.     private String nom;
  3.     private int age;
  4.  
  5.     public Personne(String nom, int age) {
  6.         this.nom = nom;
  7.         this.age = age;
  8.     }
  9. }
  10.  
  11. Personne p = new Personne("Alice", 30);

Constructeur par défaut

Définition

Un constructeur par défaut :

  1. class Voiture {
  2. }
  3.  
  4. Voiture v = new Voiture();

Dès qu'un constructeur est défini, le constructeur par défaut n'est plus généré.

Constructeurs paramétrés

Ils permettent d'imposer :

  1. public Compte(double soldeInitial) {
  2.     if (soldeInitial < 0) throw new IllegalArgumentException();
  3.     solde = soldeInitial;
  4. }

Surcharge de constructeurs

Plusieurs constructeurs dans une même classe.

  1. class Utilisateur {
  2.     public Utilisateur() {}
  3.     public Utilisateur(String nom) {}
  4.     public Utilisateur(String nom, int age) {}
  5. }

Chaînage de constructeurs

Appel interne (this)

  1. public Utilisateur(String nom) {
  2.     this(nom, 0);
  3. }

Appel du constructeur parent (super)

  1. class Employe extends Personne {
  2.     public Employe(String nom) {
  3.         super(nom);
  4.     }
  5. }

Le constructeur parent est toujours appelé en premier.

Constructeurs et héritage

Ordre d'appel :

Constructeurs et encapsulation

Le constructeur :

  1. public Compte(String numero) {
  2.     this.numero = numero;
  3. }

Certains attributs peuvent devenir final.

Constructeurs et immuabilité

Un objet immuable :

  1. class Point {
  2.     private final int x, y;
  3.  
  4.     public Point(int x, int y) {
  5.         this.x = x;
  6.         this.y = y;
  7.     }
  8. }

Le destructeur

Définition

Un destructeur :

Destructeurs selon les langages

Langage Destruction
Java finalize() (obsolète)
C# Dispose() / finaliseur
C++ ~Classe()
Free Pascal destructor Destroy;
Delphi destructor Destroy; override;

Exemple de destructeur (C++)

  1. class Fichier {
  2. public:
  3.     ~Fichier() {
  4.         close();
  5.     }
  6. };

Exemple en Free Pascal / Delphi

  1. Type
  2.   TConnexion=Class
  3.   Public
  4.     Constructor Create;
  5.     Destructor Destroy; override;
  6.   End;
  7.  
  8. Constructor TConnexion.Create;Begin
  9.  Inherited Create;
  10.  WriteLn('Connexion ouverte');
  11. End;
  12.  
  13. Destructor TConnexion.Destroy;Begin
  14.  WriteLn('Connexion fermée');
  15.  Inherited Destroy;
  16. End;

Garbage Collector vs destruction explicite

Langages avec GC :

On libère les ressources logiques, pas la mémoire.

Langages sans GC :

Le développeur gère la durée de vie.

Constructeurs et exceptions

Un constructeur peut lever une exception :

  1. public Fichier(String chemin) throws IOException {}

Bonnes pratiques - constructeurs

Bonnes pratiques - destructeurs

Erreurs fréquentes

UML - Constructeurs et destructeurs

  1. + Classe(param: Type)
  2. + ~Classe()

Lien avec SOLID

Conclusion

Les constructeurs et destructeurs sont les gardiens du cycle de vie des objets. Bien conçus, ils garantissent des objets valides, sûrs et sans fuite de ressources.

Un bon objet commence bien... et se termine proprement.



Dernière mise à jour : Jeudi, le 1er janvier 2026