Перейти к содержимому

🐍 **Python – Refactoring : créer le module `set_query.py` | Modularité – Partie 10**

CodeEnJava

0:00 / 0:00

🐍 **Python – Refactoring : créer le module `set_query.py` | Modularité – Partie 10**

8 просмотров · 3 дня назад
CodeEnJava
62 подписчика
8 просмотров · 3 дня назад
🐍 *Python – Refactoring : créer le module `set_query.py` | Modularité – Partie 10* Dans cette dixième partie consacrée à la **modularité et au refactoring en Python**, nous finalisons le refactoring de notre projet de **gestion des participants répartis dans plusieurs groupes**. Après avoir progressivement extrait les différentes responsabilités du fichier `main.py` vers des modules spécialisés, nous nous attaquons à la dernière fonctionnalité importante du projet : **l'exécution de requêtes sur les ensembles de participants**. L'objectif est de créer le module : ```text set_query.py ``` Ce module met en œuvre un *mini-interpréteur de requêtes* capable d'analyser une instruction saisie par l'utilisateur, de vérifier sa validité et d'exécuter différentes opérations sur les ensembles. --- 🔧 Le problème avant le refactoring Dans la version initiale de l'application, toute la logique permettant d'afficher l'aide, de récupérer et analyser la requête, d'identifier les ensembles et les opérateurs, puis d'afficher le résultat était directement présente dans `main.py`. Cette partie du programme regroupait donc plusieurs responsabilités. Le refactoring consiste à extraire cette fonctionnalité dans un module spécialisé : `set_query.py`. --- 🧩 Les fonctions créées 🔹 `display_query_help()` Cette fonction affiche l'aide et les opérateurs disponibles : `UNION` `INTERSECTION` `DIFFERENCE` `SYMMETRIC_DIFFERENCE` Un exemple de requête est également proposé : ```text python union java intersection web ``` --- 🔎 `get_set()` Cette fonction permet de récupérer l'ensemble correspondant au nom d'un groupe. Elle centralise la recherche des ensembles et évite de multiplier les conditions dans le programme. Si l'ensemble demandé n'existe pas, la fonction retourne `None`. --- ⚙️ `execute_query()` Cette fonction constitue le cœur du mini-interpréteur. Elle reçoit la requête saisie par l'utilisateur et réalise plusieurs étapes : 1. conversion de la requête en majuscules ; 2. découpage avec `split()` ; 3. vérification de la syntaxe ; 4. identification des ensembles ; 5. analyse des opérateurs ; 6. application progressive des opérations ; 7. retour de l'ensemble résultant. Une requête doit respecter une syntaxe telle que : ```text ENSEMBLE OPERATEUR ENSEMBLE ``` ou : ```text ENSEMBLE OPERATEUR ENSEMBLE OPERATEUR ENSEMBLE ``` Les opérations sont exécutées **de gauche à droite**. Les opérateurs disponibles correspondent aux principales opérations sur les ensembles Python : `UNION` : réunit les éléments des ensembles ; `INTERSECTION` : conserve les éléments communs ; `DIFFERENCE` : conserve les éléments présents uniquement dans le premier ensemble ; `SYMMETRIC_DIFFERENCE` : conserve les éléments présents dans un seul des ensembles. --- ⚠️ Gestion des erreurs Le module utilise `ValueError` pour signaler les différentes erreurs : requête invalide ; ensemble inconnu ; opérateur inconnu. La fonction `execute_query()` est responsable de l'analyse et de l'exécution de la requête. La fonction `query()` est quant à elle chargée de l'interaction avec l'utilisateur : affichage de l'aide ; récupération de la requête ; appel de `execute_query()` ; affichage du résultat ; gestion des erreurs. L'affichage des participants est délégué au module : ```text display_participants.py ``` Nous continuons ainsi à appliquer un principe essentiel de la modularité : 👉 *une responsabilité clairement identifiée pour chaque fonction et chaque module.* --- 🧪 Validation du module Les tests réalisés permettent de valider le bon fonctionnement du module `set_query.py`. Le programme gère notamment : ✅ les requêtes simples et complexes ; ✅ plusieurs opérations successives ; ✅ les quatre opérations sur les ensembles ; ✅ les ensembles inconnus ; ✅ les opérateurs inconnus ; ✅ les erreurs de syntaxe ; ✅ les résultats ne contenant aucun participant. --- 📚 Notions abordées Dans cette vidéo, nous mettons notamment en œuvre : le refactoring ; la modularité ; la séparation des responsabilités ; les modules et les fonctions ; `upper()` et `split()` ; les ensembles Python ; les boucles et les conditions ; les exceptions ; `ValueError` et `try / except` ; la réutilisation de code entre plusieurs modules. --- 💻 Retrouvez le code du projet L'ensemble du code est disponible sur GitHub : [GitHub – CodeEnJava / 2026-seance-set-001](https://github.com/CodeEnJava/2026-se...) --- 🚀 Prochaine étape Avec cette vidéo, nous finalisons le refactoring de notre application consacrée à la **gestion des participants à l'aide des ensembles Python**. La prochaine vidéo sera consacrée à un *nouveau projet* et à une nouvelle étape importante : la **persistance des données à l'aide des fichiers**. 🐍 Rendez-vous dans la prochaine vidéo !