École Privée d’Ingénierie du Niger — L’école du nouveau monde

✉ elearning@epiniger.edu.ne    🌐 epiniger.edu.ne

Unité d’enseignement : Master GL · S2 · UE3 — Environnement de développement

  • Python

    Python est devenu un langage central du génie logiciel : scripts d’automatisation et d’administration, services web et API, science des données, intelligence artificielle, prototypage. Ce cours, de niveau Master, ne se limite pas à la syntaxe : il vise la maîtrise idiomatique du langage (modèle de données, fonctions de première classe, générateurs, décorateurs), la conception orientée objet « pythonique » (dataclasses, propriétés, méthodes spéciales, MRO), la robustesse (exceptions, gestionnaires de contexte, typage statique), l’analyse de données avec NumPy et pandas, et le développement web avec Flask et Django, accompagné de tests automatisés (pytest) et de bonnes pratiques d’industrialisation (environnements virtuels, PEP 8, outils d’analyse). Les exemples sont tirés de cas nigériens : transactions mobile money, gestion des notes d’un établissement de Niamey, statistiques régionales.

    Objectifs d’apprentissage

    • Écrire du code Python idiomatique et efficace en exploitant les structures de données natives et leurs complexités.
    • Utiliser fonctions d’ordre supérieur, fermetures, décorateurs et générateurs.
    • Concevoir des classes robustes (dataclasses, propriétés, exceptions métier, gestionnaires de contexte) et organiser un projet en paquets.
    • Analyser et nettoyer des données avec NumPy et pandas, et produire des indicateurs.
    • Développer, tester et sécuriser une API web avec Flask ou Django.

    Prérequis

    Algorithmique et structures de données, programmation orientée objet (Java ou C++), notions de bases de données relationnelles et de HTTP.

    Plan du cours

    1. Leçon 1 — Python avancé : types, structures de données, fonctions et générateurs
    2. Leçon 2 — Programmation orientée objet, exceptions, fichiers et organisation du code
    3. Leçon 3 — Calcul scientifique et analyse de données avec NumPy et pandas
    4. Leçon 4 — Développement web avec Flask et Django, tests et qualité du code

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE (60 h, 3 crédits). Évaluation : contrôle continu (TP notés, mini-projet d’API avec tests : 40 %) et examen terminal (60 %) comportant lecture de code, prédiction de résultats et écriture de fonctions.

    Bibliographie

    • Luciano Ramalho, Fluent Python, O’Reilly, 2e éd., 2022.
    • Mark Lutz, Learning Python, O’Reilly.
    • Wes McKinney, Python for Data Analysis, O’Reilly, 3e éd.
    • Miguel Grinberg, Flask Web Development, O’Reilly.
    • Documentation officielle : docs.python.org (tutoriel, référence du langage, PEP 8), numpy.org, pandas.pydata.org, docs.djangoproject.com.
  • Programmation web mobile

    Au Niger comme dans toute l’Afrique de l’Ouest, le téléphone mobile est le premier, et souvent le seul, point d’accès à Internet : services de mobile money, e-administration, plateformes scolaires et commerce en ligne doivent être conçus pour des smartphones d’entrée de gamme et des réseaux 3G/4G parfois instables. Ce cours forme l’ingénieur à concevoir et développer des applications web et mobiles performantes, accessibles et sûres. Il couvre les fondements du web côté client (HTML5 sémantique, CSS3, conception responsive « mobile first »), le JavaScript moderne et les frameworks à composants, la consommation d’API REST et la sécurité côté client, les applications web progressives (PWA) fonctionnant hors ligne, et enfin le développement mobile natif, hybride et multiplateforme (Flutter, React Native) jusqu’à la publication sur les magasins d’applications.

    Objectifs d’apprentissage

    • Réaliser des interfaces web sémantiques, accessibles et responsives selon l’approche « mobile first ».
    • Programmer en JavaScript moderne (ES2015+) : modules, asynchronisme, manipulation du DOM, composants.
    • Consommer des API REST de façon robuste et sécurisée (JWT, CORS, gestion des erreurs, protection contre XSS).
    • Construire une application web progressive utilisable hors ligne (Service Worker, cache, IndexedDB).
    • Choisir une stratégie mobile (native, hybride, multiplateforme), développer, tester et publier une application.

    Prérequis

    Bases de HTML/CSS, programmation (Java, Python ou C++), notions de réseaux et du protocole HTTP, bases de données.

    Plan du cours

    1. Leçon 1 — HTML5, CSS3 et conception responsive « mobile first »
    2. Leçon 2 — JavaScript moderne et frameworks front-end à composants
    3. Leçon 3 — Consommation d’API REST, sécurité côté client et applications web progressives
    4. Leçon 4 — Développement d’applications mobiles natives et multiplateformes, tests et publication

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE (60 h, 3 crédits). La maquette ne précise pas le mode d’évaluation ; il est proposé un contrôle continu (TP et projet d’application mobile en binôme avec démonstration : 50 %) et un examen terminal écrit (50 %).

    Bibliographie

    • Ethan Marcotte, Responsive Web Design, A Book Apart.
    • Marijn Haverbeke, Eloquent JavaScript, No Starch Press (disponible en ligne).
    • David Flanagan, JavaScript: The Definitive Guide, O’Reilly, 7e éd., 2020.
    • MDN Web Docs (Mozilla), developer.mozilla.org — référence HTML, CSS, JavaScript et API web.
    • W3C, Web Content Accessibility Guidelines (WCAG) 2.1 ; OWASP, Mobile Application Security Verification Standard (MASVS).
    • Documentation officielle de Flutter (docs.flutter.dev) et de React Native (reactnative.dev).
  • Programmation orientée objet et C++

    Le C++ reste un langage de référence pour les logiciels où la performance et la maîtrise des ressources sont déterminantes : systèmes embarqués, moteurs de bases de données, logiciels de télécommunication, finance haute fréquence, jeux vidéo, bibliothèques scientifiques. Ce cours approfondit la programmation orientée objet à travers le C++ moderne (normes C++11 à C++20) : conception de classes robustes, héritage simple et multiple, polymorphisme dynamique, gestion déterministe des ressources (RAII, règle des 0/3/5, pointeurs intelligents), sécurité face aux exceptions et programmation générique (templates, bibliothèque standard STL, lambdas). Les exemples s’appuient sur des cas concrets : gestion de montants en FCFA, moyens de paiement, gestion de notes d’une école de Niamey, traitement de lots de transactions mobile money. Les TP se font en ligne de commande avec g++/clang++ et CMake, avec détection des fuites mémoire.

    Objectifs d’apprentissage

    • Concevoir des classes C++ encapsulées, correctement construites, copiées et détruites.
    • Mettre en œuvre l’héritage (y compris multiple et virtuel) et le polymorphisme dynamique en maîtrisant la liaison dynamique.
    • Gérer la mémoire sans fuite ni double libération grâce à RAII, à la sémantique de déplacement et aux pointeurs intelligents.
    • Écrire du code sûr face aux exceptions (garanties basique, forte, sans échec).
    • Utiliser et écrire du code générique : templates, conteneurs, itérateurs et algorithmes de la STL.

    Prérequis

    Algorithmique, programmation impérative (C ou Java), notions de modélisation objet UML (classes, associations, héritage).

    Plan du cours

    1. Leçon 1 — Classes, encapsulation, constructeurs et surcharge d’opérateurs en C++
    2. Leçon 2 — Héritage simple et multiple, polymorphisme et fonctions virtuelles
    3. Leçon 3 — Gestion de la mémoire, sémantique de déplacement, pointeurs intelligents et exceptions
    4. Leçon 4 — Programmation générique : templates, STL et lambdas

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE (60 h, 3 crédits). Évaluation : contrôle continu (TP notés et mini-projet C++ : 40 %) et examen terminal écrit (60 %) comprenant lecture de code, prédiction de sorties et conception de classes.

    Bibliographie

    • Bjarne Stroustrup, The C++ Programming Language, 4e éd., Addison-Wesley, 2013.
    • Bjarne Stroustrup, Programming: Principles and Practice Using C++, Addison-Wesley.
    • Scott Meyers, Effective Modern C++, O’Reilly, 2014.
    • Nicolai M. Josuttis, The C++ Standard Library: A Tutorial and Reference, Addison-Wesley.
    • C++ Core Guidelines (B. Stroustrup, H. Sutter), isocpp.github.io ; référence en ligne cppreference.com.
  • Architecture logicielle

    L’architecture logicielle est l’ensemble des décisions structurantes d’un système : sa décomposition en éléments, les relations entre ces éléments et les principes qui gouvernent leur évolution. Ce cours prépare l’ingénieur génie logiciel à concevoir, documenter et évaluer l’architecture d’applications d’entreprise : plateformes de paiement mobile, systèmes bancaires, portails d’e-gouvernement, applications de gestion scolaire. Il articule trois niveaux : les principes de conception orientée objet (SOLID, couplage, cohésion, patrons GoF), les styles d’architecture (couches, MVC, hexagonale, microservices, événementiel) et les méthodes d’évaluation (scénarios de qualité, ATAM, calculs de disponibilité et de performance, dette technique). Les TP portent sur la documentation d’une architecture (modèle C4, ADR) et la restructuration d’une application monolithique.

    Objectifs d’apprentissage

    • Documenter une architecture selon plusieurs vues (4+1, C4) et consigner les décisions dans des ADR.
    • Traduire des exigences de qualité (ISO/IEC 25010) en scénarios mesurables et en tactiques architecturales.
    • Appliquer les principes SOLID et les patrons de conception pour obtenir un code faiblement couplé et fortement cohésif.
    • Comparer et choisir un style d’architecture adapté au contexte (taille d’équipe, charge, contraintes réseau).
    • Évaluer une architecture (ATAM, disponibilité, latence, métriques de Martin) et piloter la dette technique.

    Prérequis

    Modélisation objet UML, programmation Java ou Python orientée objet, bases de données relationnelles, notions de réseaux et de protocole HTTP.

    Plan du cours

    1. Leçon 1 — Fondements de l’architecture logicielle : vues, qualités et décisions
    2. Leçon 2 — Principes de conception, SOLID et patrons de conception
    3. Leçon 3 — Styles et patrons d’architecture : couches, MVC, hexagonale, microservices, événementiel
    4. Leçon 4 — Évaluation d’architectures, disponibilité, performance et dette technique

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP et 30 h de TPE (60 h, 3 crédits). Évaluation : contrôle continu (dossier d’architecture réalisé en binôme et TP : 40 %) et examen terminal écrit (60 %) comportant une étude de cas.

    Bibliographie

    • Len Bass, Paul Clements, Rick Kazman, Software Architecture in Practice, Addison-Wesley (SEI Series).
    • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.
    • Robert C. Martin, Clean Architecture, Prentice Hall, 2017.
    • Martin Fowler, Patterns of Enterprise Application Architecture, Addison-Wesley, 2002.
    • Sam Newman, Building Microservices, O’Reilly.
    • Norme ISO/IEC 25010 — Modèle de qualité des systèmes et du logiciel ; ISO/IEC/IEEE 42010 — Description d’architecture.