Aller au contenu

SEMAINE 1 : JOUR 1 – ENTREZ DANS LE MONDE JAVA

Formation Java / Spring Boot pour développeurs COBOL


humour java


Objectifs pédagogiques de la journée

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

Cette journée est un premier pas dans le monde Java en établissant un lien avec vos connaissances en Cobol ! L’objectif est de comprendre ce nouveau modèle.

Nous installerons la version 17 de Java et l’IDE Eclipse pour travailler dans les meilleures conditions.


Mise en contexte : passer de COBOL à Java

En tant que développeur.euse COBOL, vous avez l’habitude de travailler dans un environnement :

Java repose sur une philosophie différente :

Java ne remplace pas vos compétences en COBOL : Il les formalise autrement.


Présentation de l’écosystème Java

Qu’est-ce que Java ?

Comparaison avec COBOL :

Aspect Cobol Java
Paradigme Procédural Orienté Objet
Compilation Code natif pour plateforme Bytecode pour JVM
Portabilité Dépend du compilateur Multi-plateforme via JVM
Lisibilité Verbeux, langage structuré (mot) Concis, syntaxe proche du C
Domaine Mainframe, gestion Universel

Ce langage est

Ce langage n’est pas


Illustration du WORA

wora


JVM, JDK, JRE : explication approfondie

Infrastructure

Plateformes (spécifications)

Il existe aussi d’autres plateformes que nous n’aborderons pas pour cette formation :

Explications détaillées


Equivalences conceptuelles entre Java et COBOL

Élément Java Rôle réel Équivalent conceptuel COBOL
JVM Moteur d’exécution du bytecode. Gère la mémoire, l’isolation, et l’interprétation du bytecode. Runtime mainframe (environnement z/OS exécutant du code compilé).
JRE Environnement complet pour exécuter des programmes Java (JVM + bibliothèques standard). Environnement d’exécution COBOL complet (runtime + bibliothèques système + JCL).
JDK Outils pour développer des programmes Java (compilateur, débogueur, JRE). Compilateur COBOL + utilitaires (IGYCRCTL, DB2, File-AID).

Un développeur.euse Java utilise toujours un JDK.

Un serveur de production peut se contenter d’une JRE.


Cycle de vie d’un programme COBOL

SOURCE COBOL
   ↓
COMPILATION
   ↓
PROGRAMME EXÉCUTABLE
   ↓
EXÉCUTION

Cycle de vie d’un programme Java

SOURCE : MonProgramme.java
   ↓
COMPILATION (javac)
   ↓
BYTECODE : MonProgramme.class
   ↓
JVM
   ↓
EXÉCUTION (java)

Remarque : Le fichier .class n’est pas un exécutable système. Il contient un langage intermédiaire compris uniquement par la JVM. ce n’est pas du code machine natif !


Programme COBOL de référence

Petite mise en bouche avant d’aller plus loin dans l’écriture avec Java.

Quelques exemples comparatifs

alt text

Le lancement de ce programme java dans un éditeur Eclipse affichera ceci dans notre console :

alt text

Tandis qu’un lancement en ligne de commande dans un terminal windows donnera ceci :

alt text

Nous verrons cela ultérieurement…


A quoi ressemble le bytecode concrètement ?

Cette présentation du Bytecode est purement informative, vous n’allez jamais écrire dans ce langage compilé destiné à la JVM !

Il existe 2 moyens de visualier du Bytecode :

Une fois notre programme compilé avec javac fr.formation.mer.HelloWorld, nous avons notre fichier HelloWorld.class.

En écrivant ceci dans notre terminal javap -c fr.formation.mer.HelloWorld nous avons ceci comme résultat :

Pour davantage de précisions (instructions JVM, constantes, signatures, structure interne), on peut ajouter l’attribut -v à notre commande javap -c -v fr.formation.mer.HelloWorld

(Je vous le montre en live)


Exemple simple pour satisfaire votre curiosité

Ci-dessous, une classe avec une méthode nommée addition() :

public class Demo {

    public int addition(int a, int b) {
        return a + b;
    }
}

Ce que pourrait donner le bout de code de la classe (compilée) Demo.class avec l’utilisataire javap :

Compiled from "Demo.java"
public class Demo {
  public Demo();
    Code:
       0: aload_0         → aucun paramètre pour notre constructeur
       1: invokespecial   → Invocation du constructeur
       4: return          → retourne l'objet instancié (j'expliquerai plus tard !)

  public int addition(int, int);
    Code:
       0: iload_1    → charger paramètre 1
       1: iload_2    → charger paramètre 2
       2: iadd       → additionner
       3: ireturn    → retourner le résultat
}

En Cobol ADD A TO B. serait l’équvalent de return a + b; en Java.

En Bytecode cela donne :

iload_1
iload_2
iadd
ireturn

La JVM fonctionne avec une pile (stack), ce n’est pas du registre CPU direct.

Et l’on peut aussi afficher le Bytecode depuis Eclipse mais je ne connais pas de développeur.euse java qui l’utilise !

Afficher le ByteCode avec Eclipse


Voici le code correspondant à notre premier exemple

COBOL (approche procédurale) :

IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO-WORLD.
PROCEDURE DIVISION.
    DISPLAY "Bonjour les Cobolistes !".
    STOP RUN.

Java (approche objet) :

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Bonjour les Cobolistes !");
    }
}

Analyse détaillée du code Java

La classe

public class HelloWorld {

Correspondance COBOL :


La méthode main de Java

public static void main(String[] args)

Pour le moment, ne vous souciez pas de ne pas comprendre toutes les notions Java. Nous allons les aborder progressivement.


Compilation du programme Java

javac fr.formation.mer.HelloWorld.java
javac HelloWorld.java

Comme j’ai écrit ce programme sous l’IDE Eclipse, je me positionne dans le répertoire bin qui va contenir tous les packages et classes java compilées. Les IDE se chargent de compiler le code Java si l’option Build est activée !

Build activé

Génération du fichier dans le répertoire bin\fr\formation\mer si Eclipse (sinon répertoire courant):

HelloWorld.class

Exécution du programme

Nous verrons la notion de package ultérieurement.

java fr.formation.mer.HelloWorld

résultat :

alt text


Mais que fait la JVM ?

  1. Charge la classe (Class Loader)
  2. Localise la méthode main
  3. Exécute les instructions que contient la méthode main()

Voici une explication plus en détail du fonctionnement de la JVM

Comparaison COBOL / Java

COBOL Java
Programme Classe
Exécutable Bytecode
Exécution directe Exécution JVM
PROCEDURE DIVISION Méthode main
DISPLAY System.out.println()

Installation JDK 17 et Eclipse

Nous allons installer ensemble le JDK et par conséquent la VM ainsi que l’IDE Eclipse pour exécuter les premiers exemples.

Installation et configuration de l’environnement

  1. JDK 17 (versions LTS - Long Term Support)
  2. IDE : Eclipse ou IntelliJ IDEA Community (environnement de développement)
  3. Maven (gestionnaire de dépendances que l’on utilisera dans nos projets Spring Boot)
  4. Git (gestionnaire de versions, un peu plus tard, on utilisera GitLab)

Présentation de l’IDE Eclipse :

Présentation de l'IDE Eclipse

Installez Java 17, JDK et Eclipse Témurin

Configurez et utilisez l’IDE Eclipse (prévu Jour 2 sauf si nous avons le temps)

(../../java/java2/ide/README.md)

Ultérieurement, nous verrons les notions de Workspace, Snippets, Perspectives, Package explorer, génération automatique de code, Débugger,…

Travaux pratiques – JOUR 1

Pour écrire et éxécuter le code HelloWorld, nous pouvons utiliser :

TP1 – Modifier le message

Dans un répertoire de travail quelconque, ensuite on utilisera Eclipse comme IDE.

  1. Récupérer la classe HelloWorld et modifier le texte affiché avec un éditeur comme NotePad++ ou autre
  2. Compiler votre classe java
  3. Exécuter votre programme
  4. Observer le résultat dans le terminal ou la console de l’IDE.

Classe à récupérer :

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Bonjour les Cobolistes !");
    }
}

TP2 – Erreur volontaire

Supprimez le point-virgule à la fin de la ligne System.out.println("Bonjour les Cobolistes !");, compilez et constatez l’erreur !


TP3 - Accompagné

Dans ce programme Cobol, identifiez ce que vous pouvez mettre dans une classe Java !

code Cobol

Pour vous aider…

aide

Synthèse

Cette journée a posé les bases fondamentales nécessaires pour aborder Java sereinement.

Le JOUR 2 abordera :

Nous poursuivrons la formation en faisant le lien entre la syntaxe Cobol que vous maitrisez et la syntaxe Java !

Corrections des TP

Lien vers les propositions de correction