Le carnet On est
Matière · ING2

Programmation Fonctionnelle — Scala

Du paradigme fonctionnel pur jusqu'au modèle d'acteurs Akka. Six chapitres + une annexe Petri nets. L'examen demande la compréhension du code, pas le par-cœur de la syntaxe.

~ 4 h de lecture cumulée 6 chapitres · annexe Petri · 4 compagnons 2 feuilles A4 R/V autorisées (police ≥ 6)

Indications de la prof

Citation directe (D. Zaouche, message du 17 mars)
  • « Un exo sur Petri nets et un second sur un code Scala à comprendre. »
  • « Deux feuilles recto-verso autorisées »
  • « même police 6 permises »
  • « Il ne s'agit pas d'apprendre la syntaxe de Scala. »
  • « Exo 1 → Petri nets (pas d'exemples avant) »
  • « Exo 2 → refaire les exos du cours et les TDs »
📌 Stratégie d'apprentissage
Pas besoin de mémoriser la syntaxe. Il faut savoir lire un code Scala et expliquer ce qu'il fait — typages, évaluations, pattern matching, récursion, opérations sur collections.
🎯 Préparation ciblée
Exo 1 — réseaux de Petri : pas de pré-requis cours, donc consulter l'annexe dédiée.
Exo 2 — repasser tous les TDs (Scala_01 à Scala_04, série complexité, ActorCalcul).

i. Les six chapitres

Chaque chapitre a son encre signature. Clique pour entrer.

ii. Annexe — Petri nets (sujet de l'Exo 1)

Sujet annoncé par la prof comme « pas d'exemples avant ». Notre annexe couvre théorie, notation, propriétés et exemples standards.

iii. Pages compagnons

Concepts & compréhension de code (pas du par-cœur de syntaxe).

iv. Format de l'examen

Exo 1 — Petri nets (pas d'exemples cours)
  • Sujet ouvert : la prof a précisé « pas d'exemples avant »
  • S'appuyer sur l'annexe Petri nets
  • Savoir : modéliser, calculer un tirage, identifier marquage atteignable
Exo 2 — Compréhension d'un code Scala
  • « Refaire les exos du cours et les TDs »
  • Lire un code et expliquer ce qu'il fait, type de retour, effet, comportement
  • Pas du par-cœur de syntaxe — de la lecture active
📌 Outils autorisés — deux feuilles
Deux feuilles A4 recto-verso manuscrites préparées à l'avance, police >= 6 si dactylographiée. Voir les Feuille 1 et Feuille 2 pour le contenu.
Calculatrice, téléphone : interdits.

v. Cartographie CM ↔ TD

Chaque cours a son TD miroir — la prof insiste : refaire les exos des TDs.

CoursTDContexte pratique
CM1Scala_01_TDREPL, types, val/var, Option, tuples, basics_scala
CM2Scala_02_TDFonctions, by-name, pattern matching, currification
CM3Scala_03_TDClasses, companion, traits, case classes
CM4Scala_04_TDManipulation de listes, map/filter/fold, collectionBis
CM5Série 1Analyse de complexité, exos sur cours_theorique
CM6ActorCalcul · philosophesAkka — projet d'acteur, problème des philosophes

📅 Plan de révision suggéré

PhaseAction
J-7 à J-5Lis les 6 chapitres en survol, focus sur la compréhension. Étudie l'annexe Petri nets en profondeur.
J-5 à J-3Refais tous les TDs sans regarder la correction d'abord. Note les blocages.
J-3 à J-2Ouvre les flashcards globales · entraîne-toi sur Lire le code.
J-2Recopie à la main tes deux feuilles recto-verso. Ajoute des post-its perso si besoin.
J-1Refais un exercice Petri nets et un code à expliquer. Conditions réelles.
JRelis tes deux feuilles. Respire.

🔮 Prédiction d'examen

Modalité : 50 % partiel écrit + 50 % projet (projet déjà rendu).

Format confirmé du partiel Deux exercices seulement :
  1. Exo 1 — Code Scala à comprendre : on te donne un programme Scala, tu dois en tracer l'exécution, identifier les patterns utilisés (pattern matching, higher-order, récursion, traits…) et répondre à des questions sur son comportement.
  2. Exo 2 — Réseau de Petri : modélisation et/ou analyse d'un réseau (places, transitions, marquages, tirs, détection de deadlock).

L'exo 1 absorbe l'essentiel de la matière Scala vue en cours (CM1 à CM6), l'exo 2 mobilise uniquement l'annexe Petri.

ChapitreRôle dans l'examCe qu'il faut savoir reconnaître / tracer
CM1 — Intro Lecture (exo 1) Syntaxe : val/var, types Int/Double/Option, lambda (x) => …, def avec type de retour.
CM2 — Fonctions Lecture (exo 1) Récursion terminale (@tailrec), fonction d'ordre supérieur, application partielle, currying. Savoir tracer une récursion à la main.
CM3 — POO Lecture (exo 1) Case classes, traits, classes abstraites, pattern matching (case Cons(...) =>, case Nil =>, case _ =>) — c'est le concept Scala le plus discriminant à reconnaître.
CM4 — Collections Lecture (exo 1) map, filter, fold/reduce, flatMap, sortBy, groupBy. Trace ce que retourne chaque opération sur la List donnée.
CM5 — Complexité Question annexe possible Big O d'une fonction Scala donnée — peut servir de sous-question dans l'exo 1.
CM6 — Akka Lecture (exo 1) — si présent Si le code utilise Actor / ! / receive, identifier le flux de messages entre acteurs.
Annexe — Réseaux de Petri Exo 2 dédié Le plus rentable à réviser : places, transitions, arcs entrants/sortants, poids, marquage initial, condition de tir, graphe d'accessibilité, deadlock. Format type : « voici un Petri net, montre l'évolution du marquage après les tirs t1, t2, t3 » ou « ce réseau est-il borné / vivant ? ».
Barème inconnu Le poids respectif des deux exos n'a pas été communiqué. Hypothèses raisonnables :
  • Si 50/50 : Petri pèse autant que tout Scala — ROI maximal de réviser Petri
  • Si 60/40 en faveur de Scala : la lecture de code reste dominante mais Petri compte encore beaucoup
Dans tous les cas, négliger Petri serait risqué puisqu'il est garanti.
💡 Stratégie L'annexe Petri est tout un exo entier à elle seule, alors qu'elle mobilise un seul chapitre. C'est le levier le plus rentable à réviser. Pour Scala, focus sur la lecture/trace plutôt que sur l'écriture — pas besoin d'apprendre la syntaxe par cœur si on sait décoder ce qui est donné.