Aller au contenu

SEMAINE 2 - JOUR 1 – PROGRAMMATION ORIENTÉE OBJET (POO) - LES BASES

Formation Java / Spring Boot pour développeurs COBOL


Objectifs pédagogiques

À l’issue de cette sixième journée, vous derez capable de :

Cette journée est volontairement lente, analogique et explicative. La POO est un changement dans la façon de penser et de programmer, pas une simple nouvelle syntaxe.


Mise en contexte – Passer de Cobol à la POO

En COBOL, vous raisonniez historiquement ainsi :

En Programmation Orientée Objet :


Analogie FONDAMENTALE

La POO, c’est passer d’un monde où le programme agit sur les données… à un monde où les données savent agir sur elles-mêmes.


Cours

Première approche

La première partie du cours est en full Java sans référence à Cobol et la seconde (ci-dessous) fait référence de temps en temps à la syntaxe Cobol (pas pour tous les exemples).

Java Partie 1 - Sans Cobol

Dans ce cours, on abordera les concepts et la programmation orientée objet :

Lien vers les notions de base pour comprendre la POO

Lien vers les notions de base pour comprendre et manipuler des Collections

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

Lien vers une synthèse rapide des concepts de la POO

Java Partie 2 - avec un peu de Cobol

Classe et objet

Le cours sur les concepts en POO est indispensable pour bien comprendre la philosophie et le fonctionnement de la programmation orientée objet. On pourrait dire qu’une classe CompteBancaire est la structure, le modèle, la fabrique à compte bancaire réel d’un client.


Analogie avec COBOL

En COBOL, vous avez souvent une structure de données comme ci-dessous :

01 COMPTE.
   05 NUMERO-COMPTE    PIC X(12).
   05 SOLDE            PIC 9(7)V99.
   05 STATUT           PIC X(1).

En Java, on va créer une classe Compte qui contient :

Première classe Java : Compte avec les données

Définition de la classe (équivalent DATA DIVISION + la logique métier) :

public class Compte {

    String numeroCompte;
    BigDecimal solde;
    String statut;
}

Correspondance COBOL :

COBOL Java
01 COMPTE class Compte
05 NUMERO-COMPTE attribut
DATA DIVISION attributs
PROCEDURE DIVISION méthodes (bientôt)

Une classe ne fait encore rien, elle décrit ce qu’est un Compte.

Objet : Donner vie à la classe (notion d’instance)

En Java :

Compte compte1 = new Compte();

Analogie COBOL :

01 COMPTE. : la description MOVE … TO COMPTE : manipulation

En Java, le mot clé new correspond à la création réelle de l’entité. Sans new, l’objet n’existe pas, sauf pour des cas particuliers comme avec la classe String.

Attributs : état de l’objet

compte1.numeroCompte = "FR001";
compte1.solde = new BigDecimal("1000.00");
compte1.statut = "A";
MOVE "FR001" TO NUMERO-COMPTE
MOVE 1000.00 TO SOLDE
MOVE "A" TO STATUT

Pour l’instant, Java ressemble beaucoup à COBOL. La vraie différence arrive avec les méthodes.

Méthodes : comportement de l’objet

Problème COBOL classique :

En Java (philosophie POO) :

Un objet doit contrôler ses propres règles métier.

Exemple :

public class Compte {

    String numeroCompte;
    BigDecimal solde;

    void crediter(BigDecimal montant) {
        solde = solde.add(montant);
    }

    void debiter(BigDecimal montant) {
        solde = solde.subtract(montant);
    }
}

Analogie COBOL :

Au lieu de ADD MONTANT TO SOLDE On dit compte1.crediter(montant);

On demande au compte d’agir, on ne manipule plus directement la donnée.

Encapsulation : concept important de la POO

L’encapsulation permet de respecter les règles métier et d’encapsuler les données et certaines méthodes pour les rendre inaccessibles en dehors de l’objet. La notion de visibilité private est importante dans ce concept que nous voyons dans le cours sur la POO.

public class Compte {

    private BigDecimal solde;

    public void crediter(BigDecimal montant) {
        solde = solde.add(montant);
    }
}

private signifie :

En COBOL, tout est global au programme alors que Java permet de fermer l’accès aux données, c’est une protection volontaire et explicite.

Constructeur : initialisation contrôlée

En COBOL, l’initialisation est souvent dispersée, en Java c’est contrôlé.

// constructeur Compte de la classe Compte
public Compte(String numero, BigDecimal soldeInitial) {
    this.numeroCompte = numero;
    this.solde = soldeInitial;
}

Explication :

this : l’objet courant

La syntaxe est this.solde = solde; qui veut dire le solde de CE compte est égal à solde.

this signifie cet objet précis, ce compte

public class Compte {

    private String numero;
    private BigDecimal solde;

    public Compte(String numero, BigDecimal soldeInitial) {
        this.numero = numero;
        this.solde = soldeInitial;
    }

    public void crediter(BigDecimal montant) {
        solde = solde.add(montant);
    }

    public void debiter(BigDecimal montant) {
        solde = solde.subtract(montant);
    }

    public BigDecimal getSolde() {
        return solde;
    }
}

Utilisation :

Compte c1 = new Compte("FR001", new BigDecimal("1000.00"));
c1.crediter(new BigDecimal("200.00"));
c1.debiter(new BigDecimal("50.00"));

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

Travaux pratiques – JOUR 6

TP 1 – Création de la classe Compte

Consignes :

TP 2 – Simulation bancaire simple

Consignes :

TP 3 – Règle métier minimale

Consigne :

Corrigés détaillés

Corrigé TP 1 – Classe Compte

public class Compte {

    private String numero;
    private BigDecimal solde;

    public Compte(String numero, BigDecimal soldeInitial) {
        this.numero = numero;
        this.solde = soldeInitial;
    }

    public void crediter(BigDecimal montant) {
        solde = solde.add(montant);
    }

    public boolean debiter(BigDecimal montant) {
        if (solde.compareTo(montant) < 0) {
            return false;
        }
        solde = solde.subtract(montant);
        return true;
    }

    public BigDecimal getSolde() {
        return solde;
    }
}

TP4 - ChienChien et POO

Lien vers un TP complémentaire sur les notions apprises

Erreurs fréquentes

ça peut paraitre plus simple en Cobol mais c’est moins robuste.

Avancement du TP fil rouge bancaire (BankLite)

Aujourd’hui, vous avez créé la première brique métier réelle :

Décisions structurantes :

Bilan Jour 6

Préparation du Jour 7

Le Jour 7 abordera :

Correction TP2 Gestion de Stock produit

Lien vers la proposition de correction