Introduction à la Programmation Orientée Objet

20 novembre 2025

Crée tes propres fiches en 30 secondes

Colle ton cours, Revizly le transforme en résumé, fiches, flashcards et QCM.

Commencer gratuitement

Synthèse rapide

  • La Programmation Orientée Objet (POO) permet une modélisation du monde réel via des classes et des objets.
  • Les principaux concepts sont : classes, objets, encapsulation, héritage, polymorphisme et abstraction.
  • La conception de code orienté objet doit suivre le principe SOLID, garantissant lisibilité et maintenabilité.
  • La modélisation UML de base utilise notamment les diagrammes de classes et de séquences.
  • La POO favorise la réutilisation, la testabilité et la structuration claire d’un projet.
  • Les patrons de conception comme Strategy, Observer et Factory sont couramment utilisés pour résoudre des problèmes récurrents.
  • La gestion d’erreurs doit être soigneusement pensée via exceptions et invariants.
  • Les méthodes spéciales permettent de définir le comportement d’objets (surcharge d’str, eq, etc.).
  • La persistance peut s’appuyer sur la sérialisation (JSON, databasing léger) pour sécuriser et restaurer l’état.
  • La conception doit intégrer l’inversion de dépendances et une architecture modulaire (Ports & Adapters).

Concepts et définitions

  • Classe : modèle ou plan de construction d’un objet.
  • Objet : instance d’une classe, représentant une entité concrète.
  • Encapsulation : principe consistant à protéger l’état interne d’un objet.
  • Héritage : mécanisme permettant de créer une nouvelle classe à partir d’une classe existante.
  • Polymorphisme : capacité pour différentes classes d’avoir des méthodes portant le même nom mais avec des comportements différents.
  • Abstraction : définition d’une interface ou d’un contrat sans implémentation concrète.
  • Patrons de conception : solutions réutilisables à des problématiques communes en programmation orientée objet.
  • SOLID : principes fondamentaux pour un design OO robuste : Responsabilité unique, Ouverture/fermeture, Substitution de Liskov, Ségrégation d’interface, Inversion des dépendances.

Formules, lois, principes

  • Principes SOLID :
    • S : Responsabilité unique — chaque classe doit avoir une seule responsabilité.
    • O : Ouvert/fermé — classes ouvertes à l’extension mais fermées à la modification.
    • L : Substitution de Liskov — sous-classes doivent pouvoir remplacer leur classe parente sans erreur.
    • I : Ségrégation d’interface — préférez plusieurs interfaces spécifiques à une interface commune.
    • D : Inversion de dépendance — dépendance à des abstractions plutôt qu’à des concrètes.
  • Règle des trois états d’un objet : attribut privé protégé, getter/setter en Python, visibilité en Java/C#.
  • Sérialisation : écriture/d développement de l’état d’un objet sous forme sérialisée (JSON, XML).

Méthodes et procédures

  1. Définir la classe avec ses attributs et méthodes.
  2. Choisir la visibilité : public, protégé, privé.
  3. Implémenter les méthodes spéciales (str, repr, eq, etc.).
  4. Formaliser l’héritage ou l’interface si nécessaire.
  5. Respecter le principe SOLID lors de la conception.
  6. Utiliser UML pour modéliser la structure du système.
  7. Effectuer des tests unitaires pour chaque composant.
  8. Documenter avec des docstrings et des commentaires.
  9. Gérer les erreurs via des exceptions adaptées.
  10. Intégrer la persistance si besoin (sérialisation, base de données).

Exemples illustratifs

  1. Classe CompteBancaire en Python :
    • Attributs : titulaire, solde (protégé _solde).
    • Méthodes : deposer(montant), retirer(montant), solde().
    • Sécurisation du solde avec propriété en lecture seule.
  2. Héritage :
    • Classe Employe, sous-classes Salarie et Freelance, avec des méthodes spécifiques.
  3. Patron Strategy :
    • Interface Tarification avec méthode prix().
    • Implémentations : PromoPourcentage, fixe.
    • Utilisation dans une classe Panier pour calculer le montant à payer selon la stratégie choisie.

Pièges et points d'attention

  • Confondre surcharge et redéfinition (super() en Python, override en Java).
  • Exposer trop facilement l’état interne, favorisant la mutabilité.
  • Négliger le principe de Responsabilité Unique dans le design.
  • Mal gérer les invariants ou les exceptions, ce qui peut mener à des états incohérents.
  • Utiliser l’héritage de façon abusive au lieu de composition.
  • Ignorer l’importance des tests unitaires et de la documentation.

Glossaire

  • Classe : Modèle de données et comportements.
  • Objet : Instance concrète d’une classe.
  • Encapsulation : Protection des données internes.
  • Héritage : Extending une classe.
  • Polymorphisme : Méthodes identiques avec comportements différenciés.
  • Abstraction : Contrat ou interface sans implémentation.
  • Patron de conception : Solution réutilisable pour un problème récurrent.
  • SOLID : Principes pour un code maintenable et évolutif.
  • Union type : type indiquant qu’une variable peut être de plusieurs types (en Python, avec typing).