Appliquez les bases de la programmation orientée objet

Vous savez maintenant manipuler les premières briques d’un programme : variables, types, conditions, boucles et fonctions. Ces notions permettent déjà d’écrire une logique simple. Mais, dès qu’un programme grandit, une nouvelle question apparaît : comment organiser cette logique pour qu’elle reste lisible ?

La programmation orientée objet, souvent abrégée en POO, apporte une réponse à cette question. Dans un premier temps, retenez qu’elle permet de regrouper les informations et les actions qui concernent un même élément du programme.

Dans ce chapitre, vous allez découvrir les notions de classe, d’objet, d’attribut et de méthode. L’objectif n’est pas de maîtriser toute la POO, mais de savoir reconnaître ces éléments dans un code existant et de comprendre leur rôle.

Comprenez pourquoi on organise le code en objets

Imaginez que vous écrivez un programme qui manipule des produits. Pour chaque produit, vous avez plusieurs informations :

  • son nom ;

  • son prix ;

  • son stock ;

  • sa disponibilité.

Avec des variables séparées, cela pourrait ressembler à ceci :

nom_produit = "Sac à dos"
prix_produit = 45
stock_produit = 12

Cela fonctionne pour un seul produit. Mais si vous devez gérer plusieurs produits, la situation devient vite plus difficile à suivre :

nom_produit_1 = "Sac à dos"
prix_produit_1 = 45
stock_produit_1 = 12

nom_produit_2 = "Carnet"
prix_produit_2 = 8
stock_produit_2 = 0

Plus le programme grandit, plus il devient difficile de savoir quelles variables vont ensemble.

La programmation orientée objet propose une autre approche : regrouper les informations qui décrivent un même élément. Au lieu de manipuler des données isolées, vous manipulez des données regroupées dans une structure de données appelée objet. Un objet représente ainsi une donnée complexe du programme.

Par exemple, un produit peut être représenté comme un objet :

produit
    nom = "Sac à dos"
    prix = 45
    stock = 12

Ici,nom,prixetstockne sont plus des informations séparées au hasard. Elles appartiennent au même objet :produit.

Distinguez une classe et un objet

Pour comprendre la POO, commencez par distinguer deux notions : la classe et l’objet.

Une classe est un modèle. Elle décrit les informations et les actions qu’un certain type d’élément peut avoir.

Un objet est un exemple concret créé à partir de ce modèle.

Prenons une analogie simple : une fiche produit vide dans un catalogue.

La fiche vide indique qu’un produit doit avoir :

  • un nom ;

  • un prix ;

  • un stock.

Mais tant que cette fiche n’est pas remplie, elle ne représente aucun produit précis. Elle sert seulement de modèle.

En pseudo-code, la classe pourrait ressembler à ceci :

CLASSE Produit
    nom
    prix
    stock
FIN CLASSE

Lisez cette classe comme une description générale. Elle ne parle pas encore d’un produit précis. Elle dit simplement : “dans ce programme, chaque produit aura trois informations : un nom, un prix et un stock”.

Autrement dit, la classeProduitsert de modèle commun. Elle évite de réinventer la structure de chaque produit à chaque fois. Dès que le programme a besoin de représenter un produit, il peut partir de ce modèle.

À ce stade, la classe ressemble donc à une fiche vide :

Produit
    nom = ...
    prix = ...
    stock = ...

Les trois lignesnom,prixetstockindiquent les informations à prévoir, mais elles ne contiennent pas encore les valeurs d’un produit réel.

Quand on crée un objet concret à partir d’une classe, on dit qu’on instancie la classe. Chaque objet obtenu est alors appelé une instance de cette classe. Autrement dit, « objet » et « instance » désignent la même chose : un élément concret construit à partir du modèle.

Une classe sert de modèle ; chaque objet est une instance concrète remplie avec ses propres valeurs.
Une classe sert de modèle - chaque objet est une instance concrète remplie avec ses propres valeurs

À partir de cette classe, vous pouvez donc créer plusieurs instances. En pseudo-code, on utilise ici le mot-cléNOUVEAUpour signaler qu’on ne copie pas une valeur existante, mais qu’on crée un nouvel objet basé sur le modèleProduit:

produit_1 = NOUVEAU Produit
produit_1.nom = "Sac à dos"
produit_1.prix = 45
produit_1.stock = 12

produit_2 = NOUVEAU Produit
produit_2.nom = "Carnet"
produit_2.prix = 8
produit_2.stock = 0

produit_1etproduit_2sont deux instances distinctes de la classeProduit. Elles suivent le même modèle, mais elles ont chacune leurs propres valeurs.

Dans un code existant, repérer les classes peut vous aider à comprendre les grands éléments manipulés par le programme : produits, utilisateurs, commandes, fichiers, messages, etc.

Reconnaissez les attributs et les méthodes

Une classe peut contenir deux types d’éléments : des attributs et des méthodes.

Les attributs sont les informations portées par un objet.

Dans l’exemple du produit, les attributs sont :

nom
prix
stock

Ils décrivent l’état du produit à un moment donné.

Les méthodes, elles, sont les actions que l’objet peut effectuer, ou les actions que le programme peut effectuer à partir de cet objet. Une méthode ressemble beaucoup à une fonction, mais elle est attachée à une classe.

Par exemple, un produit peut avoir une méthode qui vérifie s’il est disponible :

CLASSE Produit
    nom
    prix
    stock

    METHODE est_disponible()
        SI stock > 0
            retourner true
        SINON
            retourner false
        FIN SI
    FIN METHODE
FIN CLASSE

Dans cet exemple :

  • nom,prixetstocksont des attributs ;

  • est_disponible()est une méthode.

La méthode utilise l’attributstockpour décider si le produit est disponible ou non.

Vous pourriez ensuite utiliser cette méthode ainsi :

SI produit_1.est_disponible() = true
    afficher "Produit disponible"
SINON
    afficher "Produit indisponible"
FIN SI

Vous retrouvez ici des notions déjà vues : une condition, un booléen, et une logique de décision. La POO ne remplace pas ces notions : elle les organise autrement.

Comprenez l’idée d’encapsulation

Quand un programme utilise des objets, il devient important de ne pas modifier leurs informations n’importe comment. C’est là qu’intervient l’encapsulation.

L’encapsulation consiste à regrouper les données et les actions liées dans une même classe, puis à contrôler la manière dont ces données sont utilisées ou modifiées.

Prenons un exemple simple. Un stock ne devrait pas devenir négatif. Si un produit a2unités en stock, vous ne devriez pas pouvoir en retirer5sans vérifier la règle.

Sans contrôle, on pourrait imaginer une modification directe :

produit.stock = produit.stock - 5

Si le stock vaut2, le résultat devient-3, ce qui n’a pas de sens pour une quantité disponible.

Avec une méthode, on peut encadrer la modification :

CLASSE Produit
    nom
    prix
    stock

    METHODE retirer_du_stock(quantité)
        SI quantité <= stock
            stock = stock - quantité
            retourner true
        SINON
            retourner false
        FIN SI
    FIN METHODE
FIN CLASSE

Ici, la méthode vérifie d’abord si la quantité demandée est disponible. Si oui, elle modifie le stock. Sinon, elle refuse la modification.

L’encapsulation aide donc à protéger la cohérence des données. Elle évite que le programme mette un objet dans un état impossible ou incohérent.

Découvrez l’héritage

Vous croiserez parfois une autre notion de POO : l’héritage.

L’héritage permet de créer une classe plus spécialisée à partir d’une classe plus générale. L’idée est d’éviter de répéter les mêmes informations dans plusieurs classes.

Reprenons l’exemple des produits. Tous les produits ont au moins un nom et un prix. Vous pouvez donc créer une classe généraleProduit:

CLASSE Produit
    nom
    prix
FIN CLASSE

Ensuite, certains produits peuvent avoir des informations supplémentaires. Par exemple, un produit physique peut aussi avoir un poids, car il doit être livré. Au lieu de réécrirenometprix, on peut dire queProduitPhysiquehérite deProduit:

CLASSE ProduitPhysique HERITE DE Produit
    poids
FIN CLASSE

Cela signifie queProduitPhysiquereprend ce qui est déjà prévu dansProduit, puis ajoute ce qui lui est propre : le poids.

On peut le lire ainsi :

ProduitPhysique contient :
    nom
    prix
    poids

nometprixviennent du modèle généralProduit.poidsest ajouté par le modèle plus spécialiséProduitPhysique.

Vous n’avez pas besoin d’aller plus loin à ce stade. Retenez simplement que l’héritage sert à créer une relation entre un modèle général et un modèle plus spécialisé. À ce stade, vous n’avez pas besoin d’utiliser l’héritage vous-même. L’objectif est seulement de reconnaître cette notion lorsque vous la croisez dans un code existant.

Revenez sur la définition de la POO

Maintenant que vous avez découvert les classes, les objets, les attributs, les méthodes, l’encapsulation et l’héritage, vous pouvez enrichir la définition donnée en début de chapitre.

Au départ, on a dit que la POO servait à regrouper les informations et les actions concernant un même élément du programme. C’est un bon point de départ, mais c’est réducteur. En réalité, la POO est avant tout une façon de modéliser un programme : vous identifiez les éléments importants du domaine (produits, commandes, utilisateurs, plats…), vous les représentez sous forme de classes, puis vous décrivez comment ces objets interagissent entre eux.

On résume souvent la POO autour de quatre grandes idées :

  • Modélisation : représenter des éléments du monde réel ou du domaine métier sous forme d’objets.

  • Encapsulation : protéger les données d’un objet et n’exposer que ce qui a du sens pour l’extérieur.

  • Héritage : réutiliser et spécialiser une classe existante, pour éviter la duplication et exprimer des relations entre concepts.

  • Polymorphisme : permettre à plusieurs objets de répondre à une même action de manière différente, ce qui rend le code plus flexible.

Vous n’avez pas besoin de maîtriser tout de suite ces quatre notions. Retenez surtout qu’elles font partie du paysage de la POO et que vous les rencontrerez de plus en plus au fil de votre parcours.

À vous de jouer

Reprenez le menu du chapitre 3 : chaque plat a un nom, un prix et une disponibilité. Vous allez maintenant organiser ces informations en POO.

Votre mission, en pseudo-code :

  1. Modélisez une classePlatavec trois attributs :nom,prix,disponible.

  2. Ajoutez une méthodeafficher_carte()sur cette classe. Elle doit retourner une chaîne de la forme"Pizza - 12 € (disponible)"ou"Salade - 8 € (indisponible)"selon l’état du plat.

  3. Instanciez deux plats de votre choix (par exemple Pizza et Salade).

  4. Appelezafficher_carte()sur chaque plat et écrivez la sortie console attendue.

Points de vigilance :

  • La méthode utilise les attributs de l’objet (nom,prix,disponible), pas des variables extérieures.

  • Une même classe donne lieu à plusieurs instances, chacune avec ses propres valeurs.

  • Utilisez une condition à l’intérieur deafficher_carte()pour choisir entre"(disponible)"et"(indisponible)".

En résumé

  • La programmation orientée objet aide à organiser le code autour d’éléments importants du programme.

  • Une classe est un modèle ; un objet est un élément concret créé à partir de ce modèle.

  • Un attribut est une information portée par un objet.

  • Une méthode est une action liée à une classe ou à un objet.

  • L’encapsulation regroupe les règles importantes dans des méthodes pour garder des objets cohérents.

Vous savez maintenant reconnaître les bases de la programmation orientée objet. Dans le prochain chapitre, vous allez revenir à une situation très concrète : comprendre les erreurs, manipuler des fichiers et lire un code existant avec méthode.

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best