Accueil Cours Programmation orientée objet
🧱 Avancé Avancé

Programmation orientée objet

Classes, objets, constructeurs et héritage en MicroPython. Organiser son code pour le rendre réutilisable et lisible.

Concepts fondamentaux

La programmation orientée objet (POO) regroupe des données (attributs) et des fonctions (méthodes) dans une classe. À partir d'une classe, on crée des instances (objets).

Tu utilises déjà des objets sans le savoir :

Le constructeur __init__

Le constructeur __init__(self) est appelé automatiquement à la création de l'objet. self est la référence à l'objet en cours de création.

Application sur ESP32

On peut créer une classe LED pour encapsuler la logique de clignotement :

Héritage

L'héritage permet à une classe enfant de réutiliser et d'étendre les méthodes d'une classe parente.

Algorithme PGCD

La récursivité est un concept fondamental : une fonction qui s'appelle elle-même. L'algorithme d'Euclide pour le PGCD (Plus Grand Commun Diviseur) en est un exemple classique.

💡 Comment ça marche

pgcd(48, 18) → pgcd(18, 12) → pgcd(12, 6) → pgcd(6, 0) → retourne 6. La condition if b == 0 est le cas de base qui arrête la récursion.


Exemples commentés

Chaque exemple est précédé de son contexte. Le code est affiché directement — bouton copier + lien GitHub disponibles.

🧱 Classes et objets

Programmation orientée objet en MicroPython — classes, modules, héritage.

1 Concepts fondamentaux de la POO

La programmation orientée objet (POO) regroupe des données (attributs) et des fonctions (méthodes) dans une classe. À partir d'une classe, on crée des instances (objets).

Vous utilisez déjà des objets sans le savoir :

led = Pin(2, Pin.OUT)    # led est un objet de la classe Pin
np = NeoPixel(Pin(26), 8)  # np est un objet de la classe NeoPixel
np.write()               # write() est une méthode de l'objet np

Progression des exemples :

  • classe-1.py : définir une classe avec des attributs directs
  • classe-2.py : utiliser le constructeur __init__(self)
  • classe-3.py : passer des paramètres au constructeur + ajouter une méthode

Le constructeur __init__(self, ...) est appelé automatiquement à la création de l'objet. self est la référence à l'objet en cours de création. L'héritage permet à une classe enfant de réutiliser et d'étendre les méthodes d'une classe parente.

classe-1.py — Première classe — attributs directs .python
cours-exemples/poo/classe-1.py
20 lignes GitHub
class Personne :
    nom = ""
    prenom = ""
    age = 0
    lieu_residence = ""

personne1 = Personne()
personne2 = Personne()

personne1.nom = "DELUNE"
personne1.prenom = "Claire"
personne1.age = "30"
personne1.lieu_residence = "METZ"

personne2.nom = "CELERT"
personne2.prenom = "Jacques"
personne2.age = "32"
personne2.lieu_residence = "NANCY"

print(personne1.nom)
classe-2.py — Constructeur __init__ simple .python
cours-exemples/poo/classe-2.py
14 lignes GitHub
class Personne :
    def __init__(self) :
        self.nom = ""
        self.prenom = ""
        self.age = "0"
        self.lieu_residence = ""
        
personne1 = Personne()
personne1.nom = "DELUNE"
personne1.prenom = "Claire"
personne1.age = "30"
personne1.lieu_residence = "METZ"

print(personne1.age)
classe-3.py — Paramètres au constructeur + méthode .python
cours-exemples/poo/classe-3.py
9 lignes GitHub
class Personne :
    def __init__(self) :
        self.nom = "DELUNE"
        self.prenom = "Claire"
        self.age = "30"
        self.lieu_residence = "METZ"
        
personne1 = Personne()
print(personne1.age)
pgcd.py — Algorithme PGCD récursif .python
cours-exemples/poo/pgcd.py
25 lignes GitHub
# PGCD : programme de calcul du PCGD de 2 entiers
# Auteur : Vincent HERMITANT - ENIM 2020
x = 20  
y = 70
diviseurs_x=[]    # creation liste vide pour diviseurs de x
diviseurs_y=[]    # creation liste vide pour diviseurs de y

# creation d'une fonction pour trouver les elements communs a deux listes
def inter(liste1, liste2):  
   liste_elements_communs = [value for value in liste1 if value in liste2]
   return liste_elements_communs

for a in range (1,max(x,y)+1):
    if x % a == 0 :            # si x est divisible par a
        diviseurs_x.append(a)  # ajout a la liste des diviseurs de x
    if y % a == 0 :            # si y est divisible par a
        diviseurs_y.append(a)  # ajout a la liste des diviseurs de y 
diviseurs_communs = inter(diviseurs_x, diviseurs_y)
plus_grand_commun_diviseur = max(diviseurs_communs)  # retourne le maxi 

print("x = ", x, "; y = ", y)
print ("Liste des diviseurs de x :",diviseurs_x)
print("Liste des diviseurs de y :",diviseurs_y)
print("Liste des diviseurs communs : ", diviseurs_communs)
print("PGCD : ", plus_grand_commun_diviseur)

Atelier 01 — Serveur web ESP32

Mets en pratique ces concepts avec un projet WiFi complet.

Démarrer l'atelier →