Aller au contenu

L'intérêt de la programmation objet

Alors peut-être que pour l’instant, quand vous codez en Python, vous faites surtout des petits scripts. Quelques variables, quelques fonctions, et hop, ça fait le taf.

Et franchement : c’est très bien.

Le problème, c’est que cette façon de coder commence à montrer ses limites dès que le programme devient un peu plus gros que “100 à 200 lignes dans un seul fichier”.

Et c’est exactement pour ça que la programmation orientée objet existe.


Quand votre code devient un joyeux bordel

Imaginons un programme très simple, par exemple un mini-jeu de combat au tour par tour.

Au début, on fait des trucs comme ça :

player_name = "Alice"
player_hp = 100
player_attack = 15

Puis on ajoute des fonctions :

def attack(target_hp):
    return target_hp - player_attack

Et ensuite… un ennemi :

enemy_name = "Gobelin"
enemy_hp = 50
enemy_attack = 8

Puis un deuxième ennemi. Puis un autre joueur. Puis des objets. Puis des effets.

Et très vite :

  • il y a des variables partout
  • on copie-colle du code
  • on ne sait plus trop qui modifie quoi
  • on rajoute des if partout à chaque nouvelle fonctionnalité

Le vrai problème

Le vrai problème, ce n’est pas que Python est mal foutu. Le vrai problème, c’est que le code ne correspond pas à la manière dont on pense le problème.

Dans votre tête, vous pensez en termes de :

  • joueur
  • ennemi
  • arme
  • points de vie
  • attaques

Mais dans le code, tout est éclaté :

  • des variables d’un côté
  • des fonctions de l’autre
  • aucune vraie structure

L’idée derrière la programmation orientée objet

La programmation orientée objet part d’une idée très simple :

Regrouper ce qui va ensemble.

Plutôt que d’avoir :

  • des variables éparpillées
  • des fonctions qui modifient tout et n’importe quoi

On crée des objets.

Un objet, c’est :

  • des données (ce qu’il a)
  • des actions (ce qu’il peut faire)

Par exemple :

  • un joueur a des points de vie
  • un joueur peut attaquer
  • un ennemi a aussi des points de vie
  • un ennemi peut aussi attaquer

Bref : un objet, c’est une “chose” cohérente du programme.


Ce que la POO change concrètement

Utiliser la programmation orientée objet permet :

  • d’écrire du code plus lisible
  • d’éviter énormément de duplication de code
  • de mieux organiser un projet
  • de faire évoluer un programme sans tout casser
  • de comprendre le code des autres (et des bibliothèques Python)

Quizz

Regardez ce code :

player_hp = 100
player_attaque = 20

def take_damage(damage):
    global player_hp
    player_hp -= damage
Quel est le principal problème de cette approche quand le programme devient plus gros ?
- Le code est trop lent
- Python ne gère pas les variables globales
- *Les données ayant trait au joueur ne sont pas groupées
> Si on ne groupe pas les données qui "vont ensemble", on peut vite se perdre quand le programme devient gros.

Exercice pratique

Sans écrire de code pour l’instant :

Pensez à un programme simple qui simule un combat entre un joueur et un ennemi. Listez :

  • les choses importantes du programme
  • ce qu’elles ont
  • ce qu’elles font

Si vous avez listé des “choses” avec des données et des actions… félicitations, vous venez de penser comme en programmation orientée objet.


En résumé

Pour l’instant, retenez surtout une chose :

La programmation orientée objet n’est pas là pour nous permettre de faire des choses qu'on ne pouvait faire par le passé. Son rôle est de nous permettre d'organiser le code de manière démesurément plus efficace.

Dans la page suivante, on va arrêter de parler théorie et commencer à écrire de la vraie POO en Python, avec des classes et des objets.