CentraleSupélecDépartement informatique
Plateau de Moulon
3 rue Joliot-Curie
F-91192 Gif-sur-Yvette cedex
Génie logiciel orienté objet - Exercice : Mon premier programme Java avec Eclipse

Exercice

1. Lancement

  • Demander un environnement sur MyDocker
  • Cliquer sur l'icône Eclipse dans le panneau en bas.
  • La fenêtre de choix de votre espace de travail apparait :

Choix de l'espace de travail

La majorité des environnements de développement proposent deux niveaux d'organisation des fichiers : les projets (qui contiennent en général plusieurs fichiers) correspondants à une même activité peuvent être regroupés dans un espace, appelé workspace par Eclipse. Vous pouvez par exemple décider d'avoir un espace de travail gloo pour tous les projets que vous allez faire dans cet électif (ce choix est celui fait dans l'exemple montré).

Les workspace mémorisent aussi certains réglages qui seront appliqués à tous les projets qui s'y trouvent.


  • Choisir l'espace de travail et cliquer sur  Launch .
  • L'écran de bienvenue s'affiche, cliquer sur le bouton pour le fermer (une fenêtre Firefox s'ouvre aussi, avec un message d'erreur, la fermer).

Écran de bienvenue

  • Votre environnement de travail ressemble alors à ceci :

Workspace initial

  • Fermer la vue Task List qui n'est pas utile.

2. Création du projet

  • Créer un nouveau projet Java (Create a Java project dans l'onglet Package Explorer ou File → New → Java Project) nommé gloo.factorielle.

Création d'un nouveau projet Java

  • Cliquer sur  Finish , votre nouveau projet apparait dans votre espace de travail, vous pouvez utiliser les pour afficher son contenu :

Workspace après la création du nouveau projet

Le dossier src contient le code source du projet. Un fichier, module-info.java est déjà présent, nous pouvons l'ignorer pour l'instant.

3. Création du programme

  • Créer une nouvelle classe Factorielle (menu File → New → Class ou menu droit sur le projet → New → Class) en demandant la création de la méthode main ; vérifier que le paquetage est gloo.factorielle :

Création d'une nouvelle classe

  • Modifier la fonction main avec code suivant :
    public static void main(String[] args) {
        System.out.println("La factorielle de 5 est 120");
    }

L'indentation est importante pour la compréhension du code. Le raccourci ctrl/cmd i permet d'indenter correctement la partie de code sélectionnée (ctrl/cmd a permet de sélectionner tout le code).

  • Sauvegarder votre fichier modifié en cliquant sur l'icône disquette :

Sauvegarde d'un fichier modifié

4. Exécution du programme

  • Exécuter votre programme en cliquant sur la flèche verte :

Lancement du programme

Le message s'affiche dans un onglet Console (qui s'ouvre s'il ne l'était pas avant).

5. Définition de la fonction factorielle

  • Ajouter à l'intérieur de la classe Factorielle la fonction de calcul de la factorielle qui reçoit un argument de type long et retourne un long :
    public static long factorielle(long n) {
        if (n == 0) return 1;
        return n * factorielle(n - 1);
    }

6. Utilisation de la fonction factorielle

  • Pour récupérer le nombre donné par un utilisateur, nous allons utiliser la classe java.util.Scanner. Modifier la fonction principale ainsi :
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Donner un nombre : ");
        long valeur = input.nextLong();
        long fact = factorielle(valeur);
        System.out.println("La factorielle de " + valeur + " est " + fact);
        input.close();
    }

Eclipse souligne Scanner en rouge car cette classe n'est pas connue par défaut. Si vous déplacez le curseur sur ce mot souligné, Eclipse vous propose des quick fixes. Celui qui nous intéresse est Import 'Scanner' (java.util), choisissez le.


Quick fixes proposés par Eclipse

La ligne

import java.util.Scanner;

est ajoutée par Eclipse, et Scanner n'est plus souligné en rouge.

Quand vous exécutez le programme, c'est dans l'onglet Console que vous entrerez le nombre demandé.


Lecture d'un nombre sur la console



👏 Bravo, vous avez réussi à écrire votre premier programme interactif Java👏

8. Écriture d'un programme en autonomie

  • Créer un nouveau projet Java nommé gloo.fibonnaci.
  • Créer une nouvelle classe Fibonacci en demandant la création de la méthode main.
  • Ajouter à l'intérieur de la classe Fibonacci une fonction qui reçoit un argument de type long et retourne un long qui est le successeur de l'argument selon les règles de la suite de Fibonacci.
  • Modifier la fonction main pour qu'elle demande un nombre à l'utilisateur et affiche la suite de Fibonacci de ce nombre.

8. Débogage de votre programme

  • Relancer votre programme en donnant 20 comme valeur :

Calcul de la factorielle de 20

puis 21 :


Calcul de la factorielle de 21

Manifestement, ce résultat est incorrect.

  • Double-cliquer dans l'espace à gauche des numéros de ligne, face à l'appel de la fonction factorielle, un petit rond bleu apparait, c'est un point d'arrêt pour le débogueur :

Ajout d'un point d'arrêt

  • Lancer votre programme sous le contrôle du débogueur

Lancement avec le débogueur

  • Donner de nouveau 21 comme valeur, un dialogue vous demande de confirmer le changement de perspective :

Dialogue de changement de perpective

Une perpective est un arrangement particulier de vues et d'outils afin de faciliter certaines actions.



La perpective de débogage affiche à gauche la pile d'appels, au centre le core source avec une mise en évidence de la prochaine instruction qui va être exécutée, et à droite les variables visibles avec leurs valeurs. La palette d'outils est aussi modifiée.


Perpective de débogage

Le débogueur a suspendu l'exécution du programme au niveau du point d'arrêt, donc avant l'appel à la fonction factorielle. On peut vérifier que la variable valeur vaut 21.

  • Effectuer un pas à pas entrant :

Bouton du pas à pas entrant

Comme l'instruction courante est un appel à la fonction factorielle, cette commande a pour effet d'effectuer cet appel avec une suspension sur la première instruction de cette fonction :


Après le pas à pas entrant

On peut vérifier que l'argument n vaut 21.

  • Effectuer un pas à pas principal pour exécuter le test :

Bouton du pas à pas principal

Cette commande a pour effet d'effectuer complètement l'instruction courante, y compris si c'est un appel de fonction. Ce n'est pas le cas ici, et comme le test est négatif, l'exécution est suspendu sur l'appel récursif.

  • Effectuer de nouveau un pas à pas entrant :

Après le pas à pas entrant

L'exécution est suspendue de nouveau sur la première instruction de la fonction factorielle, mais cette fois ci, la valeur de l'argument n est 20, et on peut visualiser la récursion dans la vue de la pile d'appels.

  • Effectuer un pas à pas sortant :

Bouton du pas à pas sortant

Cette commande a pour effet d'effectuer toutes les instructions jusqu'à ce que l'appel courant soit terminé. La suspension se fait donc au niveau de l'appel qui a appelé l'appel courant, ici au niveau de l'appel à factorielle(21) qui a appelé factorielle(20). On peut visualiser le résultat de cet appel dans la vue des variables et vérifier que ce résultat est correct :


Après le pas à pas sortant

  • Effectuer de nouveau un pas à pas sortant. L'exécution est donc suspendue dans main au niveau de l'appel à factorielle(21). On s'aperçoit que c'est ici que le résultat devient négatif, et donc incorrect.
  • Terminer l'exécution avec le bouton de terminaison :

Bouton de terminaison

  • et revenir à la perpective Java :

Bouton pour revenir à la perpective Java

  • Corriger votre programme pour ignorer les valeurs d'entrée négatives ou supérieures strictement à 20.

D'où provient l'erreur ?
  • Une variable de type long en Java stocke des entiers sur 64 bits en complément à 2. La plus grande valeur représentable est 263 - 1 qui est plus grande que la factorielle de 20 mais plus petite que celle de 21. Il y a donc débordement et le nombre tronqué est alors un nombre négatif.

Comment obtenir une archive d'un projet Eclipse ?
  • Il existe une commande Export... dans le menu File et dans le menu contextuel sur un projet, choisir ensuite Archive File dans General.



© 2024-25 CentraleSupélec