Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| formations:licence:ue:l3:cpoo5 [2025/01/29 10:43] – créée - modification externe 127.0.0.1 | formations:licence:ue:l3:cpoo5 [2025/01/29 10:50] (Version actuelle) – ↷ Page déplacée de playground:formations:licences:ue:l3:cpoo5 à formations:licence: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. | ||