Qu'est-ce que la POO (Programmation Orientée Objet) ?

Antoine Krajnc
Par 
Antoine Krajnc
CEO & Fondateur
Dernière mise à jour le 
10
 
November
 
2024
Vous débutez en Data ? Maîtrisez les fondamentaux en quelques heures !
Se former en Data
 Qu'est-ce que la POO (Programmation Orientée Objet) ?
Sommaire

Vous vous lancez en développement et vous avez entendu parler de la Programmation Orientée Objet (POO) ? C’est un concept fondamental, que l’on retrouve dans de nombreux langages de programmation, dont Python.

Mais en quoi consiste-t-elle vraiment ? Et qu’est-ce qui la différencie des autres types de programmation ? Dans cet article, on vous livre tous ses secrets : ses origines, les principaux langages orientés objet, les grands principes sur lesquels elle est basée et pourquoi elle est si utile.

Vous débutez en Data ? Maîtrisez les fondamentaux en quelques heures !
Se former en Data
Formation Data pour débutantFormation Data pour débutant

Qu’est-ce que la programmation orientée objet ? 

Définition de la POO

La programmation orientée objet (POO) est un concept essentiel en programmation informatique. Dans le jargon, on dit de la POO qu’elle est un paradigme, c'est-à-dire une approche, une méthode. 

Le but de la POO consiste à définir et faire interagir entre eux des “objets” pour faciliter l’écriture et la maintenance du code. C’est beaucoup plus simple à comprendre avec un exemple concret, comme celui-ci qui est codé en Python


class Animal:
    def __init__(self, nom, espece):
        self.nom = nom
        self.espece = espece

    def faire_du_bruit(self):
        if self.espece == "chien":
            print(f"{self.nom} dit: Woof!")
        elif self.espece == "chat":
            print(f"{self.nom} dit: Miaou!")

# Création d'instances de la classe Animal
mon_chien = Animal("Rex", "chien")
mon_chat = Animal("Misty", "chat")

# Appel de la méthode faire_du_bruit sur ces instances
mon_chien.faire_du_bruit()
mon_chat.faire_du_bruit()

Dans cet exemple :

  • Animal est une classe qui modélise un animal générique. 
  • nom et espece sont des attributs qui stockent les données spécifiques de chaque animal.
  • faire_du_bruit est une méthode qui permet à l'animal de faire un bruit spécifique à son espèce.

mon_chien et mon_chat sont des instances spécifiques, les fameux “objets”, de la classe. Chacun peut utiliser la méthode faire_du_bruit pour agir selon ses propriétés. Cela illustre comment la POO encapsule les données et les comportements associés pour rendre le code plus organisé et réutilisable.

Histoire & origines de la POO

Définie par les norvégiens Ole-Johan Dahl et Kristen Nygaard au début de la décennie 1960, la programmation orientée objet a été davantage développée dans les années 1970 par l’américain Alan Kay qui pose et précise ses grands principes que l’on utilise encore aujourd’hui. 

Quelles différences avec les programmations procédurales et fonctionnelles ? 

La programmation procédurale est une méthode qui procède à une analyse descendante pour résoudre un problème, en décomposant le problème en sous-problèmes jusqu’à ce que des actions très simples, aussi appelées procédures, soient identifiées. 

Les inconvénients de la programmation procédurale sont nombreux. La plus petite modification de la structure des données du programme appelle à une modification de toutes les actions qui interagissent avec ces données. Développer un très grand programme en procédural peut donc s’avérer long et fastidieux.

La programmation fonctionnelle, quant à elle, est la moins répandue des trois méthodes, mais elle a gagné en popularité avec l’avènement du big data. Elle s’inspire dans son écriture des fonctions mathématiques, et a une application plus abstraite. Elle est donc très appréciée pour manipuler et analyser de gros volumes de données mais moins pertinente pour développer une application utile au quotidien. 

La POO est donc la méthode à privilégier pour écrire des programmes de taille importante, avec des données complexes. 

Quels sont les principaux langages orientés objet ?

Il existe plusieurs catégories de langage orienté objet, à choisir selon ce que l’on souhaite développer avec la POO: 

  • Les langages de POO dits « purs » : Conçus spécifiquement pour faciliter les méthodes orientés objet : Ex: Ruby, Scala, Smalltalk, Eiffel, Emerald, JADE, Self, Raku.
  • Les langages conçus pour la programmation orientée objet, mais qui appliquent quelques principes procéduraux : Ex : Java, Python, C++, C#, Delphi/Object Pascal, VB.NET.
  • Les langages procéduraux avec certaines caractéristiques orientées objets. Ex : PHP, Perl, Visual Basic (dérivé de BASIC), MATLAB, C++, C#, COBOL 2002, Fortran 2003, ABAP, Ada 95, Pascal.

Ces dernières années, la programmation orientée objet a énormément gagné en popularité, notamment au sein des langages de programmation dynamiques tels que Python, PowerShell, Ruby et Groovy.

Pourquoi faire de la Programmation Orientée Objet ? 

Quels sont les avantages de la POO ? 

La POO est un paradigme de programmation qui comporte de nombreux avantages : 

  • L’efficacité face à la complexité : plus le programme que l’on souhaite développer est complexe, plus la POO est pertinente et efficace. Elle est aussi réputée pour être une méthode sûre et robuste de programmation. 
  • La modularité :  Grâce à la POO, on peut former des modules compacts regroupant des données et un ensemble d’opérations.
  • L’abstraction : La POO permet de créer des objets abstraits à partir du réel. Ses concepts se rapprochent donc des fonctionnalités utilisées par tout un chacun au quotidien. 

Quels sont les inconvénients de la POO ? 

Même si la POO est reconnue pour ses qualités, elle présente tout de même quelques inconvénients selon l’usage : 

  • Peu intuitive : Elle sera moins facile d’accès que l’approche procédurale, généralement la première à être apprise lorsqu’on débute, ou l'approche fonctionnelle qui parlera tout de suite aux matheux. 
  • Exigeante : La POO demande une grande rigueur dans le code pour que ses concepts s’appliquent correctement. 
  • Vague : Son vocabulaire manque de précision, ce qui induit un risque d'ambiguïté ou d'incompréhension. 

Quels sont les principes de la programmation orientée objet ?

Pour vous aider à bien comprendre et assimiler les grands principes de la POO, nous les avons illustrés à chaque fois avec un exemple en Python. Ça rend tout de suite les choses beaucoup plus concrètes ! 

La classe

Une classe est un modèle définissant des caractéristiques (attributs) et des actions (méthodes) communes aux objets qui en sont dérivés. Le concept de classe devient beaucoup plus clair avec un exemple : 

Exemple : Imaginons une classe Voiture. Cette classe contiendrait des attributs comme la marque, le modele, et la couleur, et des méthodes comme demarrer() et arreter() qui permettent de démarrer et d'arrêter la voiture, respectivement.


class Voiture:
    def __init__(self, marque, modele, couleur):
        self.marque = marque
        self.modele = modele
        self.couleur = couleur

    def demarrer(self):
        print("La voiture démarre")

    def arreter(self):
        print("La voiture s'arrête")

L’objet

Un objet est une instance spécifique d'une classe, contenant des valeurs réelles pour les attributs définis par la classe et pouvant exécuter les méthodes qui y sont spécifiées. C'est comme un exemplaire individuel créé à partir du plan fourni par la classe.

Exemple : À partir de la classe Voiture, nous pouvons créer des objets spécifiques, comme ma_voiture = Voiture("Toyota", "Corolla", "rouge"). Ici ma_voiture est un objet avec ses propres valeurs pour les attributs marque, modèle, et couleur.

L’encapsulation

L'encapsulation en Python est un principe fondamental de la programmation orientée objet qui consiste à restreindre l'accès à certains éléments d'une classe (le plus souvent ses attributs). 

Exemple : Dans cet exemple, l'attribut __prix est privé, ce qui signifie que son accès est restreint à l'intérieur de la classe Voiture. Les méthodes afficher_prix et modifier_prix sont les seules façons de lire ou de modifier le prix de la voiture, assurant ainsi que ces opérations peuvent être contrôlées et validées de manière appropriée par la classe.


class Voiture:
    def __init__(self, marque, modele, couleur, prix):
        self.marque = marque
        self.modele = modele
        self.couleur = couleur
        self.__prix = prix  # Prix est un attribut privé

    def afficher_prix(self):
        print(f"Le prix de la voiture est de {self.__prix} euros.")

    def modifier_prix(self, nouveau_prix):
        if nouveau_prix > 0:
            self.__prix = nouveau_prix
            print(f"Le prix de la voiture a été mis à jour à {self.__prix} euros.")
        else:
            print("Le nouveau prix doit être positif.")

# Exemple d'utilisation de la classe Voiture
ma_voiture = Voiture("Peugeot", "208", "rouge", 15000)
ma_voiture.afficher_prix()  # Affiche le prix de la voiture
ma_voiture.modifier_prix(16000)  # Met à jour le prix de la voiture
ma_voiture.afficher_prix()  # Affiche le nouveau prix

# Tentative d'accès direct au prix (ne fonctionnera pas)
print(ma_voiture.__prix)  # Cela générerait une erreur AttributeError


 

L’abstraction

L’abstraction consiste à masquer à l’utilisateur les détails inutiles. Ce dernier peut ainsi suivre sa propre logique sans avoir à prendre en compte la complexité cachée et sous-jacente.

L’héritage

L’héritage signifie qu’une classe B hérite des attributs et méthodes de la classe A. Cela fait gagner énormément de temps

Le polymorphisme

Le polymorphisme est un concept clé en programmation orientée objet (POO) qui permet aux objets de différentes classes d'utiliser des méthodes portant le même nom mais de se comporter de manière différente selon la classe à laquelle ils appartiennent. Ce concept permet une interaction plus flexible et plus intuitive avec les objets dans un système informatique.

Exemple : Dans cet exemple, la méthode demarrer() est définie dans la classe de base Vehicule et est ensuite redéfinie dans chaque sous-classe (Voiture, Moto, Bateau). Chaque sous-classe a une implémentation différente de la méthode demarrer(), adaptée à son type spécifique. Cela illustre le polymorphisme : la capacité d'un appel de méthode à exécuter différentes opérations selon l'instance de classe sur laquelle il est effectué.


class Vehicule:
    def demarrer(self):
        print("Le véhicule démarre de manière générique.")

class Voiture(Vehicule):
    def demarrer(self):
        print("La voiture démarre avec une clé.")

class Moto(Vehicule):
    def demarrer(self):
        print("La moto démarre avec un bouton-poussoir.")

class Bateau(Vehicule):
    def demarrer(self):
        print("Le bateau démarre avec un interrupteur.")

# Liste de véhicules
vehicules = [Voiture(), Moto(), Bateau()]

# Démonstration du polymorphisme
for vehicule in vehicules:
    vehicule.demarrer()

Comment apprendre la Programmation Orientée Objet ? 

La POO est une méthode de développement très prisée et donc très populaire. Pour l’apprendre, vous pouvez tenter de vous former par vous même, via de cours gratuits en ligne ou des contenus pdfs. Pour cela, mieux vaut être bien accroché et très autonome, car personne ne pourra répondre à vos questions ! 

Une autre option peut être de suivre une formation payante, avec un véritable accompagnement pédagogique et des exercices et projets à réaliser. Chez Jedha, vous pouvez apprendre la POO via la maîtrise du langage Python et sur des application liées au domaine de la Data. Pour cela vous avez 3 options :  

  1. Suivre nos 2 formations gratuites (Débutant et Avancé) sur notre plateforme en ligne JULIE. Pour compléter votre apprentissage, vous pouvez également télécharger notre cheat sheet en PDF, qui résume les concepts essentiels de la Programmation Orientée Objet en Python.
  2. Suivre notre formation pour débutants en Data (75h), avec 2 jours consacrés à Python et à la POO. 
  3. Participer à notre formation Data Scientist(450h) avec 1 semaine consacrée à Python et à la programmation orientée objet. 

Enfin, si avant de vous lancer dans l'apprentissage de Python et de la POO, vous avez besoin d’une remise à niveau en informatique, vous pouvez également suivre des cours particuliers en informatique.

Soirée Portes Ouvertes Jedha BootcampSoirée Portes Ouvertes Jedha Bootcamp
Antoine Krajnc
Antoine Krajnc
CEO & Fondateur
Antoine est le CEO et fondateur de Jedha. Diplômé d’Audencia Business School et de UC Berkeley, Antoine a travaillé pendant plus de 3 ans en tant que Business Analyst à San Francisco et à Paris. Il a ensuite fondé sa première entreprise Evohé qu’il a vendu pour repartir dans la Silicon Valley et fonder le cours de Data Analytics de Product School, le plus grand bootcamp de Product Management des US, qu’il a enseigné pendant 2 ans. De retour en France, il a fondé Jedha Bootcamp.