Aller au contenu principal

#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.
  • BigDecimal pour l'argent ; Objects.requireNonNull pour 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 final par 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 : extends pour produire, super pour consommer.
  • Bornes pour les API ; effacement de type pour comprendre les limites à l'exécution.
  • Interfaces scellées + records : hiérarchies fermées, switch exhaustifs sans default.

#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/jpackage pour 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 CompteBancaire en 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é ?