Outils pour utilisateurs

Outils du site


enseignement:licences:licence_enseignements_descriptifs

Descriptifs des cours de licence

Semestre 1

Initiation à la programmation 1 (IP1)

Objectifs

Savoir écrire un programme simple dans un langage de programmation de haut niveau.

Résumé

Premiers éléments de programmation et d’algorithmique. Notion d’algorithme. Langages de programmation, variables, structures de contrôle, fonctions et passage de paramètres.

Introduction aux systèmes d’exploitation (IS1)

Objectifs

Connaissance des fonctions d’un système d’exploitation. Savoir utiliser efficacement un système Unix.

Résumé

Étude des différentes fonctions d’un système d’exploitation et familiarisation avec l’environnement et l’utilisation des systèmes de la famille Unix : système de gestion de fichiers, processus, liens entre processus et fichiers, les commandes de base (locales et réseau), le concept de filtre, notion de script.

Principe de fonctionnement des machines binaires (PF1)

Objectifs

Comprendre un certain nombre des principes généraux du traitement de données par des machines binaires.

Résumé

Principes de base du fonctionnement des ordinateurs ; Organisation générale d’un ordinateur, représentation binaire, mode d’adressage, principe d’exécution d’un programme, langage machines, circuits logiques.

Mathématiques 1 (MI1)

Prépro 1 (PP1)

Semestre 2

Initiation à la programmation 2 (IP2)

Objectifs

Apprendre à manipuler des structures récursives.

Résumé

Structures récursives : listes chaînées et arbres ; Développement d’algorithmes simples de parcours de structures récursives ; Bases de la programmation et de l’algorithmique.

Concepts informatiques (CI2)

Objectifs

Comprendre et maîtriser un certain nombre de mécanismes et concepts fondamentaux propres aux traitements informatiques.

Résumé

Présentation de concepts fondamentaux de l’informatique : mécanismes liés aux échanges d’information entre fonctions, références, pointeurs et adresses, la récursion : ses liens avec les arbres et les piles, son élimination, la technique de backtracking, quelques éléments de compression de textes et quelques éléments de cryptologie, numérisation des informations.

Internet et outils (IO2)

Objectifs

Acquérir la maîtrise des standards du Web tels que HTML et CSS et le modèle client / serveur. Apprendre un des langages les plus utilisés pour le développement serveur (e.g. PHP); connaître les rudiments de la manipulation et de l’interrogation des bases de données; maîtriser l’interaction serveur Web / base de données.

Résumé

Principes généraux des réseaux et d’Internet. Introduction au protocole HTTP. HTML. CSS. Introduction au PHP. Introduction aux bases de données et à un système simple de gestion de bases de donnée (e.g. MySQL). Introduction à SQL et à l’interface PHP / MySQL.

Mathématiques 2 (MI2)

Semestre 3

Initiation à la programmation orientée objets (POO3)

Objectifs

Maîtrise des concepts de la programmation objet et connaissance d’un système d’interface graphique.

Résumé

Principes de base de la programmation objet : classes et objets, références, héritage, notion de polymorphisme, exceptions, généricité. Utilisation d’une interface graphique définie dans un langage orienté objet.

Automates et Analyse Lexicale (AAL3)

Éléments d’algorithmique 1 (EA3)

Objectifs

Apprendre à manipuler les algorithmes (les comprendre, les modifier, et les concevoir)

Résumé

Cet enseignement vise à présenter l’approche algorithmique de la résolution de problèmes simples et à sensibiliser les étudiants à la notion d’efficacité d’un algorithme. Tris simples ; Manipulations de structures récursives (listes, arbres) ; Backtracking.

(Prépro 2) Conduite de projet (PP3)

Objectifs

À la fin de ce cours, un étudiant doit savoir utiliser tous les outils de développement classiques et avoir de premières notions de processus de développement.

Compétences visées

  • Savoir utiliser efficacement les outils de développement (éditeur de texte, compilateur, débogueur, profileur, “build system” et gestionnaire de version).
  • Communiquer au sein d’une équipe pour collaborer (revue de code, répartition des tâches, débat sur des choix de conception).
  • Être initié à la conception du logiciel (décomposition modulaire, principes de base du génie logiciel).
  • Être sensibilisé à la qualité du logiciel et de son développement (mise en page de code source, respect de normes de codage, tests, …)

Mathématiques 3 (MI3)

Semestre 4

Projet en informatique (PI4)

Objectifs

Conduite d’un premier projet répondant à un cahier des charges.

Compétences visées

  • Identifier les grandes phases du développement logiciel (spécification, développement, validation, déploiement/distribution, maintenance).
  • Connaitre et mettre en pratique au moins une méthode agile
  • Mener à bien la réalisation complète d’un logiciel de petite taille à partir d’une spécification donnée.
  • Appliquer les outils et méthodes modernes du développement logiciel introduits en conduite de projet.
  • Systématiser l’écriture de tests unitaires et d’intégration, ainsi que l’usage d’un système d’intégration continue.
  • Communiquer au sein d’une équipe pour collaborer (revue de code, répartition des tâches, débat sur des choix de conception).
  • Documenter un logiciel pour son utilisateur final.
  • Documenter un code source pour améliorer sa qualité.
  • Retravailler du code (factorisation, généralisation, nettoyage).

Éléments d’algorithmique 2 : outils pour l’analyse d’algorithmes (EA4)

Objectifs

Algorithmes et structures de données classiques. Compréhension des problèmes élémentaires de complexité.

Résumé

Complexité : ordres de grandeur usuels, complexité en temps et en espace, au pire, en moyenne ; Analyse comparée des algorithmes de tri classiques; permutations ; Structures pour les ensembles : listes, arbres binaires de recherche, tas, tables de hachage.

Langage C (LC4)

Mathématiques 4 (MI4)

Semestre 5

Algorithmique (AL5)

Contenu

Algorithmique des graphes

Mathématiques discrètes (MD5)

Objectif

Savoir démontrer des résultats mathématiques sur des objets manipulés en informatique, en particulier en algorithmique.

Contenu

  • Techniques de démonstration de base: dénombrements élémentaires, preuves par récurrence, preuves par l’absurde.
  • Graphes réguliers, connexes, acycliques, bipartis; suite de degrés d’un graphe; graphes eulériens, graphes hamiltoniens.
  • Probabilités discrètes.
  • Méthodes probabilistes sur les graphes.

Programmation fonctionnelle (PF5)

Objectif

L’objectif de ce cours est d’apprendre les primitives de la programmation fonctionnelle à travers le langage OCAML.

Détails

Types de base (int, float, bool, char), fonctions, déclaration des valeurs; listes; types algébriques: produit, somme, recursion, polymorphisme; filtrage par motifs; type unit (read/print), enregistrements; les effets de bord: exceptions, input/output, traits impératifs. Stratégies d’évaluation et efficacité, exemples de modélisation impérative et fonctionnelle.

Logique (LO5)

Systèmes d'exploitation (SY5)

Compléments en programmation orientée objet (CPOO)

Objectifs

  • Explorer les concepts de la POO au travers du langage Java.
  • Découvrir et comprendre les bonnes pratiques associées, pour une programmation fiable, efficace, évolutive et pérenne.

Pré-requis

  • Savoir programmer des algorithmes et structures de données simples (n’importe quel langage).
  • Avoir déjà programmé en Java.

Contenu

  • discussions sur la pertinence des différents concepts pour différentes situations, assorties de conseils d’usage (cf. patrons de conception)
  • approfondissement des mécanismes vus en L2, notamment les plus “avancés” : généricité, exceptions, …
  • sujets nouveaux : immuabilité, lambda-expressions, introduction à la programmation concurrente, …

Semestre 6

Bases de Données (BD6)

Compétences visées

Comprendre les grandes lignes du modèle relationnel et de sa structuration en trois niveaux : conceptuel, logique et physique. Maîtriser la modélisation conceptuelle des données, ainsi que l’étape de traduction du schéma conceptuel en un schéma relationnel. Comprendre le rôle des contraintes d’intégrité et être capable de juger de la qualité d’un schéma relationnel en fonction d’un ensemble de contraintes données. Savoir concevoir une base de données, l’alimenter, la modifier et l’interroger. En particulier, savoir écrire et comprendre des requêtes en SQL avancé (e.g., requêtes imbriquées, avec agrégats etc.), mais également en algèbre relationnelle. Comprendre le lien entre algèbre relationnelle et optimisation des requêtes SQL. Comprendre le statut et le mode d’utilisation des vues et tables temporaires (y compris l’utilisation des tables temporaires pour exprimer des requêtes récursives), ainsi que les spécificités propres à la gestion des données incomplètes. Comprendre les grandes lignes du théorème de Codd (équivalence entre calcul relationnel sûr et algèbre relationnelle, lien avec SQL).

Résumé

Bases de données relationnelles. Modèle conceptuel des données. Contraintes d’intégrité. Algèbre relationnelle. SQL. Données incomplètes. Vues. Requêtes récursives. Calcul relationnel.

Conduite de Projet (Cproj, 2019-2020 uniquement)

Introduction au génie logiciel

  • cycle de vie d’un logiciel
  • les processus de développement logiciel
  • conception et architecture d’un logiciel
  • implémentation et qualité du code
  • tests du logiciel

Méthodes du génie logiciel

  • édition de code source
  • gestion de versions
  • chaîne de compilation et automatisation
  • édition de liens et bibliothèques logicielles
  • développement piloté par les tests

Projet de développement logiciel en équipe tout au long du semestre

  • langage de programmation : C
  • outils : emacs, git, gcc, gdb, make, check

Grammaires et Analyse Syntaxique (GAS6)

Programmation Réseaux (PR6)

Introduction au Génie Logiciel (IGL6, option)

Compétences visées

  • Formaliser les grandes phases du développement logiciel et leur intégration dans quelques processus de développement.
  • Être initié à l’analyse des demandes informelles d’un client par problématisation.
  • Distinguer spécification fonctionnelle, spécification non fonctionnelle, et choix de conception.
  • Maîtriser quelques architectures modulaires classiques.
  • Appliquer les outils et méthodes modernes du développement logiciel introduits en conduite de projet.
  • Systématiser l’écriture de tests unitaires et d’intégration, ainsi que l’usage d’un système d’intégration continue, dans un processus de développement dirigé par les tests.
  • Connaitre plusieurs méthodes agiles (Scrum, XP) et développer un regard critique qui permet de choisir la méthode la plus adaptée au cas pas cas
  • Utiliser des bibliothèques externes et être sensibilisé à la problématique des dépendances logicielles.
  • Être sensibilisé à des concepts du génie logiciel comme la dette technique, la sûreté, la sécurité, etc.

Langages de script (LS6, option)

Objectif

L’objectif de ce cours est d’apprendre les concepts des langages de script essentiellement à travers le langage Python.

Détails

Ce cours/TP introduit et approfondit le langage de programmation Python. Les concepts importants de Python sont présentés et mis en pratique: listes, dictionnaires, expressions régulières, objets, librairies de gestion du système d’exploitation, etc. Le langage de script bash est également traité.

Machines virtuelles (MV6, option)

Objectif

Ce cours introduit aux principes des machines virtuelles exécutant du code-octet (comme Ocamlrun ou JVM) et présente les bases de la compilation d’un langage de haut niveau en code-octet. Ce cours s’apparie très naturellement au cours Grammaires et Analyse Syntaxique en donnant des exemples d’analyse sémantique appliquée au résultat de l’analyse syntaxique.

Détails

Machines à piles; codage/décodage du code-octet; compilation : expressions, branchements, declarations locales et globales, données structurées, fonctions et notion de clôture. Exemples d’optimisation. Jeu d’instructions de Ocamlrun et JVM.

Pré-requis

Les TP utiliseront le langage OCAML, le cours de programmation fonctionnelle au S5 est donc un pré-requis essentiel. Ce cours introduit aux principes des machines virtuelles exécutant du code-octet (comme Ocamlrun ou JVM) et présente les bases de la compilation d’un langage de haut niveau en code-octet.

Programmation Efficace (PE6, option)

Objectif

Le but de ce cours est d’apprendre à développer des techniques de programmation pour pouvoir programmer rapidement (en quelques heures) des prototypes pour résoudre des problèmes algorithmiques dont l’énoncé est simple mais pour lesquels trouver la meilleure solution est un problème complexe (par exemple des problèmes NP-complets, comme le voyageur de commerce ou le problème du sac à dos). L’idée est de vous sensibiliser au fait que pour certains problèmes avec un grand nombre d’instances, il n’est pas toujours possible d’avoir un programme qui trouve rapidement la solution optimale, mais qu’en revanche on peut programmer des algorithmes efficaces qui cherchent une solution approchée.

Déroulement

Le cours comportera deux parties, une partie plus théorique où l’on abordera des questions de complexité et d’algorithmique et une partie plus pratique pour laquelle vous devrez programmer en peu de temps une solution pour un problème donné et ensuite nous passerons du temps à comparer vos solutions pour voir quelles sont les bonnes stratégies. L’évaluation se fera sous forme d’une compétition de programmation (la note ne se résumera pas au classement mais tiendra également compte du style de programmation). Les étudiants souhaitant suivre cette option sont vivement encouragés à venir passer le google hashcode dans le hub organisé par l’ufr (jeudi 28 février 2019 au soir).

Pré-requis

  • Maitrise d’un langage de Programmation (Java, Python ou C)
  • Algorithmique
  • Implémentation de structures de données
  • Un peu de probabilités

Programmation Web (PW6, option)

Objectifs

L’objectif du cours de Programmation Web est de fournir une introduction aux méthodologies courantes pour le développement d’applications Web, coté client et coté serveur.

Contenu

Ce cours démarre avec une révision des langages HTML et CSS pour la description de pages Web. Ensuite une petite révision du langage PHP et des systèmes de bases de données permet d’introduire le développement serveur. Le cours se concentre ensuite sur les “frameworks” coté serveur (e.g. Symfony) et sur les serveurs node.js, ainsi que ajax pour la communication client-serveur. Enfin le cours aborde la programmation côté client pour dynamiser les pages Web : Javascript et la librairie Jquery, ainsi que les librairies côté client pour simplifier la programmation CSS (e.g. Bootstrap).

Pré-requis

Connaissance minimale des langages HTML, CSS, PHP et SQL pour l’interrogation/manipulation de bases de données.

Sécurité informatique (SI6, option)

Contenu

Ce cours est une introduction à la sécurité informatique. Il comporte une partie sur la cryptographie symétrique dans laquelle des algorithmes d’authentification (MAC) et de chiffrement symétriques (PRF, AES, DES) seront étudiés et programmés. La deuxième partie concerne les vulnérabilités des logiciels permettant de corrompre leur fonctionnement normal et quelques moyens pour prévenir ou atténuer ces attaques (analyse et test de programmes).

Pré-requis

Mathématiques du premier cycle (notamment notions d’algèbre et de calcul des probabilités); notions de base de l’algorithmique (structures de données, complexité asymptotique); notions en programmation C, Java et Python; notions en système Linux; notions en architecture des ordinateurs (CI2); notions en outils internet (IO2).

enseignement/licences/licence_enseignements_descriptifs.txt · Dernière modification: 26/06/19 17:34 par Dominique Poulalhon