Programmation Orientée Objet – POO

La POO est une méthode de programmation qui organise le code autour d’objets, qui modélisent des entités du monde réel (une personne, une voiture, un produit, un utilisateur).

Analogie :
Une voiture (objet) a des caractéristiques (couleur, marque = attributs) et des comportements (démarrer, freiner = méthodes).

Les 4 piliers de la POO

PilierCe que ça signifie
1. ClasseModèle / « moule » qui définit la structure d’un objet (ses attributs et méthodes).
2. ObjetInstance concrète d’une classe (ex. : voiture1 = new Voiture()).
3. EncapsulationProtection des données internes : on cache le fonctionnement interne et on contrôle l’accès.
4. HéritagePermet à une classe d’hériter des attributs/méthodes d’une autre.

Structure d’une classe en PHP

class Utilisateur {
    // Attributs (données de l'objet)
    private string $nom;
    private int $age;

    // Constructeur : initialise l'objet à sa création
    public function __construct(string $nom, int $age) {
        $this->nom = $nom;
        $this->age = $age;
    }

    // Getter : permet de LIRE une propriété privée
    public function getNom(): string {
        return $this->nom;
    }

    // Setter : permet de MODIFIER une propriété privée (avec contrôle)
    public function setAge(int $age): void {
        if ($age >= 0 && $age <= 150) {
            $this->age = $age;
        } else {
            throw new Exception("Âge invalide");
        }
    }
}

Visibilité : private vs public

Mot-cléAccèsUsage recommandé
privateSeulement à l’intérieur de la classePour les données sensibles ou internes → garantit l’encapsulation
publicDepuis n’importe où (extérieur, autres classes)Pour les méthodes d’interface (ex. : getNom(), setAge())

Pourquoi private ?
→ Évite que le code extérieur modifie les données sans contrôle (ex. : âge négatif, email invalide).
→ Permet de changer l’implémentation interne sans casser le code qui utilise l’objet.

Getters et Setters : les « portes contrôlées »

  • Getter = méthode publique pour lire une propriété privée.
    → Ex. : getNom() → renvoie $this->nom
  • Setter = méthode publique pour modifier une propriété privée, souvent avec validation.
    → Ex. : setAge(25) → vérifie que 25 est valide avant d’affecter

Bonnes pratiques :

  • Ne pas rendre les attributs public (sauf cas très simple).
  • Utiliser des setters pour valider, formater ou déclencher des actions (ex. : log, mise à jour).
  • Dans certains langages (Python, JavaScript), les getters/setters peuvent être automatisés ou implicites.

Exemple concret d’usage

$util = new Utilisateur("Agnès", 30);
echo $util->getNom(); // "Agnès"

$util->setAge(-5); // déclenche une erreur (grâce au contrôle dans le setter)

Pourquoi la POO ?

  • Modularité : chaque objet est autonome.
  • Réutilisabilité : on réutilise les classes.
  • Maintenabilité : les modifications restent locales.
  • Sécurité : grâce à l’encapsulation (private + getters/setters).

Attention aux excès

  • Ne pas créer des getters/setters pour tout, sans logique → ça casse l’encapsulation !
  • La POO n’est pas toujours nécessaire pour de petits scripts ou traitements simples (ex. : automatisation Python).
Les contenus de définition restent publics. Les ressources (outils, grilles, supports) liées à cette fiche sont disponibles dans l’espace membre.