Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
formations:licence:2024-2025:ue:l3:cpoo5 [2025/01/29 10:45] – supprimée - modification externe (Date inconnue) 127.0.0.1 | formations:licence:2024-2025:ue:l3:cpoo5 [2025/01/29 10:45] (Version actuelle) – ↷ Page déplacée de formations:licence:ue:l3:cpoo5 à formations:licence:2024-2025:ue:l3:cpoo5 admin | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ~~NOTOC~~ | ||
+ | |||
+ | |||
+ | ====== Compléments de programmation orientée objet ====== | ||
+ | |||
+ | |||
+ | ===== Description ===== | ||
+ | |||
+ | Ce cours de compléments de POO revisite les principes des langages objets, tels que vus en L2, avec une vision orientée vers la qualité, la pérennité (possibilité d' | ||
+ | |||
+ | Le langage qui sert d' | ||
+ | |||
+ | Les ajouts récents du langage (Java 17 est la version actuellement utilisée pour le cours) sont expliqués quand il permettent d' | ||
+ | |||
+ | Un tiers du volume du cours est consacré à la programmation concurrente en Java, avec toujours l' | ||
+ | |||
+ | ===== Syllabus ===== | ||
+ | ==== Sujets centraux ==== | ||
+ | |||
+ | * Qu' | ||
+ | * Encapsulation (au sens large). | ||
+ | * Notion de propriété (versus champs) avec getter/ | ||
+ | * Problèmes liés à l' | ||
+ | * Notion de copie défensive. | ||
+ | * Polymorphisme | ||
+ | * différentes sortes. | ||
+ | * Système de types. | ||
+ | * Notion de contrat et de sous-typage idéal (Liskov) versus sous-typage implémenté. Illustration : | ||
+ | * Interfaces et programmation à l' | ||
+ | * Héritage. | ||
+ | * Héritage justifié seulement quand on veut sous-typage + réutilisation de code (sinon, autres constructions). | ||
+ | * Problème de la classe de base fragile. | ||
+ | * Comment contourner l' | ||
+ | * Hiérarchies contraintes : types finis (enum), hiérarchies scellées (sealed). Enregistrements (record). Évolutions du bloc de contrôle switch. | ||
+ | * Généricité. | ||
+ | * principes de base | ||
+ | * un cas d' | ||
+ | * lambda expressions | ||
+ | * Concurrence : | ||
+ | * contexte : les applications sont de plus en plus concurrentes par nature (web, GUI, ... ) et d' | ||
+ | * un peu de théorie : parallélisme versus concurrence. Temps partagé. Entrelacements. Conflit et compétition. Correction mise en danger par les optimisations matérielles (caches locaux) et logicielles (réordonnancement). | ||
+ | * implémentation de base dans Java : threads JVM (= simples décorateurs de threads système). Synchronisation (volatile, synchronized, | ||
+ | * Concurrence : APIs de haut niveau. | ||
+ | * plusieurs styles : mémoire partagée versus passage de message (plus sûr !) | ||
+ | * notion de thread pool | ||
+ | * API ForkJoin | ||
+ | * API CompletableFuture | ||
+ | * Mention (ou rappel) des Stream parallèles. Mention de l'API Flow. | ||
+ | |||
+ | ==== Sujets potentiellement traités ==== | ||
+ | |||
+ | Certains sujets ne sont pas systématiquement développés en amphi toutes les années (mais le cours est écrit et disponible) : | ||
+ | |||
+ | * Les détails des conversions de type (analyse du code-octet et du comportement de la JVM). | ||
+ | * Gestion des erreurs. Exceptions et alternatives. | ||
+ | * Rappel de la zoologie des collections Java. | ||
+ | * Généricité avancée (explications plus théoriques sur l' | ||
+ | * API Stream. | ||
+ | * Interfaces graphiques. | ||
+ | |||
+ | ===== Pré-requis ===== | ||
+ | |||
+ | * Savoir programmer des algorithmes et structures de données simples (n' | ||
+ | * Avoir déjà programmé en Java. | ||