Aller au contenu

JOUR 10 – CONSOLIDATION GLOBALE PAR LA PRATIQUE

Formation Java / Spring Boot pour développeurs COBOL


Objectifs pédagogiques

Cette journée est une journée charnière.

À l’issue de cette journée, vous serez capable de :


Mise en contexte

Vous avez appris…

Aujourd’hui, on assemble tout.


Rappel rapide des briques disponibles

Vous disposez maintenant de :

Entités métier

Outils techniques


Organisation de la journée


PARTIE 1 – REFONTE D’UN CODE PROCÉDURAL

TP 1 – Du procédural vers l’objet

Point de départ (code volontairement “ancien style”)

Certain.e.s ont codé tout dans une méthode main() et d’autres pas forcément. A partir de maintenant, la méthode main ne servira qu’à lancer le programme, voire instancier des objets de l’application si besoin.

BigDecimal solde = new BigDecimal("1000");

BigDecimal[] operations = {
    new BigDecimal("-200"),
    new BigDecimal("150"),
    new BigDecimal("-50")
};

for (int i = 0; i < operations.length; i++) {
    solde = solde.add(operations[i]);
}

System.out.println(solde);

Travail demandé

  1. Identifier les responsabilités :
    • données
    • règles métier
    • orchestration
  2. Supprimer toute logique métier du main()
  3. Introduire une classe Compte
  4. Déplacer les règles dans l’objet

Résultat attendu (structure)


Proposition de corrigé (un extrait seulement)

Compte compte = new CompteCourant(
    "FR001",
    new BigDecimal("1000"),
    new BigDecimal("500")
);

List<BigDecimal> operations = List.of(
    new BigDecimal("-200"),
    new BigDecimal("150"),
    new BigDecimal("-50")
);

for (BigDecimal op : operations) {
    compte.crediter(op.max(BigDecimal.ZERO));
    if (op.compareTo(BigDecimal.ZERO) < 0) {
        compte.debiter(op.abs());
    }
}

System.out.println(compte.getSolde());

PARTIE 2 – SCÉNARIOS MÉTIER BANCAIRES OU AUTRES

TP 2 – Gestion d’un client avec plusieurs comptes

Consignes

  1. Créer un Client
  2. Lui associer :
    • 1 compte courant
    • 1 compte épargne
  3. Appliquer différentes opérations
  4. Gérer les erreurs métier

Exemple de scénario


Attendu


Proposition de corrigé (enfin, un extrait)

try {
    compteEpargne.debiter(new BigDecimal("900"));
} catch (IllegalStateException e) {
    System.out.println("Erreur métier : " + e.getMessage());
}

PARTIE 3 – COLLECTIONS AVANCÉES

TP 3 – Banque multi-clients

  1. Créer une Map<String, Client>
  2. Clé = identifiant client donc une chaîne de caractères
  3. Valeur = client (une référence, autrement dit une instance de Client)
  4. Chaque client possède plusieurs comptes
  5. Parcourir l’ensemble pour produire des statistiques

Exemples de statistiques demandées


Indice – Streams autorisés

clients.values().stream()

propositionde corrigé (un extrait seulement)

Nombre de comptes à découvert

long nbDecouverts =
    clients.values().stream()
        .flatMap(client -> client.getComptes().stream())
        .filter(c -> c.getSolde().compareTo(BigDecimal.ZERO) < 0)
        .count();

PARTIE 4 – REFLEXION MÉTIER (SANS CODE)

Atelier collectif

Questions à discuter :

C’est l’un des l’objectifs réel de la POO.


PARTIE 5 – MICRO-DÉMONSTRATION DE TEST


Démo – Tester un débit

@Test
void debit_refuse_si_solde_insuffisant() {
    Compte compte = new CompteEpargne("FR001", new BigDecimal("100"));

    assertThrows(IllegalStateException.class, () -> compte.debiter(new BigDecimal("200"))
    );
}

Section spéciale – Erreurs fréquentes

  1. Revenir au procédural par confort et habitude
  2. Mettre des if partout
  3. Modifier directement les attributs
  4. Utiliser try/catch pour contrôler la logique
  5. Abuser des streams sans lisibilité
  6. Écrire des méthodes trop longues
  7. Dupliquer la logique métier
  8. Mélanger affichage et calcul
  9. Ne pas relire son code
  10. Penser ça marche donc c’est bon

Avancement du TP fil rouge BankLite ou autre

À ce stade, BankLite est :


Synthèse de la journée et de la semaine

Vous avez :

Super !!