Principe O : Open/Closed Principle (OCP)

Principes SOLID en Programmation Orientée ObjetNiveau : intermediate5 octobre 2025
Practice with this sheet
Create your flashcards, quizzes, and mock exams

Advanced features available in the app

  • Images
  • Mathematical formulas
  • Professional and academic diagrams in the app
Start for free

Fiche de Révision : Principe O - Open/Closed Principle (OCP)


Introduction au Principe OCP

Le Principe Open/Closed (OCP) est un concept fondamental de la programmation orientée objet et de la conception logicielle, faisant partie des principes SOLID. Il vise à rendre les systèmes logiciels plus flexibles, maintenables, et extensibles tout en minimisant les risques d’introduire des erreurs lors des évolutions.

Définition du OCP :
Un module logiciel (classe, fonction, module) doit être ouvert à l'extension mais fermé à la modification.

Autrement dit, il faut pouvoir ajouter de nouvelles fonctionnalités sans modifier le code existant.


Signification détaillée du OCP

Pour mieux comprendre, approfondissons les deux notions clés contenues dans ce principe :

1. Ouvert à l’extension

Le logiciel doit permettre l’ajout de nouveaux comportements ou fonctionnalités. Ceci est souvent réalisé à l’aide de l’héritage, de la composition, ou d’autres mécanismes permettant d’implémenter de nouvelles fonctionnalités en ajoutant du code.

2. Fermé à la modification

Une fois qu’une classe ou un module fonctionne correctement, son code source ne doit plus être modifié. Modifier du code testé et stable augmente le risque d’erreur et de régression.


Pourquoi appliquer le OCP ?

  • Réduction des bugs : Moins de modification directe sur un code stable, donc moins de risques d’introduire des erreurs.
  • Facilité de maintenance : Le code est plus simple à maintenir et à comprendre.
  • Extensibilité naturelle : Le logiciel peut évoluer sans bouleverser l’existant.
  • Respect des bonnes pratiques SOLID : OCP favorise l’écriture d’un code propre et modulaire.

Comment appliquer le OCP ?

Plusieurs techniques permettent de respecter le Principe OCP.

Utilisation des Interfaces et Abstractions

Au lieu de coder directement avec une implémentation concrète, on programme sur des interfaces ou classes abstraites.

  • Les classes concrètes peuvent alors être ajoutées pour étendre le comportement sans modifier les classes existantes.

Polymorphisme

Le polymorphisme permet d’appeler des méthodes sur des objets de types différents de façon transparente, ce qui facilite l’extension.

Inversion de dépendances

Utiliser l’injection de dépendances pour que les modules ne dépendent pas directement des implémentations concrètes, mais d’abstractions, facilitant l’ajout de nouvelles fonctionnalités.


Exemple Concret en JavaScript

Imaginons un logiciel de gestion de formes géométriques qui calcule les surfaces.

Mauvaise approche (violation du OCP)

class Calculator {
  calculateArea(shape) {
    if (shape.type === "circle") {
      return Math.PI * shape.radius * shape.radius;
    } else if (shape.type === "rectangle") {
      return shape.width * shape.height;
    }
    // Dès qu’on veut ajouter un nouveau type, il faut modifier cette méthode
  }
}

Ici, chaque nouvel ajout de forme nécessite de modifier la méthode calculateArea, ce qui viole le principe OCP.


Bonne approche (respect du OCP)

class Shape {
  getArea() {
    throw new Error("Méthode getArea() doit être implémentée");
  }
}

class Circle extends Shape {
  constructor(radius) {
    super();
    this.radius = radius;
  }
  getArea() {
    return Math.PI * this.radius * this.radius;
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }
  getArea() {
    return this.width * this.height;
  }
}

class Calculator {
  calculateArea(shape) {
    return shape.getArea();
  }
}

Dans cette version, la méthode calculateArea ne change jamais. On peut ajouter de nouvelles formes en créant simplement une nouvelle classe qui hérite de Shape et implémente getArea.


Illustration par diagramme Mermaid

[Diagramme]

Ce diagramme montre l’architecture où Calculator dépend de la classe abstraite Shape et appelle la méthode getArea polymorphiquement.


Liens avec les autres principes SOLID

PrincipeRelation avec OCP
SRPLe respect du OCP incite à structurer le code en classes spécialisées avec une seule responsabilité.
LSPLe polymorphisme implicite dans le OCP suppose le respect du Liskov Substitution Principle pour substituer les sous-classes sans effets inattendus.
ISPFavoriser les interfaces fines améliore la facilité d’extension sans modification.
DIPLe code doit dépendre des abstractions, comme préconisé par le OCP.

Synthèse des points essentiels

  • Le principe Open/Closed stipule que le code doit être ouvert à l'extension mais fermé à la modification.
  • Il permet d’ajouter de nouvelles fonctionnalités sans modifier le code stable existant, limitant ainsi les risques de bugs.
  • Pour le respecter, on utilise notamment les interfaces, le polymorphisme, l’héritage, et l’injection de dépendances.
  • Le respect du OCP favorise un code modulaire, flexible, et plus facile à maintenir.
  • Il est souvent lié aux autres principes SOLID et participe à une bonne architecture logicielle.

Pour aller plus loin

  • Étudier des exemples concrets dans son langage préféré.
  • Combiner OCP avec les autres principes SOLID.
  • Pratiquer la refactorisation en détectant les violations de l’OCP.
  • Apprendre les design patterns comme la stratégie, la fabrique ou le décorateur qui facilitent le respect du OCP.

Cette fiche vous donne une base solide pour comprendre et appliquer le Open/Closed Principle dans vos projets de développement logiciel.

Agent CTA Background

Transform your learning experience

Get started nowJoin thousands of students who have already transformed their learning