Licence 1ère année - Semestre 1
Programmation 1 ECTShCMhTDhTP
Description
Ce module est une initiation à la programmation. Il a pour objectif de poser les bases de la création de programmes informatiques. Les étudiants sont y invités à adopter des approches raisonnées pour répondre aux besoins exprimés et résoudre des problèmes simples. La démarche dispensée dans ce module va de l'analyse du problème posé, à la vérification de la solution logicielle implémentée. La programmation est faite en langage Java. Les variables, tableaux, instructions conditionnelles, les boucles de traitement, la programmation de fonctions et la récursivités sont les notions abordées dans ce module au travers de cours magistraux, petits exercices de travaux dirigés, programmation sur ordinateur en TP et de projets.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Analyser un problème simple
- Concevoir un programme capable de résoudre un problème simple posé
- Produire un exécutable à partir d'un code source
- Analyser un problème avec méthode (découpage en éléments algorithmiques simples)
- Corriger les erreurs de compilation un programme en Java
- Vérifier que les programmes codés fournissent les résultats attendus
Mots-clés : Programmation informatique, Logiciel, Langage de programmation Java
Compétence associée : Développer un logiciel
- en appliquant des approches raisonnées de résolution de problèmes complexes par décompositions et/ou approximations successives
- en analysant et interprétant les résultats produits par l'exécution d'un programme
Apprentissages critiques
- Produire un exécutable à partir d'un code source
- Analyser un problème avec méthode (découpage en éléments algorithmiques simples)
Bases de données ECTShCMhTDhTP
Compétence associée : Construire un système d'information
- en concevant le traitement informatisé d’informations de différentes natures, telles que des données, des images et des textes
- en concevant, en implémentant et en exploitant des bases de données
Apprentissages critiques
- Manipuler les informations d'une base de données relationnelle
- Concevoir une base de données relationnelle normalisée
Mathématiques 1 ECTShCMhTDhTP
Description
Cette UE a pour but d'initier au formalisme mathématique du supérieur dans les domaines de la logique mathématique, l'analyse réelle, et l'algèbre. Les domaines couverts seront : les propositions logiques élémentaires, les ensembles, les raisonnements mathématiques, les nombres complexes, les propriétés sur ℝ, les suites réelles, les relations d'équivalences et finalement les systèmes linéaires.
Mots-clés : Logique élémentaire, ensembles, applications ensemblistes, raisonnements, nombres complexes
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les outils logiques et algébriques fondamentaux (théorie des langages et de la compilation, logique et raisonnement, ordres, induction) et leurs implications dans la programmation et la modélisation
- en construisant et en rédigeant une démonstration mathématique synthétique et rigoureuse
Apprentissages critiques
- Raisonner, argumenter avec des objets mathématiques
Mathématiques 2 ECTShCMhTDhTP
Description
Cette UE a pour objectif de poser les bases du formalisme mathématique du supérieur dans les domaines de la logique mathématique, l'analyse réelle, et l'algèbre. Les domaines couverts sont : le calcul matriciel, les fonctions sur ℝ à valeurs réelles, les calculs d'intégrales, les méthodes de résolutions d'équations différentielles linéaires, les lois de composition interne.
Mots-clés : Matrices, fonctions sur ℝ, intégrales, équations différentielles
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les outils logiques et algébriques fondamentaux (théorie des langages et de la compilation, logique et raisonnement, ordres, induction) et leurs implications dans la programmation et la modélisation
- en construisant et en rédigeant une démonstration mathématique synthétique et rigoureuse
Apprentissages critiques
- Raisonner, argumenter avec des objets mathématiques
Outils pour l'informatique
Sciences Pour l'Ingénieur - EEA ECTShCMhTDhTP
Description
Cette UE a pour objectif d'introduire les notions de bases de l'électronique numérique. Elle couvrira les principes de base de l'électronique numérique à savoir : la numération et codage, la logique combinatoire et la logique séquentielle.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Utiliser les systèmes de numération en base 2, 8, 16,
- Faire des changements de base, et des additions de nombres réels dans les différentes bases
- Etudier un problème de logique combinatoire : de faire la table de vérité, de simplifier les équations logiques et de produire le logigramme simplifié associé à ce problème
- Utiliser les éléments de base de la logique séquentielle (les bascules) et pouvoir les associer pour faire des compteurs, des registres et des mémoires
Mots-clés : électronique numérique, base N, table de vérité, bascules
Compétence associée : Comprendre les systèmes informatiques
- en identifiant et caractérisant les principaux éléments fonctionnels et l’architecture matérielle d’un ordinateur
Apprentissages critiques
- Comprendre les éléments fondamentaux de l'électronique
Méthodologie Informatique ECTShCMhTDhTP
Description
Cette UE a pour objectif d'initier les étudiants à la manipulation de systèmes d'exploitation et de réseaux. Elle vise à donner les compétences minimales pour permettre aux étudiants d'être autonomes sur des systèmes d'exploitation de type Linux.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Prendre en main un environnement de travail sous une distribution Linux
- Manipuler le système de fichiers à l'aide de lignes de commandes pour gérer des fichiers et des répertoires
- Assurer la sécurité des fichiers et des répertoires
- Maîtriser la notion de processus : lister, arrêter, démarrer ceux-ci
- Réaliser la compilation et l'exécution d'un programme (C/C++ et java) via la ligne de commande
Mots-clés : shell, ligne de commande, système de fichiers, processus
Compétence associée : Comprendre les systèmes informatiques
- en caractérisant le fonctionnement des systèmes et des réseaux
Apprentissages critiques
- Interagir avec un système via un interpréteur de commandes
Outils documentaires ECTShCMhTDhTP
Description
Cette UE vise à la formation aux outils numériques libres nécessaires aux différentes mentions de licence pour permettre la rédaction de documents et de supports de présentation orale. Elle prépare également à la certification PIX, une certification de compétences numériques inscrites dans le Cadre de référence européen DigComp qui comprend 5 domaines et 16 compétences numériques.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Structurer et mettre en forme un document
- Insérer des informations générées automatiquement
- Utiliser Libre Office Impress (présentation) pour réaliser un document composite
- Traiter et exploiter des données dans des feuilles de calcul
Mots-clés : Bureautique, traitement de texte, tableur, présentation
Compétence associée : Analyser et communiquer
- en utilisant les outils numériques de référence et les règles de sécurité informatique pour acquérir, traiter, produire et diffuser de l’information ainsi que pour collaborer en interne et en externe
Apprentissages critiques
- Appréhender les outils numériques de rédaction de documents pour des présentations écrites et orales
Licence 1ère année - Semestre 2
Programmation Orientée Objet ECTShCMhTDhTP
Description
L'objectif du cours de POO est de permettre aux étudiants de comprendre et mettre en œuvre le paradigme de Programmation Orientée Objet. Il s'agit dans un premier temps d'en maîtriser les concepts fondamentaux, en décrivant des objets au moyen de classes, en les instanciant via des constructeurs, et en mettant en œuvre l'encapsulation pour garantir leur manipulation exclusivement par les traitements prévus. Ensuite les étudiants mettront en œuvre les concepts faisant la puissance de la programmation orientée objet : héritage, polymorphisme, exceptions, classes abstraites et interfaces, généricité, collections. Ce cours apprend également à utiliser des objets existants tels que spécifiés par leur API, et à documenter ses propres objets. Cet enseignement propose un équilibre entre l'apprentissage des concepts et leur mise en pratique par le langage Java.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Analyser un problème en termes d'objets informatique à mettre en œuvre et de relations entre ces objets
- Rédiger un diagramme de classes en UML
- Concevoir un programme en définissant de nouveaux objets et en utilisant des objets existants
- Coder en utilisant le langage Java, et en explorant sont API
- Développer dans un IDE tel qu'Eclipse
- Produire une spécification en javadoc
Mots-clés : POO, Java, IDE, API
Compétence associée : Développer un logiciel
- en se servant aisément de plusieurs styles/paradigmes algorithmiques et de programmation (approches impérative, fonctionnelle, objet et multitâche) ainsi que plusieurs langages de programmation
Apprentissages critiques
- Choisir des structures de données complexes adaptées au problème
- Comprendre et utiliser les mécanismes de la programmation orientée objet
Programmation 2 ECTShCMhTDhTP
Description
Ce module programmation 2 apportera aux étudiants une compétence en programmation bas niveau nécessaire à certains types de développements (exemple : la programmation système). Le langage choisi est le langage C.
Dans un premier temps, nous décrirons les bases de la programmation en C : édition d'un code source, compilation/édition de liens, exécution. Nous nous attacherons ensuite à décrire les principes fondamentaux de la programmation dans ce langage : types, variables, opérateurs, instructions, fonctions,... le tout sous une forme qui s'apparentera à des rappels/adaptations du module programmation 1 au cours duquel le langage Java a été utilisé. Nous aborderons ensuite des aspects nouveaux et spécifiques au langage C : manipulation explicite d'adresses mémoire (pointeurs), tableaux statiques et chaines de caractères, gestion de la mémoire par allocation/désallocation dynamique, struct, typedef, enum, préprocesseur, modularité,...
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Conduire un développement en langage C en utilisant les caractéristiques propres à ce langage
- Développer un projet de moyenne importance en langage C
- Concevoir des applications nécessitant un développement bas niveau
- Comprendre comment développer des structures de données complexes (listes, arbres, graphes,...) nécessitant une gestion dynamique de la mémoire
- Respecter un certain nombre de bonnes pratiques communes aux langages de développement
Mots-clés : Programmation bas niveau, langage C
Compétence associée : Développer un logiciel
- en analysant et interprétant les résultats produits par l'exécution d'un programme
Apprentissages critiques
- Émettre un diagnostic du code et une correction en cas de dysfonctionnement
Web 1 ECTShCMhTDhTP
Description
Ce module est consacré à la découverte des langages du web côté client. Nous verrons tout d'abord les principes généraux des sites web (architecture, protocole HTTP, notion de balise, URL, etc.). Puis nous entrerons dans le vif du sujet avec, dans une première partie sur le langage HTML, l'apprentissage des éléments de structuration d'un site web, et les principales balises permettant la description de contenu, incluant des éléments multimédia (images, sons, vidéos). Nous verrons ensuite les formulaires, qui permettent à l'utilisateur de saisir des informations.
Dans une seconde partie, nous aborderons CSS, où nous verrons les principes généraux des feuilles de styles, puis les principales propriétés permettant de définir des styles et de réaliser une mise en page et une mise en forme appropriée.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Développer des documents Web en utilisant le langage HTML et le système de feuilles de styles CSS
- Structurer des informations dans un document Web avec le langage HTML.
- Mettre en forme et mettre en page des documents HTML avec CSS.
- Optimiser les temps de chargement des documents sur le réseau et dans le cadre d'un système client/serveur.
- Gérer des éléments graphiques, vidéo et audio
- Définir des d'interfaces web simples. Veiller à l'ergonomie.
- Réaliser un développement d'après un cahier des charges dans le cadre de mini-projets.
- Présenter son travail et expliquer ses choix de développement dans le cadre de courtes soutenances.
Mots-clés : Web statique, HTML, structuration, CSS, feuille de style
Compétence associée : Construire un système d'information
- en concevant le traitement informatisé d’informations de différentes natures, telles que des données, des images et des textes
Apprentissages critiques
- Réaliser un ensemble de pages liées entre elles par des liens hypertexte et intégrant divers médias
- Appliquer un ensemble de règles de style à un site internet
Parcours au choix
Parcours 1 (Info-Maths)
Fonctions et suites ECTShCMhTDhTP
Espaces vectoriels ECTShCMhTDhTP
Parcours 2 (Info)
Outils maths pour l'info ECTShCMhTDhTP
Systèmes électroniques programmés ECTShCMhTDhTP
Compétence associée : Comprendre les systèmes informatiques
- en identifiant et caractérisant les principaux éléments fonctionnels et l’architecture matérielle d’un ordinateur
Apprentissages critiques
- Comprendre les éléments fondamentaux de l'électronique
Anglais 1 ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
Apprentissages critiques
- Rendre compte et communiquer en se servant aisément des différents registres d’expression écrite de la langue anglaise
Enjeux socio-écologiques ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
- en respectant les principes d’éthique, de déontologie et de responsabilité environnementale
Apprentissages critiques
- Comprendre des problématiques complexes de durabilité selon une approche pluri-disciplinaire
Atelier Projet Professionnel ECTShCMhTDhTP
Compétence associée : Se positionner dans le champ professionnel de l'informatique
- en caractérisant et en valorisant son identité, ses compétences et son projet professionnel en fonction d’un contexte
Apprentissages critiques
- Présenter ses compétences à l'écrit et/ou à l'oral
Licence 2e année - Semestre 3
Algorithmique 1 ECTShCMhTDhTP
Description
Ce cours vise à familiariser les étudiants avec les fondements de l'algorithmique. Les premières sessions se concentrent sur les notations de Landau (particulièrement le O()) pour évaluer la complexité temporelle des algorithmes. On explore ensuite les structures de données linéaires telles que les tableaux, les listes, les piles et les files, en mettant l'accent sur les algorithmes classiques relatifs classiques (tri, rangs,...). Les étudiants apprendront à analyser la complexité des algorithmes à travers des exemples concrets sur des structures linéaires, comme les chaînes de caractères, avec des exemples d'algorithmes de compression ou de pattern matching.
Le cours comprend également une exploration introductive des paradigmes classiques de la conception d'algorithmes, tels que "diviser pour régner", la récursivité, l'optimisation gloutonne et la programmation dynamique.
En travaux pratiques, ils seront amenés à coder des algorithmes simples en C, en mettant en évidence l'impact des choix de structures de données sur la performance.
L'objectif est qu'à la fin du cours, les étudiants aient acquis les bases nécessaires pour concevoir et analyser des algorithmes, ainsi que pour choisir judicieusement les structures de données linéaires en fonction des besoins spécifiques d'un problème.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Maîtriser les notions d'opérations élémentaires et de complexité algorithmique (en temps) dans le cas le pire
- Savoir évaluer et comparer des complexités algorithmiques dans des cas simples
- Connaître les structures de données linéaires classiques (tableaux, listes, piles, files, chaînes de caractères)
- Appréhender différentes stratégie de conception d'algorithmes, comme par exemple l'approche "diviser pour régner"
- Savoir implémenter en C les structures linéaires classiques
- Être capable d'évaluer empiriquement l'efficacité d'un programme
Compétence associée : Analyser et concevoir un logiciel
- en choisissant, sur des critères objectifs, les structures de données et en construisant les algorithmes les mieux adaptés à un problème donné
- en identifiant les concepts fondamentaux de complexité, calculabilité, décidabilité, vérification pour apprécier la complexité et les limites de validité d’une solution
Apprentissages critiques
- Identifier les opérations liées aux différentes structures de données
- Comprendre et calculer la complexité des algorithmes
Architecture des ordinateurs ECTShCMhTDhTP
Description
Cette UE vise à enseigner les bases du fonctionnement d'un ordinateur. Dans cet objectif, nous utilisons un microprocesseur de type RISC de la famille MIPS pour appréhender les bases du fonctionnement d'un système informatique. Les concepts suivants sont étudiés : le codage de l'information (nombres entiers non signés et signés, nombres réels au standard IEEE754, pointeurs et caractères), la logique booléenne pour concevoir le chemin suivi par les données circulant dans le microprocesseur, la programmation en langage assembleur et le traitement des entrées-sorties, l'optimisation du chemin de données en utilisant les techniques de pipeline et de hiérarchie mémoire.
Mots-clés : Codage IEEE754, MIPS, assembleur
Compétence associée : Comprendre les systèmes informatiques
- en identifiant et caractérisant les principaux éléments fonctionnels et l’architecture matérielle d’un ordinateur
- en interprétant les informations techniques fournies par les constructeurs, en écrivant des routines simples en langage machine
Apprentissages critiques
- Comprendre le fonctionnement interne d'un processeur
- Maîtriser les instructions d'une architecture matérielle
Logique et Déduction ECTShCMhTDhTP
Description
Le cours de Logique et Deduction a pour objectif de fournir aux étudiants les bases théoriques nécessaires à la modélisation et à la résolution de problèmes logiques en informatique. Il couvre les principaux concepts de la logique formelle, en mettant l'accent sur la logique propositionnelle, la logique des prédicats du premier ordre, le calcul de séquents (automatisation des preuves), et l'utilisation des SAT solvers pour résoudre des problèmes pratiques. Il est aussi l'occasion d'introduire des logiques spécifiques à l'informatique comme la logique du temps linéaire. Les travaux pratiques (en Python) seront l'occasion pour les étudiants de mettre en pratique les concepts théoriques abordés en cours. Les TP incluront des exercices de manipulation et de réécriture de formules logique, et aborderont l'utilisation de SAT solvers pour résoudre des problèmes réels tels que le Sudoku.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Connaître les concepts théoriques associés à la logique propositionnelle et à la logique des prédicats du premier ordre
- Aborder les notions de termes, d'arbre et de réécriture sur des exemples simples
- Comprendre le lien entre preuve et calcul
- Appliquer une méthode simple de résolution pour décider de la satisfaisabilité ou validité d'une formule propositionnelle
- Construire des arbres de preuve pour la logique propositionnelle dans le système LK
- Savoir modéliser un problème simple en formules SAT
- Savoir utiliser en pratique un solveur SAT
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les outils logiques et algébriques fondamentaux (théorie des langages et de la compilation, logique et raisonnement, ordres, induction) et leurs implications dans la programmation et la modélisation
- en construisant et en rédigeant une démonstration mathématique synthétique et rigoureuse
Apprentissages critiques
- Comprendre les bases de la logique
- Comprendre les bases de la construction de preuve
- Utiliser un solveur pour résoudre un problème complexe
Système 1 ECTShCMhTDhTP
Description
L'objectif du cours est de comprendre et manipuler les principes de base d'un système de type Unix. Après une présentation du rôle et des éléments constitutifs d'un système d'exploitation, nous verrons, dans un première partie, les caractéristiques d'un système de fichiers et comment interagir avec le système via des commandes shell. Les commandes de base seront présentées, et nous verrons que le shell implémente un langage de programmation, permettant l'écriture de scripts. Enfin, dans cette partie, nous verrons comment extraire des informations d'un fichier texte via la ligne de commande. Dans une seconde partie, la construction d'un exécutable à partir de plusieurs fichiers source écrits en langage C sera présentée. Vous verrez également dans cette partie la construction de bibliothèques, et l'automatisation de la construction d'exécutables et de bibliothèques en utilisant des fichiers Makefile et la commande make. Une troisième partie vous apprendra à écrire des programmes en C permettant de lire et d'écrire dans des fichiers, cela via deux API, l'API flux et l'API descripteurs de fichiers. Une dernière partie sera consacrée à la gestion des processus, d'abord d'un point de vue externe : les principales caractéristiques d'un processus, les signaux, les sessions, les groupes de processus, et le contrôle des processus via la ligne de commande seront présentées. Ensuite d'un point de vue interne, vous apprendrez, en langage C, à créer des processus et à gérer la communication entre ces processus via des tubes et des signaux.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Comprendre le fonctionnement et les notions de base d'un système d'exploitation de type Unix
- Gérer des fichiers via la ligne de commande : création, copie, permissions, etc.
- Écrire des scripts shell simples
- Extraire des informations de fichiers texte via des commandes shell de type filtre
- Écrire des Makefile pour construire des bibliothèques et des programmes composés de plusieurs unités de compilation
- Écrire des programmes en C pour lire / écrire dans des fichiers en utilisant les API flux et descripteurs de fichier
- Gérer des processus via la ligne de commande
- Écrire des programmes en C permettant de créer des processus, charger un nouvel exécutable, réaliser des redirections, gérer la communication entre processus via des tubes anonymes et des tubes nommés, gérer les signaux
Mots-clés : Shell, ligne de commande, scripts shell, programmation C, fichiers, processus
Compétence associée : Comprendre les systèmes informatiques
- en caractérisant le fonctionnement des systèmes et des réseaux
Apprentissages critiques
- Manipuler un système de fichiers et des processus
- Automatiser des tâches dans un système via un interpréteur de commandes
Web 2 ECTShCMhTDhTP
Description
Ce module est consacré aux traitements effectués côté serveur, où des scripts PHP sont utilisés pour communiquer avec une base de données relationnelle en MySQL/MariaDB. Nous verrons comment développer des sites Web dynamiques reposant sur des bases de données relationnelles. Nous identifierons les rôles des éléments de l'architecture client/serveur 3 tiers : le client et les langages HTML/CSS, le serveur Web et le langage PHP, le serveur de bases de données et le langage SQL. Puis nous présenterons la syntaxe du langage PHP, et nous utiliserons ce langage pour générer des contenus dynamiques, et gérer de façon sécurisée les interactions entre le serveur Web et le client, et entre le serveur Web et le serveur de bases de données.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Concevoir et développer des interfaces utilisateur dans un environnement 3 tiers (HTML, CSS, PHP).
- Concevoir et développer les méthodes de traitement de données dans un environnement 3 tiers (PHP, SQL).
- Utiliser au mieux les paradigmes de programmation en fonction des besoins et de la taille des développements.
- Construire et développer des applications fiables au niveau de la sécurité, tant du point de vue fonctionnelle que du point de vue protection des données.
- Effectuer des traitements spécifiques côtés serveur : gestion messages électroniques, transferts de fichiers, opérations sur les répertoires.
- Réaliser un développement d'après un cahier des charges dans le cadre de mini-projets.
- Présenter son travail et expliquer ses choix de développement dans le cadre de courtes soutenances.
Mots-clés : PHP, MySQL, architecture 3-tiers
Compétence associée : Construire un système d'information
- en concevant le traitement informatisé d’informations de différentes natures, telles que des données, des images et des textes
- en concevant, en implémentant et en exploitant des bases de données
Apprentissages critiques
- Mettre en œuvre une architecture 3-tier (back-end)
- Organiser la restitution de données à travers la programmation et la visualisation
Anglais 2 ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
Apprentissages critiques
- Communiquer et argumenter à l'écrit et à l'oral sur des aspects disciplinaires en langue anglaise
Licence 2e année - Semestre 4
Algorithmique 2 ECTShCMhTDhTP
Description
Ce module se focalise sur des concepts avancés en algorithmique, en particulier sur les structures de données non-linéaires comme les graphes, ainsi que sur les algorithmes clés qui y sont associés. Le cours se décomposera en 3 grandes parties. La première sur les tas couvrira les techniques de tri associées, les tas binomiaux et les tas de Fibonacci. La deuxième partie se consacrera aux arbres de recherche en explorant des structures telles que les arbres AVL, les arbres rouges-noirs, les B-arbres et les arbres Splay. Cette partie inclura aussi les mécanismes de recherche efficaces et les stratégies d'équilibrage qui font de ces arbres des outils puissants pour la manipulation de données. La dernière partie se penchera sur les graphes en abordant des algorithmes essentiels tels que l'arbre couvrant de poids minimum (MST), les plus courts chemins (SP), les flux dans les graphes, les coupes minimales, etc.
Au fil de ce module, les étudiants développeront des compétences algorithmiques avancées, renforçant leur capacité à concevoir et à analyser des algorithmes complexes pour résoudre des problèmes réels.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Analyser et mettre en œuvre des algorithmes de tri efficaces
- Comprendre les différentes approches de tri, y compris les tas, les tas binomiaux et les tas de Fibonacci
- Comprendre les propriétés et les avantages des arbres AVL, des arbres rouges-noirs, des B-arbres et des arbres Splay
- Appliquer les arbres de recherche pour résoudre des problèmes complexes liés à la manipulation de données
- Maîtriser les algorithmes de l'arbre couvrant de poids minimum (MST), des plus courts chemins (SP), des flux et des coupes minimales
- Appliquer ces algorithmes pour résoudre des problèmes de graphe variés
- Résoudre des problèmes concrets en utilisant les structures de données et les algorithmes enseignés
- Analyser la complexité temporelle et spatiale des algorithmes étudiés
- Comprendre les meilleures pratiques pour l'optimisation des performances algorithmiques
Mots-clés : Algorithmes avancés, tas, arbre de recherche, graphe
Compétence associée : Analyser et concevoir un logiciel
- en choisissant, sur des critères objectifs, les structures de données et en construisant les algorithmes les mieux adaptés à un problème donné
- en identifiant les concepts fondamentaux de complexité, calculabilité, décidabilité, vérification pour apprécier la complexité et les limites de validité d’une solution
Apprentissages critiques
- Utiliser des techniques algorithmiques adaptées pour des problèmes complexes
- Anticiper les résultats de diverses métriques (temps d’exécution, occupation mémoire)
Analyse et modélisation de S.I. ECTShCMhTDhTP
Compétence associée : Analyser et concevoir un logiciel
- en mettant en œuvre des méthodes d’analyse pour concevoir des applications et algorithmes à partir d’un cahier des charges partiellement donné
Apprentissages critiques
- Élaborer les spécifications fonctionnelles et non fonctionnelles à partir des exigences
Outils pour la Programmation ECTShCMhTDhTP
Description
Principes et manipulation d'outils logiciels pour le développement logiciel. Le cours commencera par une introduction au test logiciel et notamment critères de test structurels qui seront mis en application pour du test unitaire avec l'outil JUnit, et un outil de mesure de couverture de code. Nous nous intéresserons à la gestion de version avec l'outil Git. Nous aborderons ensuite la virtualisation avec des containers Docker. Pour finir, nous nous intéresserons à la mise en place d'une infrastructure d'intégration et de déploiement continues. Les travaux pratiques mettront l'accent sur la mise en œuvre, notamment avec des environnements de développement intégrés (IDE) qui permettent d'assister les développeurs dans certaines tâches (complétion, compilation, test unitaire, debugging, synchronisation avec un dépôt de sources).
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Expliquer le principe du test logiciel
- Citer les principaux critères de couverture de code
- Ecrire et d'exécuter des tests unitaires dans un environnement de type xUnit
- Assigner automatiquement le verdict du test avec des assertions appropriées
- Automatiser la gestion et la production de projets logiciels avec un applicatif dédié
- Evaluer la qualité des tests écrits soit par une mesure de la couverture de code, soit par analyse mutationnelle
- Utiliser un gestionnaire de version pour réaliser un travail collaboratif sur un code source
- Réaliser un développement logiciel collaboratif en s'appuyant sur l'intégration continue
- Configurer et déployer un environnement virtuel de type Docker
Mots-clés : Test logiciel, JUnit, Selenium
Compétence associée : Développer un logiciel
- en caractérisant le rôle des tests et des preuves de correction dans le développement des logiciels et mettant en œuvre des tests élémentaires et des invariants de boucle
- en travaillant en équipe autant qu’en autonomie et responsabilité au service d’un projet
Apprentissages critiques
- Vérifier et valider la qualité de l'application par des tests logiciels
- Collaborer avec un gestionnaire de version
- Mettre en œuvre un environnement d'intégration continue
Web 3 ECTShCMhTDhTP
Description
Ce module sera focalisé sur le langage Javascript, langage du web dynamique côté client. Nous commencerons par la description des fondamentaux du langage (syntaxe, types de données, fonctions, objets). Nous verrons ensuite l'environnement d'exécution côté client dans lequel Javascript s'exécute, le navigateur. Nous ferons un tour d'horizon des possibilités offertes par celui-ci pour la manipulation dynamique du DOM, la capture d'événements, la gestion des données (cookies, stockage local), le mobile, ou encore la géolocalisation. Le cours couvrira également la notion de programmation asynchrone de type AJAX pour interroger des API distantes, ainsi que le traitement via des promesses.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Ecrire des programmes Javascript et les intégrer dans des pages web.
- Utiliser les classes existantes du langage Javascript et de les étendre.
- Ecrire des classes d'objet spécifiques
- Accéder avec Javascript aux éléments du DOM
- Modifier le styles des éléments du DOM avec Javascript
- Créer des fonctions pour réagir aux événements du clavier, de la souris et du DOM
- Valider des formulaires en HTML5 et en Javascript
- Créer, lire, modifier des données stockées en local (cookie ou HTML5 storage)
- Faire dialoguer une page web avec un programme serveur via AJAX
- Réaliser des traitements asynchrones avec des callbacks ou des promesses
- Réaliser des dessins dans un canvas
Mots-clés : Javascript, client, programmation asynchrone, événements, AJAX, promesses
Compétence associée : Construire un système d'information
- en concevant le traitement informatisé d’informations de différentes natures, telles que des données, des images et des textes
Apprentissages critiques
- Réaliser une application client dynamique (front-end)
Introduction à la recherche ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
- en identifiant le processus de production, de diffusion et de valorisation des savoirs
Apprentissages critiques
- Comprendre les mécanismes et les principes de la recherche scientifique
Techniques de communication et Projet Pro. 1 ECTShCMhTDhTP
Compétence associée : Se positionner dans le champ professionnel de l'informatique
- en identifier et situant les champs professionnels potentiellement en relation avec les acquis de la mention ainsi que les parcours possibles pour y accéder
- en caractérisant et en valorisant son identité, ses compétences et son projet professionnel en fonction d’un contexte
Apprentissages critiques
- Comprendre le marché de l'emploi pour développer et y inscrire son projet professionnel
- Initier son bilan de compétences, en particulier vis-à-vis de ses traits de personnalité, ses valeurs et ses motivations
- Rédiger un curriculum vitae et une lettre de motivation pour candidater à un emploi
Anglais 3 ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
Apprentissages critiques
- Communiquer et argumenter à l'écrit et à l'oral sur des aspects disciplinaires en langue anglaise
Licence 3e année - Semestre 5
Programmation fonctionnelle et scripts ECTShCMhTDhTP
Compétence associée : Développer un logiciel
- en se servant aisément de plusieurs styles/paradigmes algorithmiques et de programmation (approches impérative, fonctionnelle, objet et multitâche) ainsi que plusieurs langages de programmation
Apprentissages critiques
- Comprendre et utiliser les mécanismes de la programmation fonctionnelle
- Comprendre et utiliser les mécanismes des langages de script
Réseau ECTShCMhTDhTP
Description
Ce module est dédié à la découverte des aspects matériels et logiciels liés aux réseaux informatiques. Le descriptif matériel présentera les équipements réseau ainsi que l'infrastructure générale de l'internet. Le descriptif logiciel est bâti sur le principe d'une pile protocolaire réseau : chaque couche protocolaire sera expliquée et exemplifiée par des protocoles. L'aspect logiciel est complété par une initiation à programmation par les sockets entre processus communicants (en langage C).
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- acquérir les connaissances de base en réseau (connaître les concepts de base liés aux réseaux : protocoles, topologies, connaître les différents types de réseaux et leur caractéristiques)
- connaître les principes des piles protocolaires OSI et TCP/IP
- comprendre les technologies mises en œuvre dans les réseaux (fonctionnement de TCP, routage IP, maîtrise de la QoS)
- savoir configurer un ordinateur et un routeur pour la mise en réseau
- se familiariser avec le développement des applications en réseau
Mots-clés : équipements réseau, pile protocolaire OSI, protocoles, numérotation IP, plan d'adressage, routage, configurations réseau, programmation par sockets
Compétence associée : Comprendre les systèmes informatiques
- en caractérisant le fonctionnement des systèmes et des réseaux
Apprentissages critiques
- Comprendre l'architecture et les fondements des communications réseau et de l'Internet
- Maîtriser les principes de base de la programmation réseau
Théorie des langages ECTShCMhTDhTP
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les outils logiques et algébriques fondamentaux (théorie des langages et de la compilation, logique et raisonnement, ordres, induction) et leurs implications dans la programmation et la modélisation
Apprentissages critiques
- Caractériser et décrire des langages formels
- Manipuler les différentes formes d'un langage régulier
Conception Objet ECTShCMhTDhTP
Description
Ce module s'intéressera à l'analyse et la conception de systèmes en utilisant le paradigme de la programmation orientée objet. Après un rappel sur les différents diagrammes UML, permettant d'exprimer aussi bien les aspects structurels ou dynamiques d'un système, nous verrons le langage de contraintes OCL qui complète les descriptions graphiques et permet l'expression de propriétés semi-formelles. Nous nous interesserons ensuite aux patrons de conception les plus classiques et aux problèmes auxquels ils répondent.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Modéliser l'architecture d'un logiciel à l'aide des diagrammes UML appropriés
- Modéliser le comportement d'un composant logiciel ou d'un système à l'aide des diagrammes UML adéquats
- Compléter ces modèles par des propriétés exprimées dans le langage OCL
- Citer les principaux patrons de conception (création, structure, comportement)
- Choisir le patron de conception approprié à appliquer pour un problème donné
- Implémenter des patrons de conception dans un langage orienté objet
Mots-clés : UML, OCL, Patrons de conception
Compétence associée : Analyser et concevoir un logiciel
- en choisissant, sur des critères objectifs, les structures de données et en construisant les algorithmes les mieux adaptés à un problème donné
Apprentissages critiques
- Utiliser des patrons de conception pour le développement d’applications cohérentes
- Adopter de bonnes pratiques de conception et de programmation
Web 4 ECTShCMhTDhTP
Description
Le module s'intéressera à compléter les connaissances déjà acquises sur les langages du web classiques (HTML, CSS, PHP/MySQL, JS) en vue de maîtriser toutes les facettes du développement full-stack. Nous aborderons l'utilisation de Javascript côté serveur avec Node.js ainsi que diverses bibliothèques (express, websockets, JSON web tokens) permettant de réaliser des applications web riches interfacées avec des bases de données relationnelles ou NoSQL. Nous verrons la mise en place d'architectures à base de micro-services via des API REST, sécurisées avec des mécanismes d'authentification type web tokens (JWT). Nous terminerons par un aperçu des frameworks Javascript existants et de Typescript, la déclinaison typée de Javascript.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Configurer un serveur web basé sur Node.js pour servir des pages statiques ou dynamiques.
- Expliquer le principe de fonctionnement d'une architecture REST.
- Mettre en place une architecture client-serveur basée sur des micro-services REST.
- Mettre en oeuvre une architecture client-serveur en communiquant avec des sockets web.
- Interfacer un serveur web Node.js avec une base de données relationnelle ou NoSQL.
- Sécuriser l'accès aux API du serveur à l'aide de jetons d'authentification JWT.
- Employer un framework côté client et/ou côté serveur pour réaliser un développement d'application web
Mots-clés : Node.js, NoSQL, REST, JSON Web Token, React
Compétence associée : Construire un système d'information
- en concevant le traitement informatisé d’informations de différentes natures, telles que des données, des images et des textes
- en caractérisant les pratiques, outils et techniques visant à assurer la sécurité des systèmes informatiques pendant leur développement et leur utilisation
Apprentissages critiques
- Développer une application multi-tiers complète
- Mettre en œuvre un serveur d'application sécurisé
Techniques de communication et Projet Pro. 2 ECTShCMhTDhTP
Compétence associée : Se positionner dans le champ professionnel de l'informatique
- en identifier et situant les champs professionnels potentiellement en relation avec les acquis de la mention ainsi que les parcours possibles pour y accéder
- en caractérisant et en valorisant son identité, ses compétences et son projet professionnel en fonction d’un contexte
Apprentissages critiques
- Comprendre le monde socio-économique afin de positionner avec pertinence son offre de compétences
- Travailler son bilan de compétences afin de communiquer efficacement dans ses démarches de recherche d'emploi ou de stage
Anglais 4 ECTShCMhTDhTP
Compétence associée : Analyser et communiquer
Apprentissages critiques
- S'exprimer à l'écrit et à l'oral sur des aspects techniques en langue anglaise
Licence 3e année - Semestre 6
Analyse syntaxique ECTShCMhTDhTP
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les outils logiques et algébriques fondamentaux (théorie des langages et de la compilation, logique et raisonnement, ordres, induction) et leurs implications dans la programmation et la modélisation
Apprentissages critiques
- Comprendre et utiliser les mécanismes de l'analyse syntaxique
Apprentissage automatique ECTShCMhTDhTP
Description
L'apprentissage automatique est une branche de l'apprentissage machine (Machine learning) qui a pour but d'analyser et de synthétiser des masses de données (datasets) en vue de leur exploitation à des fins de prédiction, il s'agit de classification ou régression. Les données sont issues du monde réel, elles sont par définition volumineuses, complexes et hétérogènes. L'étudiant comprendra les fondements mathématiques de méthodes informatiques de l'apprentissage automatique et utilisera des techniques issues de bibliothèques informatiques réputées telle que Scikit-Learn.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- Comprendre les fondements mathématiques de l'apprentissage automatique
- Capturer et stocker des ensembles volumineux et complexes de données Hétérogènes
- Manipuler des données hétérogènes
- Appliquer des méthodes d'exploration et d'exploitation des données (apprentissage)
- Formaliser et mettre en œuvre des outils mathématiques pour l'informatique pour prédire et/ou classer
- Organiser la restitution de données à travers la programmation et la visualisation
Mots-clés : Apprentissage automatique, machine learning, classification, régression
Compétence associée : Assimiler les fondements mathématiques
- en caractérisant les techniques de gestion de l’aléatoire (probabilités et statistique) et leurs rôles dans le traitement de certaines données
Apprentissages critiques
- Appliquer des méthodes d’exploration et d’exploitation des données (apprentissage)
Programmation Multi-Paradigme ECTShCMhTDhTP
Compétence associée : Développer un logiciel
- en se servant aisément de plusieurs styles/paradigmes algorithmiques et de programmation (approches impérative, fonctionnelle, objet et multitâche) ainsi que plusieurs langages de programmation
Apprentissages critiques
- Choisir une combinaison de paradigmes adéquate pour traiter un problème
Sécurité ECTShCMhTDhTP
Compétence associée : Construire un système d'information
- en caractérisant les pratiques, outils et techniques visant à assurer la sécurité des systèmes informatiques pendant leur développement et leur utilisation
Apprentissages critiques
- Comprendre le rôle de la cryptographie dans la sécurité des systèmes d'information
Système 2 ECTShCMhTDhTP
Description
Ce module traite deux volets complémentaires des systèmes d'exploitation : les grandes principes conceptuels de la mise en oeuvre d'un système (ordonnancement de processus, gestion mémoire, allocation des ressources) et la programmation système avancée (en C) autour de la communication entre des fils d'exécution indépendants : communication entre processus par mémoire partagée, communication entre threads par partage de mémoire. Avec le partage d'information, une introduction à la synchronisation compétitive (thread et processus) est présentée.
Objectifs pédagogiques
A l'issue du module, l'étudiant(e) sera capable de :
- comprendre les problématiques dans la conception des systèmes d'exploitation
- savoir développer les applications communicantes à plusieurs fils d'exécution
- identifier correctement la technique la plus adéquate de communication entre les fils d'exécution et l'outil adéquat permettant d'assurer la cohérence des données partagées
- savoir automatiser des tâches d'inspection du système
Mots-clés : segments de mémoire partagée, exclusion mutuelle, threads, concepts des systèmes d'exploitation, ordonnancement, gestion mémoire, allocation des ressources
Compétence associée : Comprendre les systèmes informatiques
- en caractérisant le fonctionnement des systèmes et des réseaux
Apprentissages critiques
- Utiliser les fonctionnalités de base d'un système multi-tâches et multi-utilisateurs pour la communication
- Maîtriser les rôles et les principes fondamentaux de la conception des systèmes d'exploitation
Projet ECTShCMhTDhTP
Compétence associée : Se positionner dans le champ professionnel de l'informatique
Apprentissages critiques
- Décrire une solution technique à un problème concret
Stage en entreprise ECTShCMhTDhTP
Compétence associée : Se positionner dans le champ professionnel de l'informatique
- en situant son rôle et sa mission au sein d'une organisation pour s'adapter et prendre des initiatives
Apprentissages critiques
- Comprendre et s'insérer dans l'organisation interne d'une entreprise
- Décrire l'intégration d'un développement dans une solution