1
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.
2
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.
3
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.
4
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.