Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | Dernière révisionLes deux révisions suivantes | ||
playground:cours:l3:cpoo5 [2022/11/15 11:55] – [Sujets potentiellement traités] degorre | formations:licences:ue:l3:cpoo5 [2022/11/28 14:57] – supprimée - modification externe (Unknown date) 127.0.0.1 | ||
---|---|---|---|
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. | ||