#Slides POO Java
Supports de révision, un point par chapitre. Utilisation suggérée : projeter les points clés avant l'atelier correspondant, puis dérouler les exercices courts en direct.
#Modélisation objet
- Invariants : propriétés vraies entre tout appel public ; établies par le constructeur, préservées par les méthodes.
- Encapsulation : méthodes intentionnelles (
crediter,debiter) plutôt que setters génériques. BigDecimalpour l'argent ;Objects.requireNonNullpour les arguments.- Records : valeurs immuables avec validation dans le constructeur compact.
#Héritage et composition
- Hériter de types, composer les implémentations.
- Classe de base fragile : pourquoi
finalpar défaut. - Strategy = politique injectée ; Template Method = squelette final dans une classe abstraite.
- State par types scellés : le compilateur vérifie l'exhaustivité des transitions.
#Interfaces, génériques, records
- PECS :
extendspour produire,superpour consommer. - Bornes pour les API ; effacement de type pour comprendre les limites à l'exécution.
- Interfaces scellées + records : hiérarchies fermées,
switchexhaustifs sansdefault.
#Collections et Streams
- Choix par motif d'accès :
ArrayList(parcours),HashMap(clé),LinkedHashMap(ordre),ConcurrentHashMap(concurrence). - Paresse : rien ne s'exécute avant l'opération terminale.
parallel()seulement si source large et traitement coûteux ; toujours mesuré.- Virtual threads : un thread par tâche pour les E/S massives.
#Qualité et tests
- Exceptions vérifiées pour le métier, non vérifiées pour les bugs.
- Pyramide : unitaire en large, intégration avec Testcontainers, bout en bout rare.
- Pitest : un mutant survivant signale une assertion trop faible.
- Logs avec paramètres, métriques Micrometer, traces OpenTelemetry.
#Outillage et écosystème
- Maven (conventions) ou Gradle (incrémental, DSL Kotlin).
- Spotless + Checkstyle/SpotBugs branchés sur
check. jlink/jpackagepour un runtime sur mesure ; images distroless.- CI GitHub Actions avec cache de dépendances.
#Exercices courts pour le direct
- Cas fil rouge : casser un invariant du
CompteBancaireen direct, puis montrer le test qui l'attrape. - Identifier le producteur et le consommateur dans deux signatures génériques.
- Prédire la sortie d'un pipeline de Streams avant de l'exécuter.
- Quel type de collection pour un cache à ordre d'accès, pour une file d'attente, pour un annuaire trié ?