Bonnes pratiques de conception
- Le découpage en couches et l’orthogonalité.
- La gestion de la cohérence (cohérence forte, cohérence à terme).
- Les principes KISS, DRY, POJO, SOC.
- Quelques patterns essentiels : factory, singleton, prototype, strategy, proxy.
- L'accès aux ressources de manière asynchrone et non bloquante.
- Les tests : tests unitaires, tests d’intégration, utilisation de bouchons.
Travaux pratiques
Application du découpage en couche sur un projet Java, écriture de tests unitaires et de tests d’intégration.
Bonnes pratiques d’utilisation du langage
- Les bonnes pratiques de programmation orientée objet.
- Les bonnes pratiques de programmation fonctionnelle avec les expressions lambda.
- Les bonnes pratiques de programmation déclarative avec les annotations.
- L'immutabilité.
- La généricité : avantages et limites.
- La gestion des exceptions : exceptions métiers, exceptions techniques, wrapping d’exception.
Travaux pratiques
Amélioration du projet commencé précédemment en utilisant les expressions lambda, les annotations et les types génériques.
Bonnes pratiques d'utilisation des types de bases
- La classe Object et ses méthodes : equals, hashcode, toString, clone...
- La classe String et ses particularités.
- La représentation du temps avec les classes du package java.time.
- Les collections (List, Set, Queue), les maps.
- La classe Optional pour limiter le risque de NullPointerException.
- La classe Optional.
- L'interface Stream.
- La classe CompletableFuture pour la programmation asynchrone.
Travaux pratiques
Application des Stream au projet commencé précédemment, utilisation optimale des types de bases Java.
Compréhension du fonctionnement de la JVM
- Le compilateur Just in time (JIT).
- Le principe de tiered compilation.
- Deux zones mémoire : la heap et la stack.
- Les différents garbage collectors (G1, Shenandoah, ZGC).
- La compilation ahead of time (AOT) avec GraalVM.
Travaux pratiques
Observation de l’utilisation mémoire de l’application.