Activité : Un premier programme

Consigne

Durant les 45 prochaines minutes, votre tâche est de réaliser votre premier programme, à l’aide de l’environnement de développement intégré (IDE) NetBeans, puis d’en analyser le fonctionnement à l’aide du débogueur (debugger). À la suite de ce travail, pour lequel vous serez guidés pas à pas, nous procéderons à une mise en commun des observations que vous aurez pu faire.

Objectifs

Ce travail a plusieurs objectifs. Le premier est de vous permettre de vous familiariser avec l’environnement de développement (NetBeans) que nous utiliserons tout au long de ce module. Le deuxième objectif est d’apprendre à créer un projet Java et d’être capable de le retrouver dans le système de fichier (l’arborescence des répertoires) et, au besoin, de le copier sur un support de fichier amovible (clé USB, disque dur externe, etc.). Enfin, le troisième objectif est de vous permettre de prendre un premier contact avec le langage Java et avec les outils nécessaires à la réalisation et à l’exécution d’un programme.

Ressources

Logiciel :

  • Oracle NetBeans

Mise en route

Créer un nouveau projet Java

Vous allez créer votre premier programme à l’aide du langage Java et de l’IDE NetBeans. Pour cela, vous allez devoir effectuer les opérations suivantes :

  1. Pour lancer l’IDE NetBeans, cliquez sur le bouton « windows » puis sur l’icône de NetBeans.

  2. Pour créer un nouveau projet, cliquez l’outil « New project »

     Fig. 1 – Fenêtre de l’émulateur de terminal de Gnome

     

  3. Dans la boîte de dialogue qui s’ouvre, sélectionnez la catégorie « Java » puis le projet « Java Application » et cliquez sur « Next > »

     Fig. 1 – Fenêtre de l’émulateur de terminal de Gnome
  4. Saisissez le nom du projet SimpleBatleship, sélectionnez la case à cocher « Create Main Class » puis modifier son nom ch.epaifribourg.ict.m403.SimpleBattleship comme ci-dessous avant de cliquer sur « Finish ».

     Fig. 1 – Fenêtre de l’émulateur de terminal de Gnome
  5. Vous devriez voir maintenant la fenêtre ci-dessous. La partie de gauche est la fenêtre « project » qui présente l’organisation logique des fichiers de votre projet. La fenêtre de droite est l’éditeur de texte (editor) dans laquelle vous allez écrire le texte du programme.

     Fig. 1 – Fenêtre de l’émulateur de terminal de Gnome

Écrire votre premier programme

Vous êtes maintenant prêt à écrire votre premier programme avec le langage de programmation Java. Il s’agit d’une version très simplifiée de la bataille navale dans laquelle il n’y a qu’un joueur actif, vous, et un seul bateau qui ne couvre qu’une seule case dont les coordonnées sont choisies aléatoirement.

Pour écrire ce programme, sélectionnez le fichier SimpleBattleship.java dans la fenêtre du projet, puis dans la fenêtre de l’éditeur de texte saisissez au clavier le texte ci-dessous. Le but étant de vous familiariser avec le langage, ne faites pas de copier-coller. Les lignes qui commence par //sont des commentaires, ces lignes ne font pas partie du programme et ne sont pas exécutées.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package ch.epaifribourg.ict.m403;

import java.util.Random;
import java.util.Scanner;

public class SimpleBattleship {

    public static void main(String [] args) {
        
        // Crée un nouveau générateur de nombres aléatoires
        Random random = new Random();

        // Déclare deux variables (destroyerX et destroyerY) et
        // affecte leur une valeur aléatoire. Ces valeurs sont
        // les coordonnées du destroyer.
        int destroyerX = random.nextInt(10);
        int destroyerY = random.nextInt(10);

        // Déclare une variable qui indique la fin de la partie.
        boolean endOfGame = false;
        
        // Déclare deux variables pour stocker les coordonnées de 
        // tire du joueur.
        int targetX;
        int targetY;

        // Crée un objet Scanner pour lire des caractères au clavier.
        Scanner input = new Scanner(System.in);
        
        
        // Répète tant que la partie n’est pas terminée
        while (!endOfGame) {
            
            // Affiche dans la fenêtre du terminal la demande de 
            // saisie de la valeur X.
            System.out.print("Veuillez saisir la coordonnée en X (0-9) : ");
            // Lis la valeur X au clavier (attend jusqu’à ce que l’utilisateur
            // entre une valeur) et stocke cette valeur dans la variable targetX.
            targetX = input.nextInt();
            
            // Affiche dans la fenêtre du terminal la demande de 
            // saisie de la valeur Y.
            System.out.print("Veuillez saisir la coordonnée en Y (0-9) : ");
            // Lit la valeur Y au clavier (attend jusqu’à ce que l’utilisateur
            // entre une valeur) et stocke cette valeur dans la variable targetY.
            targetY = input.nextInt();
            
            
            // Si la coordonnée saisie par l’utilisateur correspond à la coordonnée
            // du destroyer alors la partie est terminée.
            if (targetX == destroyerX && targetY == destroyerY) {
                System.out.println("Coulé !");
                endOfGame = true;
            } else {
                // Si la coordonnée X ou la coordonnée Y saisie par l’utilisateur 
                // correspond à celle du destroyer, indique "En vue", sinon 
                // affiche "À l’eau".
                if (targetX == destroyerX || targetY == destroyerY) {
                    System.out.println("En vue !");
                } else {
                    System.out.println("À l’eau !");
                }
            }
        }
    }
}
Fig. 1 – Code source du programme

L’éditeur de texte de NetBeans effectue automatiquement une coloration syntaxique qui change la couleur des mots en fonction de leur nature. Les mots en bleu sont appelés mots clés (key words) ; ce sont des mots qui ont une signification particulière dans le langage Java. Les mots en vert sont des champs (fields) d’un objet (vous verrez ce que cela signifie lors du module 404) et les mots en orange sont des chaînes de caractères (strings)

L’éditeur de texte vous aide également à détecter et à corriger vos erreurs. Faites successivement les expériences ci-après pour découvrir ces aides.

Expérience 1 : à la ligne 32, changez

1
    while (!endOfGame) {

en

1
    weile (! endOfGame) {

Observez les informations que NetBeans vous donne, notez-les sur une feuille et tentez de les interpréter.

Expérience 2 : à la ligne 51, changez

1
    if (targetX == destroyerX && targetY == destroyerY) {

en

1
    if (targetX == destroyerX && targetY == destroyerZ) {

Observez les informations que NetBeans vous donne, notez-les sur une feuille et tentez de les interpréter.

Compiler votre premier programme

Le programme que vous venez d’écrire se compose d’une séquence d’instruction, c’est-à-dire une suite d’instructions ou d’ordres qui doivent être exécutés les unes après les autres en commençant à la ligne public static void main(String [] args) qui représente le point d’entrée du programme et qui se termine à la dernière ligne.

Mais Java est un langage de haut niveau conçu pour permettre à des humains d’écrire des programmes et de pouvoir réfléchir sur ces programmes, alors que l’ordinateur, lui, ne comprend que des programmes écrits dans son langage où les instructions ne sont qu’une longue suite de chiffres binaires (0 ou 1) appelés bits (binary digits). Il faut donc traduire le programme que vous avez écrit en langage Java dans un programme équivalent écrit dans un langage de bas niveau que l’ordinateur pourra comprendre et qu’on appelle généralement langage machine.

Cette opération de traduction d’un langage de programmation dans un autre s’appelle la compilation et s’effectue à l’aide d’un programme appelé compilateur. La compilation est l’une des tâches essentielles de ce que l’on appelle la construction (build) du logiciel. Avec NetBeans, la construction du logiciel peut être lancée à l’aide du menu « Run/Clean and Build Project » ou par la combinaison de touches Ctrl-Maj-F11.

Si vous avez copié le programme sans erreur, en lançant la construction de votre application, vous devriez avoir le résultat ci-dessous. Si ce n’est pas le cas, c’est que vous avez commis une erreur en copiant le programme. En principe, l’éditeur devrait vous donner suffisamment d’indications pour vous permettre de la localiser.

Fig. 2 – Résultat de la compilation
Fig. 2 – Résultat de la compilation

Exécuter votre premier programme

Votre programme est maintenant prêt à être utilisé. Pour son inauguration, nous allons procéder comme le ferait un utilisateur normal, en utilisant un programme appelé « émulateur de terminal » (voir encadré) qui permet d’accéder à l’interface en ligne de commande de Windows. Encore une fois, vous allez être guidé pas à pas.

  1. Lancez l’interpréteur de commande de Windows avec la commande cmd

  2. Lorsque l’interpréreur de commande est démarré, vous êtes dans votre profil : C:\Users\<votre nom d’utilisateur> (vous pouvez vous y rendre rapidement en tapant la commande cd %userprofile%)

  3. Votre programme se trouve dans votre répertoire Docments et dans le sous-répertoire suivant : NetBeansProjects/SimpleBattleship/dist/. Pour changer de répertoire de travail, on utilise la commande  cd (change directory).

  4. Vous pouvez lister le contenu d’un répertoire avec la commande dir.

  5. Votre programme est le fichier SimpleBattleship.jar. On lance son exécution avec la commande java -jar SimpleBattleship.jar. Lancez le programme plusieurs fois en saisissant des valeurs différentes et observez le comportement. (Vous pouvez utiliser les touches fléchées haut et bas pour rappeler une commande que vous avez déjà tapée)

Exécuter votre programme à l’aide du débogueur

Lorsqu’un ordinateur exécute un programme, il exécute chaque instruction aussi vite qu’il le peut. Il est donc impossible de suivre ce qui se passe durant l’exécution sauf lorsque le programme doit attendre sur une action de l’utilisateur.

Nous allons voir maintenant une manière d’exécuter le programme à la vitesse que vous souhaitez en donnant vous-même le rythme d’exécution des instructions à l’aide d’un autre outil intégré à NetBeans : le débogueur symbolique (symbolic debugger ou source-level debugger). On appelle cela l’exécution pas à pas (step by step execution).

  1. Pour commencer, vous allez placer un point d’arrêt (breakpoint) sur la première ligne de votre programme. Pour ce faire, placez le curseur sur la ligne 11 en cliquant sur cette ligne, puis utilisez le bouton droit pour obtenir le menu contextuel pour cette ligne, c’est-à-dire le menu des opérations que vous pouvez faire sur la chose qui se trouve sous le pointeur de la souris (le contexte). Dans ce menu, cliquez sur « Toggle Line Breakpoint ».

     Ajouter un point d’arrêt
  2. La ligne 10 devrait maintenant apparaître sélectionnée en rouge comme sur l’image ci-dessous. Nous allons maintenant demander à NetBeans de lancer le programme avec le débogueur, ce qui aura pour effet d’interrompre l’exécution sur le premier point d’arrêt rencontré. Pour cela, cliquez sur le bouton « Debug Project ».

     Démarrer le débogueur
  3. Lorsque l’exécution du programme s’interrompt, la ligne 10 doit apparaître en vert. Vous pouvez maintenant utiliser le bouton « Step Over » pour faire avancer le programme à la prochaine étape, on dit que l’on exécute le programme pas à pas (step by step execution).

     Démarrer le débogueur
  4. À chaque étape, vous pouvez utiliser le pointeur de la souris pour voir le contenu des variables.

     Démarrer le débogueur
  5. Vous pouvez également utiliser la fenêtre « Variables » pour visualiser le contenu de toutes les variables du programme en cours.

     Démarrer le débogueur
  6. Lorsque vous arrivez sur l’instruction input.nextInt(), l’instruction attend qu’un nombre soit saisi au clavier. Pour continuer, vous devez donc aller dans le fenêtre « Output », y placer le curseur, saisir un nombre entre 0 et 9 et appuyer sur la touche Entrer.

     Démarrer le débogueur
  7. Vous pouvez à tout moment arrêter le débogueur avec le bouton stop.

     Démarrer le débogueur

Amusez-vous, explorez l’outil, essayez d’utiliser les raccourcis clavier, etc.