É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 · S1 · UE3 — Environnement de développement

  • Programmation Java

    Java reste l’un des langages les plus utilisés dans les systèmes d’information critiques : core banking, plateformes de monnaie électronique, systèmes de facturation des opérateurs télécoms, applications Android et back-ends d’e-gouvernement. Ce cours donne aux étudiants du Master Génie Logiciel une maîtrise professionnelle de Java SE moderne (JDK 17 ou 21, versions à support long) : programmation orientée objet rigoureuse, gestion des erreurs, collections et programmation fonctionnelle avec les streams, entrées/sorties, interfaces graphiques, concurrence et accès aux bases de données avec JDBC. Les 20 heures de TP construisent progressivement une application réelle, « ScolaPay », qui gère les frais de scolarité d’une école de Niamey et leur paiement par mobile money, avec Maven, Git et JUnit 5.

    Objectifs d’apprentissage

    • Mettre en place un environnement professionnel (JDK, IDE, Maven, Git) et expliquer le fonctionnement de la JVM.
    • Concevoir des classes robustes : encapsulation, héritage, interfaces, polymorphisme, records, énumérations.
    • Gérer les erreurs avec les exceptions et écrire du code générique et typé.
    • Choisir la collection adaptée et traiter des données avec les lambdas et l’API Stream.
    • Lire et écrire des fichiers, construire une interface graphique simple et programmer des traitements concurrents sûrs.
    • Accéder à une base relationnelle avec JDBC de façon sécurisée (requêtes préparées, transactions) et tester avec JUnit.

    Prérequis

    Algorithmique, programmation dans un langage impératif, bases de la modélisation objet (UML) et du langage SQL.

    Plan du cours

    1. Leçon 1 — Plateforme Java et programmation orientée objet
    2. Leçon 2 — Exceptions, génériques, collections et streams
    3. Leçon 3 — Entrées/sorties, interfaces graphiques et programmation concurrente
    4. Leçon 4 — Accès aux bases de données avec JDBC, architecture en couches et tests

    Modalités d’évaluation

    Volume horaire : 10 h de cours (CM), 10 h de TD, 20 h de TP, 40 h de TPE ; 4 crédits. Évaluation : contrôle continu (50 % : TP notés, projet ScolaPay remis sur un dépôt Git, quiz) et examen terminal (50 % : épreuve écrite et/ou sur machine).

    Bibliographie

    • Joshua Bloch, Effective Java, 3e éd., Addison-Wesley.
    • Cay S. Horstmann, Core Java, vol. I et II, Pearson / Oracle Press.
    • Brian Goetz et al., Java Concurrency in Practice, Addison-Wesley.
    • Robert C. Martin, Clean Code, Prentice Hall.
    • Oracle, The Java Tutorials et spécification du langage Java (JLS) — docs.oracle.com/javase.
  • Algorithmes et structures de données avancées

    Ce cours approfondit l’algorithmique pour des ingénieurs appelés à concevoir des systèmes qui doivent tenir la charge : un opérateur de mobile money qui traite des millions de transactions par jour, une plateforme d’e-gouvernement qui indexe l’état civil de tout un pays, une application logistique qui optimise des tournées entre Niamey, Dosso, Tahoua et Maradi. Il s’agit de savoir analyser rigoureusement le coût d’un algorithme, de choisir la structure de données adaptée (tas, table de hachage, arbre équilibré, B-arbre, graphe) et de concevoir des solutions efficaces à l’aide des grands paradigmes (diviser pour régner, glouton, programmation dynamique). Les TP se font en Python (ou Java) avec mesures expérimentales de performances.

    Objectifs d’apprentissage

    • Évaluer la complexité temporelle et spatiale d’un algorithme (notations O, Ω, Θ, analyse amortie) et résoudre des récurrences par le théorème maître.
    • Choisir et justifier un algorithme de tri ou de recherche selon les données et contraintes.
    • Implémenter et analyser tas, tables de hachage, arbres AVL, rouge-noir et B-arbres.
    • Appliquer les algorithmes de graphes (BFS, DFS, tri topologique, Dijkstra, Bellman-Ford, Prim, Kruskal) à des problèmes réels.
    • Concevoir des solutions par diviser pour régner, stratégie gloutonne et programmation dynamique, et prouver leur correction.
    • Valider expérimentalement les analyses théoriques par des mesures.

    Prérequis

    Algorithmique et structures de données de licence (tableaux, listes, piles, files, arbres binaires, récursivité), mathématiques discrètes (logarithmes, sommes, raisonnement par récurrence), un langage de programmation.

    Plan du cours

    1. Leçon 1 — Complexité, récurrences, tri et recherche
    2. Leçon 2 — Structures de données avancées : tas, hachage, arbres équilibrés et B-arbres
    3. Leçon 3 — Algorithmes de graphes : parcours, plus courts chemins et arbres couvrants
    4. Leçon 4 — Paradigmes de conception : diviser pour régner, glouton et programmation dynamique

    Modalités d’évaluation

    Volume horaire : 20 h de cours (CM), 10 h de TD, 10 h de TP, 40 h de TPE ; 4 crédits. Évaluation : contrôle continu (40 % : TP avec rapport de mesures, quiz, devoir) et examen terminal écrit (60 %).

    Bibliographie

    • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein, Introduction to Algorithms, MIT Press (trad. française : Algorithmique, Dunod).
    • Robert Sedgewick, Kevin Wayne, Algorithms, Addison-Wesley.
    • Jon Kleinberg, Éva Tardos, Algorithm Design, Pearson.
    • Donald E. Knuth, The Art of Computer Programming, vol. 1 et 3, Addison-Wesley.
    • Steven S. Skiena, The Algorithm Design Manual, Springer.
  • Programmation logique et fonctionnelle

    La programmation impérative décrit comment calculer, pas à pas, en modifiant un état. Les paradigmes déclaratifs décrivent ce que l’on veut obtenir : la programmation fonctionnelle compose des fonctions pures et immuables ; la programmation logique énonce des faits et des règles et laisse un moteur d’inférence chercher les solutions. Ces paradigmes irriguent aujourd’hui tout le génie logiciel : lambdas et streams de Java, fonctions d’ordre supérieur de JavaScript et Python, MapReduce et Spark pour le traitement de données massives, moteurs de règles métier dans les banques, requêtes Datalog et systèmes experts. Ce cours en présente les fondements théoriques (lambda-calcul, unification, résolution SLD) et la pratique en Haskell et en Prolog (SWI-Prolog), avec des cas nigériens : calcul des frais scolaires, traitement de transactions de mobile money, éligibilité à un microcrédit.

    Objectifs d’apprentissage

    • Situer les paradigmes déclaratifs et en expliquer les avantages (raisonnement équationnel, parallélisme, tests).
    • Réduire des lambda-termes et expliquer les stratégies d’évaluation.
    • Écrire des programmes fonctionnels typés utilisant récursivité, filtrage par motif et fonctions d’ordre supérieur (map, filter, fold).
    • Calculer un unificateur le plus général et dérouler une résolution SLD avec retour arrière.
    • Écrire des programmes Prolog sur les listes, maîtriser la coupure et la négation par échec, réaliser un petit système expert.
    • Transposer ces idées dans les langages industriels (Java, Python, JavaScript).

    Prérequis

    Algorithmique, programmation dans un langage impératif, logique propositionnelle et notions de logique des prédicats.

    Plan du cours

    1. Leçon 1 — Paradigmes déclaratifs et lambda-calcul
    2. Leçon 2 — Programmation fonctionnelle : types, récursivité et fonctions d’ordre supérieur
    3. Leçon 3 — Programmation logique : faits, règles, unification et résolution
    4. Leçon 4 — Prolog avancé : listes, contrôle, systèmes experts et intégration des paradigmes

    Modalités d’évaluation

    Volume horaire : 10 h de cours (CM), 10 h de TD, 10 h de TP, 30 h de TPE ; 3 crédits. Évaluation : contrôle continu (40 % : TP notés en Haskell et Prolog, quiz) et examen terminal écrit (60 %).

    Bibliographie

    • Harold Abelson, Gerald Jay Sussman, Structure and Interpretation of Computer Programs, MIT Press.
    • Graham Hutton, Programming in Haskell, Cambridge University Press.
    • Ivan Bratko, Prolog Programming for Artificial Intelligence, Addison-Wesley / Pearson.
    • Leon Sterling, Ehud Shapiro, The Art of Prolog, MIT Press.
    • Documentation officielle : www.haskell.org et www.swi-prolog.org.