Aller au contenu

JOUR 4 – CONDITIONS, BOUCLES, CHAÎNES, TRAITEMENTS SÉQUENTIELS, SCANNER

Formation Java / Spring Boot pour développeurs COBOL


Objectifs pédagogiques

À l’issue de cette quatrième journée, vous devez être capable de :

Les analogies COBOL sont encore présentes aujourd’hui, mais commenceront à s’estomper à partir du Jour 5.


Mise en contexte (COBOL → Java)

En COBOL, les traitements sont souvent :

Exemples classiques :

Java permet exactement les mêmes traitements, mais avec :

L’objectif du jour est de retrouver vos repères COBOL en Java, sans encore parler d’objets.


Première approche

J’ai conçu le cours de la manière suivante (comme le Jour 3) :

Java Partie 1 - Sans Cobol

Dans ce cours, nous allons voir les structures de contrôles et les conditions

Lien vers les notions de base pour comprendre les Boucles

Lien vers les notions de base pour manipuler des Chaînes (String)

Lien vers quelques explications sur l’utilisation de printf pour le formatage

Lien vers les notions de base pour découvrir les expressions régulières (semaine 1 ou 2)

Java partie 2 - avec Cobol

Les conditions : if / else

if (condition) {
    // instructions
}

La condition doit obligatoirement être de type boolean.

En COBOL :

IF SOLDE < 0
    DISPLAY "DECOUVERT"
END-IF

En Java :

double solde = -15.56;
if (solde < 0)
{
    System.out.println("Compte à découvert de "+solde);
}
BigDecimal solde2 = new BigDecimal(solde);
if (solde2.compareTo(BigDecimal.ZERO) < 0) {
    System.out.println("Compte à découvert");
}

Différences importantes :

Pour mieux comprendre le fonction et l’intérêt d’utiliser la classe BigDecimal dans le domaine bancaire

Les conditions : if / else

if (solde.compareTo(BigDecimal.ZERO) < 0) {
    System.out.println("Compte à découvert");
} else {
    System.out.println("Compte à l'équilibre ou créditeur");
}

Correspondance COBOL :

IF SOLDE < 0
    DISPLAY "COMPTE A DECOUVERT"
ELSE
    DISPLAY "COMPTE A L EQUILIBRE OU CREDITEUR"
END-IF

Les conditions : (else if)

if (solde.compareTo(BigDecimal.ZERO) < 0) {
    System.out.println("DECOUVERT");
} else if (solde.compareTo(new BigDecimal("1000")) < 0) {
    System.out.println("Solde faible");
} else {
    System.out.println("Solde confortable");
}

Switch : (équivalent moderne de EVALUATE)

En COBOL :

EVALUATE TYPE-COMPTE
    WHEN "CC"
        DISPLAY "COMPTE COURANT"
    WHEN "CE"
        DISPLAY "COMPTE EPARGNE"
    WHEN OTHER
        DISPLAY "TYPE INCONNU"
END-EVALUATE

En Java :

switch (typeCompte) {
    case "CC":
        System.out.println("COMPTE COURANT");
        break;
    case "CE":
        System.out.println("COMPTE EPARGNE");
        break;
    default:
        System.out.println("TYPE INCONNU");
}

Points clés :

Boucle for (l’équivalent du PERFORM VARYING)

En COBOL :

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
    ADD I TO TOTAL
END-PERFORM

En Java :

for (int i = 1; i <= 10; i++) {
    total = total.add(BigDecimal.valueOf(i));
}

Boucle while

while (solde.compareTo(BigDecimal.ZERO) > 0) {
    solde = solde.subtract(new BigDecimal("100"));
}

La condition est testée avant chaque itération.

Boucle do / while (rare mais utile pour les Menus)

do {
    System.out.println("Traitement effectué");
} while (condition);

La boucle s’exécute au moins une fois.

Traitement séquentiel : cas métier bancaire

Problème à résoudre

C’est exactement le type de traitement historiquement écrit en COBOL.

Démonstration guidée

Démo – Traitement d’une série d’opérations

BigDecimal solde = new BigDecimal("1000.00");

BigDecimal[] operations = {
    new BigDecimal("-200.00"),
    new BigDecimal("150.00"),
    new BigDecimal("-50.00")
};

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

System.out.println("Solde final : " + solde);

Analyse :

Travaux pratiques – JOUR 4

TP 1 – Traitement séquentiel simple

Objectif : appliquer une suite d’opérations à un solde

Consignes :

TP 2 – Comptage crédits / débits

Objectif : analyser les opérations

Consignes :

TP 3 – Détection du découvert

Objectif : introduire une règle métier

Consigne :

Corrigés détaillés

Corrigé TP 1 – Traitement séquentiel

BigDecimal solde = new BigDecimal("1000.00");

BigDecimal[] operations = {
    new BigDecimal("-200.00"),
    new BigDecimal("150.00"),
    new BigDecimal("-50.00")
};

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

System.out.println("Solde final : " + solde);

Corrigé TP 2 – Comptage

int nbDebit = 0;
int nbCredit = 0;

for (int i = 0; i < operations.length; i++) {
    if (operations[i].compareTo(BigDecimal.ZERO) < 0) {
        nbDebit++;
    } else {
        nbCredit++;
    }
}

System.out.println("Nombre de débits : " + nbDebit);
System.out.println("Nombre de crédits : " + nbCredit);

Corrigé TP 3 – Détection en cours de boucle

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

    if (solde.compareTo(BigDecimal.ZERO) < 0) {
        System.out.println("ATTENTION : DECOUVERT APRES OPERATION " + (i + 1));
    }
}

Erreurs fréquentes

Avancement du TP fil rouge bancaire (BankLite)

Aujourd’hui, on a vu :

Décision d’architecture progressive :

Synthèse de la journée

Vous savez maintenant :

Préparation du Jour 5

Le Jour 5 abordera :