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

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

Filière : Master Professionnel en Informatique, option Génie Logiciel (MGL)

  • Ingénierie des composants : Java EE

    Ce cours de spécialité forme les étudiants au développement d’applications d’entreprise en Java selon une approche par composants, avec la plateforme Jakarta EE (anciennement Java EE) et, en comparaison, l’écosystème Spring. Les applications de gestion des banques, des opérateurs de mobile money, des administrations (e-gouvernement) et des établissements d’enseignement reposent souvent sur ce type d’architecture multi-tiers : composants web, composants métier transactionnels, persistance objet-relationnel et services web. Le cours suit un fil conducteur : la construction progressive d’une application de gestion des inscriptions et des paiements de frais de scolarité pour un établissement de Niamey, de la servlet à l’API REST sécurisée conteneurisée. Chaque leçon comporte un TP guidé.

    Objectifs d’apprentissage

    • Expliquer l’architecture de Jakarta EE (tiers, conteneurs, profils, spécifications) et déployer une application sur un serveur d’applications.
    • Développer la couche web avec servlets, JSP et Jakarta Faces, avec validation des entrées et protection contre les injections de script.
    • Concevoir des composants métier avec CDI et EJB et maîtriser les transactions.
    • Implémenter la persistance avec JPA (entités, relations, JPQL, verrouillage) en évitant les pièges de performance.
    • Exposer et sécuriser une API REST (Jakarta REST, JSON-B, Jakarta Security) et la déployer dans un conteneur Docker.
    • Comparer Jakarta EE, MicroProfile et Spring Boot pour choisir une pile technique.

    Prérequis

    Programmation orientée objet en Java (collections, exceptions, annotations, génériques), SQL et modèle relationnel, HTTP et HTML, notions d’UML et de Maven ou Git.

    Plan du cours

    1. Leçon 1 — La plateforme Jakarta EE : architecture, conteneurs et servlets
    2. Leçon 2 — Couche présentation : JSP, Jakarta Faces et validation
    3. Leçon 3 — Composants métier et persistance : CDI, EJB, transactions et JPA
    4. Leçon 4 — Services web REST, sécurité, frameworks et déploiement

    Modalités d’évaluation

    Volume horaire : 20 h de CM, 20 h de TD, 20 h de TP, 60 h de TPE, soit 120 h pour 6 crédits. Évaluation : contrôle continu (comptes rendus de TP, TD notés et projet de groupe « application de scolarité Jakarta EE », 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • Eclipse Foundation, Jakarta EE Platform Specification et Jakarta EE Tutorial, disponibles sur jakarta.ee.
    • Antonio Goncalves, Beginning Java EE 7, Apress, 2013.
    • Arun Gupta, Java EE 7 Essentials, O’Reilly, 2013.
    • Christian Bauer, Gavin King, Gary Gregory, Java Persistence with Hibernate, 2e éd., Manning, 2015.
    • Craig Walls, Spring in Action, 6e éd., Manning, 2022.
  • Qualité logicielle : outils et méthodes

    Ce cours fondamental du Master 2 Génie Logiciel traite de la qualité du produit logiciel et des processus qui le fabriquent. Il donne aux futurs ingénieurs et chefs de projet les outils pour spécifier des exigences de qualité mesurables (ISO/IEC 25010), concevoir une stratégie de test, mener des revues et inspections, exploiter les métriques et l’analyse statique, maîtriser la configuration et automatiser la vérification par l’intégration continue, enfin évaluer la maturité d’une organisation (CMMI). Les cas sont tirés du contexte nigérien : plateforme de paiement mobile, application de gestion scolaire, logiciels bancaires et d’e-gouvernement, pour lesquels une défaillance a des conséquences financières et sociales directes. Il complète « Management de la qualité », centré sur l’organisation, par une approche technique et outillée.

    Objectifs d’apprentissage

    • Spécifier et évaluer la qualité d’un logiciel à l’aide du modèle ISO/IEC 25010 et d’un plan d’assurance qualité.
    • Concevoir une stratégie de test multi-niveaux et dériver des cas de test par des techniques boîte noire et boîte blanche.
    • Organiser des revues et inspections et interpréter des métriques (densité de défauts, DRE, couverture, complexité, fiabilité).
    • Mettre en place une gestion de configuration et une chaîne d’intégration continue avec des portes qualité.
    • Situer une organisation sur l’échelle de maturité CMMI et proposer un plan d’amélioration.

    Prérequis

    Programmation (Java, Python ou JavaScript), génie logiciel (cycles de vie, UML, méthodes agiles), utilisation de Git, notions de statistiques.

    Plan du cours

    1. Leçon 1 — Modèles de qualité logicielle et assurance qualité
    2. Leçon 2 — Stratégies et techniques de test du logiciel
    3. Leçon 3 — Revues, inspections, analyse statique et métriques
    4. Leçon 4 — Gestion de configuration, intégration continue et maturité des processus

    Modalités d’évaluation

    Volume horaire : 30 h de CM, 10 h de TD, 0 h de TP, 40 h de TPE, soit 80 h pour 4 crédits. Évaluation : contrôle continu (TD notés et projet : plan de test et pipeline d’intégration continue pour une application existante, 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • ISO/IEC 25010 — Ingénierie des systèmes et du logiciel — Exigences et évaluation de la qualité (SQuaRE) — Modèle de qualité du produit ; ISO/IEC/IEEE 29119 — Tests du logiciel.
    • Glenford J. Myers, Corey Sandler, Tom Badgett, The Art of Software Testing, 3e éd., Wiley, 2011.
    • Ian Sommerville, Software Engineering, 10e éd., Pearson, 2015.
    • Jez Humble, David Farley, Continuous Delivery, Addison-Wesley, 2010.
    • Nicole Forsgren, Jez Humble, Gene Kim, Accelerate: The Science of Lean Software and DevOps, IT Revolution Press, 2018.
  • Management de la qualité

    Ce cours fondamental du Master 2 Génie Logiciel présente le management de la qualité comme démarche d’organisation au service de la satisfaction des clients et de la performance. Il s’adresse à de futurs chefs de projet, architectes et responsables de services informatiques qui devront intégrer une entreprise certifiée ISO 9001, préparer une certification, conduire un audit interne, piloter des indicateurs ou participer à l’évaluation de leur établissement par l’ANAQ-Sup. Les notions sont illustrées par des cas nigériens : éditeurs de logiciels, services informatiques de banques, opérateurs de mobile money, administrations et établissements d’enseignement supérieur. Le cours complète la matière « Qualité logicielle : outils et méthodes », centrée sur le produit logiciel, en se plaçant au niveau de l’organisation et de ses processus.

    Objectifs d’apprentissage

    • Définir la qualité et ses notions associées, et expliquer les sept principes de management de la qualité (ISO 9000:2015).
    • Évaluer les coûts de la qualité et de la non-qualité d’une organisation.
    • Interpréter les exigences de l’ISO 9001:2015 et construire une cartographie des processus avec ses indicateurs.
    • Utiliser les outils de la qualité (PDCA, QQOQCP, Ishikawa, 5 pourquoi, Pareto, AMDEC, cartes de contrôle) pour résoudre un problème.
    • Préparer et conduire un audit interne selon l’ISO 19011 et rédiger des fiches d’écart.
    • Situer la certification, le Lean, le Six Sigma et les modèles d’excellence dans une démarche d’amélioration continue.

    Prérequis

    Notions d’organisation des entreprises et de gestion de projet ; statistiques descriptives élémentaires (moyenne, écart type, pourcentages).

    Plan du cours

    1. Leçon 1 — Concepts, enjeux et coûts de la qualité
    2. Leçon 2 — La norme ISO 9001 et le management par les processus
    3. Leçon 3 — Les outils de la qualité : PDCA, résolution de problèmes et AMDEC
    4. Leçon 4 — Audit qualité, certification et amélioration continue

    Modalités d’évaluation

    Volume horaire : 30 h de CM, 10 h de TD, 0 h de TP, 40 h de TPE, soit 80 h pour 4 crédits. Évaluation : contrôle continu (études de cas en TD et dossier de groupe : cartographie des processus et plan d’audit d’une organisation réelle, 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • ISO 9000:2015 — Systèmes de management de la qualité — Principes essentiels et vocabulaire ; ISO 9001:2015 — Exigences ; ISO 19011:2018 — Lignes directrices pour l’audit des systèmes de management.
    • W. Edwards Deming, Out of the Crisis, MIT Press, 1986.
    • Joseph M. Juran, A. Blanton Godfrey, Juran’s Quality Handbook, 5e éd., McGraw-Hill, 1999.
    • Kaoru Ishikawa, Guide to Quality Control, Asian Productivity Organization, 1976.
    • Masaaki Imai, Kaizen: The Key to Japan’s Competitive Success, McGraw-Hill, 1986.
  • Administration des services d’un réseau d’entreprise

    Ce cours de découverte donne aux futurs ingénieurs logiciel les compétences nécessaires pour comprendre, déployer et administrer les services d’infrastructure sur lesquels reposent leurs applications : attribution d’adresses (DHCP), résolution de noms (DNS), annuaire et authentification centralisée (LDAP, Active Directory), messagerie, serveur web et proxy inverse, partage de fichiers, pare-feu, VPN, sauvegarde et haute disponibilité. Un développeur qui livre une application à une banque, à un opérateur télécom ou à une administration nigérienne doit dialoguer avec les administrateurs systèmes, rédiger des prérequis techniques et diagnostiquer une panne « réseau » ou « DNS ». Le cours alterne apports théoriques, travaux dirigés (plans d’adressage, calculs de disponibilité, dimensionnement des sauvegardes) et TP guidés sur machines virtuelles Linux (Debian/Ubuntu).

    Objectifs d’apprentissage

    • Concevoir un plan d’adressage IPv4 segmenté (VLSM) et configurer un serveur DHCP avec étendues et réservations.
    • Déployer une zone DNS faisant autorité et diagnostiquer la résolution de noms.
    • Expliquer le fonctionnement d’un annuaire LDAP et d’un domaine Active Directory, et les utiliser pour l’authentification centralisée.
    • Mettre en service une messagerie, un serveur web HTTPS et un partage de fichiers avec des droits maîtrisés.
    • Appliquer les bonnes pratiques défensives : pare-feu en liste blanche, VPN, moindre privilège, journalisation.
    • Dimensionner une politique de sauvegarde (RPO, RTO, règle 3-2-1) et calculer la disponibilité d’une architecture redondante.

    Prérequis

    Modèle TCP/IP, adressage IPv4, commandes de base Linux (shell, éditeur, gestion des paquets et des services systemd), notions de virtualisation.

    Plan du cours

    1. Leçon 1 — Architecture des services d’entreprise, adressage IP et service DHCP
    2. Leçon 2 — Résolution de noms (DNS) et services d’annuaire (LDAP, Active Directory)
    3. Leçon 3 — Services applicatifs : messagerie, web et partage de fichiers
    4. Leçon 4 — Sécurisation, sauvegarde et haute disponibilité des services

    Modalités d’évaluation

    Volume horaire : 10 h de CM, 10 h de TD, 10 h de TP, 30 h de TPE, soit 60 h pour 3 crédits. Évaluation : contrôle continu (comptes rendus de TP et TD notés, 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • Andrew S. Tanenbaum, David J. Wetherall, Computer Networks, 5e éd., Pearson, 2011.
    • Evi Nemeth, Garth Snyder, Trent R. Hein, Ben Whaley, Dan Mackin, UNIX and Linux System Administration Handbook, 5e éd., Addison-Wesley, 2017.
    • Cricket Liu, Paul Albitz, DNS and BIND, 5e éd., O’Reilly, 2006.
    • IETF, RFC 2131 (DHCP), RFC 1034 et 1035 (DNS), RFC 4511 (LDAP), RFC 5321 (SMTP), RFC 7208 (SPF), RFC 6376 (DKIM), RFC 7489 (DMARC).
    • ANSSI, guides de recommandations (administration sécurisée des systèmes d’information, configuration TLS), disponibles sur cyber.gouv.fr.
  • Data Warehouse

    Ce cours introduit les étudiants du Master Génie Logiciel à l’informatique décisionnelle (Business Intelligence) et à la conception d’entrepôts de données (data warehouses). Les organisations nigériennes — banques, opérateurs de télécommunications et de mobile money, administrations engagées dans l’e-gouvernement, établissements d’enseignement — accumulent des volumes croissants de données transactionnelles. Les exploiter pour piloter l’activité suppose une architecture dédiée : extraction depuis les systèmes opérationnels, intégration, historisation, modélisation dimensionnelle et restitution via des outils OLAP et des tableaux de bord. Le cours adopte un point de vue d’ingénieur logiciel : choix d’architecture, estimation de volumétrie, conception de schémas, écriture de requêtes SQL analytiques et industrialisation des traitements.

    Objectifs d’apprentissage

    • Distinguer systèmes transactionnels (OLTP) et décisionnels (OLAP) et justifier le recours à un entrepôt de données.
    • Comparer les approches d’architecture d’Inmon et de Kimball et situer entrepôt, magasins de données et lac de données.
    • Concevoir un modèle dimensionnel (schéma en étoile ou en flocon) à partir d’un besoin métier, en fixant la granularité et le traitement de l’historique (dimensions à évolution lente).
    • Spécifier et dimensionner un processus ETL, y compris le chargement incrémental et le contrôle de la qualité des données.
    • Exploiter un cube OLAP (roll-up, drill-down, slice, dice, pivot) et écrire des requêtes analytiques SQL (ROLLUP, CUBE, fonctions de fenêtrage).
    • Définir des indicateurs clés et concevoir un tableau de bord utile à la décision.

    Prérequis

    Bases de données relationnelles (modèle relationnel, normalisation, SQL : jointures, agrégations, sous-requêtes), notions de modélisation (Merise, UML) et de programmation.

    Plan du cours

    1. Leçon 1 — Informatique décisionnelle et architecture d’un entrepôt de données
    2. Leçon 2 — Modélisation dimensionnelle : faits, dimensions, étoile et flocon
    3. Leçon 3 — Alimentation de l’entrepôt : le processus ETL et la qualité des données
    4. Leçon 4 — Analyse OLAP, cubes et restitution par tableaux de bord

    Modalités d’évaluation

    Volume horaire : 20 h de cours magistral (CM), 10 h de travaux dirigés (TD), 0 h de TP, 30 h de travail personnel de l’étudiant (TPE), soit 60 h pour 3 crédits. Évaluation : contrôle continu (TD notés, mini-projet de conception d’un entrepôt pour un cas nigérien, 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • Ralph Kimball, Margy Ross, The Data Warehouse Toolkit: The Definitive Guide to Dimensional Modeling, 3e éd., Wiley, 2013.
    • W. H. Inmon, Building the Data Warehouse, 4e éd., Wiley, 2005.
    • Ralph Kimball, Joe Caserta, The Data Warehouse ETL Toolkit, Wiley, 2004.
    • Jiawei Han, Micheline Kamber, Jian Pei, Data Mining: Concepts and Techniques, 3e éd., Morgan Kaufmann, 2011.
    • DAMA International, DAMA-DMBOK: Data Management Body of Knowledge, 2e éd., Technics Publications, 2017.
  • Architectures orientées services et cloud computing

    Les systèmes d’information des banques, opérateurs télécoms, administrations et start-up ne sont plus des applications isolées : ils sont composés de services interopérables, exposés sous forme d’API et de plus en plus hébergés dans le cloud. Ce cours donne à l’ingénieur génie logiciel les concepts et les savoir-faire pour concevoir, déployer et exploiter de telles architectures. Il traite d’abord l’architecture orientée services (principes, contrats, bus de services, orchestration et chorégraphie), puis les technologies de services web (SOAP/WSDL, REST, OpenAPI, gRPC) et le passage aux microservices. La seconde partie est consacrée au cloud computing selon la définition du NIST (caractéristiques, modèles IaaS/PaaS/SaaS, modèles de déploiement), à la virtualisation, aux conteneurs Docker et à l’orchestration Kubernetes, et enfin à la sécurité (responsabilité partagée), à la disponibilité, à l’évaluation des coûts (TCO, FinOps) et aux stratégies de migration, avec une attention particulière au contexte nigérien : connectivité internationale, souveraineté et protection des données personnelles.

    Objectifs d’apprentissage

    • Expliquer les principes de la SOA et concevoir un portefeuille de services à partir de processus métier.
    • Concevoir, documenter (WSDL, OpenAPI) et sécuriser des services web SOAP et REST ; distinguer SOA et microservices.
    • Caractériser les modèles de service et de déploiement du cloud et choisir une offre adaptée.
    • Conteneuriser une application avec Docker et la déployer sur Kubernetes avec mise à l’échelle automatique.
    • Évaluer la sécurité, la disponibilité et le coût total de possession d’une solution cloud et planifier une migration.

    Prérequis

    Architecture logicielle, programmation (Java ou Python), réseaux TCP/IP et HTTP, bases de données, notions de Linux en ligne de commande.

    Plan du cours

    1. Leçon 1 — Principes de l’architecture orientée services (SOA)
    2. Leçon 2 — Services web SOAP et REST, contrats d’API et microservices
    3. Leçon 3 — Cloud computing : modèles, virtualisation, conteneurs et orchestration
    4. Leçon 4 — Sécurité, disponibilité, coûts et migration vers le cloud

    Modalités d’évaluation

    Volume horaire (maquette) : 20 h de CM, 10 h de TD, 20 h de TP et 30 h de TPE, pour 3 crédits. Évaluation : contrôle continu (comptes rendus de TP Docker/Kubernetes, étude de cas d’architecture : 40 %) et examen terminal écrit (60 %).

    Bibliographie

    • Thomas Erl, Service-Oriented Architecture: Concepts, Technology, and Design, Prentice Hall, 2005.
    • Sam Newman, Building Microservices, O’Reilly, 2e éd., 2021.
    • Leonard Richardson, Sam Ruby, RESTful Web Services, O’Reilly, 2007.
    • NIST, Special Publication 800-145 : The NIST Definition of Cloud Computing, 2011.
    • Documentation officielle de Docker (docs.docker.com) et de Kubernetes (kubernetes.io) ; spécification OpenAPI (openapis.org).
  • 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.