17
Premier programme JAVA A - Concept Historiquement, l'algorithme en tant que méthode de calcul précède donc nettement l'invention de l'ordinateur. Parmi les algorithmes les plus célèbres, on peut citer l'algorithme d'Euclide qui permet de calculer le plus grand diviseur commun (PGCD ) de deux nombres entiers (le plus grand entier qui divise les deux entiers). Le principe peut être résumé comme suit : Soient a et b deux entiers dont on souhaite obtenir le PGCD. Supposons a ≥ b. On calcule le reste r de la division euclidienne de a par b. o Si r est nul (i.e. si b divise a), alors le PGCD est b. o Si r n'est pas nul, on réitère le processus en remplaçant a par b et b par r. Par exemple, supposons que l'on souhaite obtenir le PGCD de 98 et 70. On a donc a = 98 et b = 70 en début de calcul. Itération 1 : a = 98, b = 70 o On a : , soit r = 28 o Le reste est non nul : on recommence en posant a = 70 et b = 28 Itération 2 : a = 70, b = 28 o On a : a = b x 2 + 14, d'où r = 14 o Le reste est non nul : on recommence en posant a = 28 et b = 14 Itération 3 : a = 28, b = 14 o On a : a = b x 2 + 0 o Le reste est nul : le PGCD vaut donc 14. Grossièrement, un programme d'ordinateur peut être vu comme un très gros algorithme, savoir écrire correctement un algorithme est donc un élément de l'apprentissage de la programmation.

Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Premier programme JAVA

A - Concept

Historiquement, l'algorithme en tant que méthode de calcul précède donc nettement l'invention de l'ordinateur.

Parmi les algorithmes les plus célèbres, on peut citer l'algorithme d'Euclide qui permet de calculer le plus grand diviseur commun (PGCD) de deux nombres entiers (le plus grand entier qui divise les deux entiers).

Le principe peut être résumé comme suit :

Soient a et b deux entiers dont on souhaite obtenir le PGCD. Supposons a ≥ b.

On calcule le reste r de la division euclidienne de a par b. o Si r est nul (i.e. si b divise a), alors le PGCD est b. o Si r n'est pas nul, on réitère le processus en remplaçant a par b et b

par r.

Par exemple, supposons que l'on souhaite obtenir le PGCD de 98 et 70. On a donc a = 98 et b = 70 en début de calcul.

Itération 1 : a = 98, b = 70

o On a : , soit r = 28 o Le reste est non nul : on recommence en posant a = 70 et b = 28

Itération 2 : a = 70, b = 28 o On a : a = b x 2 + 14, d'où r = 14 o Le reste est non nul : on recommence en posant a = 28 et b = 14

Itération 3 : a = 28, b = 14 o On a : a = b x 2 + 0 o Le reste est nul : le PGCD vaut donc 14.

Grossièrement, un programme d'ordinateur peut être vu comme un très gros algorithme, savoir écrire correctement un algorithme est donc un élément de l'apprentissage de la programmation.

Page 2: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

B - Pseudo-code

Le pseudo-code (ou langage de spécification d'algorithme) est un pseudo-langage fréquemment utilisé pour décrire de façon informelle un algorithme sans privilégier un langage de programmation particulier.

L'idée est d'avoir une description d'une partie d'un programme dans une syntaxe relativement souple mais suffisamment précise pour pouvoir assurer une traduction effective dans le langage choisi.

Il n'y a pas de convention stricte sur la syntaxe, mais on utilise un jeu d'instruction proche de ce qu'on trouve dans les langages de programmation classiques.

Nous donnons par exemple ci-dessous l'algorithme d'Euclide exprimé en pseudo-code :

Algorithme d'Euclide

Variables

a, b, r : entier

Début

afficher "Donner un entier a : "

lire a

afficher "Donner un entier b (b<=a) : "

lire b

r ← a % b

tant que r ≠ 0 faire

a ← b

b ← r

r ← a % b

fin tant que

afficher "Le PGCD vaut " + r

Fin

On peut remarquer plusieurs éléments fondamentaux :

l'utilisation de variables (ici a, b et r) pour stocker des valeurs les instructions d'entrées (lire) et de sortie (afficher) pour décrire un

dialogue avec l'utilisateur du programme l'instruction d'affectation (symbolisée par la flèche ←) pour modifier la

valeur d'une variable l'utilisation d'une boucle tant que pour réaliser plusieurs fois une

séquence d'instruction nous avons noté % l'opération qui calcule le reste de la division

euclidienne

Page 3: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

C - Traduction en Java

Une fois l'algorithme correctement décrit, l'étape suivante consiste en la traduction dans un langage spécifique.

Cette année nous utiliserons Java.

Sans trop entrer dans les détails, on peut indiquer que programmer en Java consiste à écrire des ce que l’on appelle des classes qui peut être composée de plusieurs méthodes ou fonctions. La méthode qui démarre un programme Java est une méthode particulière appelée main.

Pour l'instant, nous nous contenterons de donner la traduction de l'algorithme d'Euclide :

package td1; public class Euclide { /** * @param args */ public static void main(String[] args) { int a, b, r; Scanner clavier = new Scanner( System.in ); System.out.println( "Donnez un entier a : " ); a = clavier.nextInt(); System.out.println( "Donnez un entier b : " ); b = clavier.nextInt(); r = a % b; while (r!=0) { a = b; b = r; r = a % b; } System.out.println( "Le PGCD vaut : "+b ); } }

On peut faire quelques remarques sur ce programme :

int est un mot clé qui permet de définir des variables entières Scanner est une classe qui permet de définir un objet (appelé ici clavier)

qui nous permet de lire des entiers depuis le clavier (en utilisant la méthode nextInt).

On peut écrire des messages à l'écran par l'instruction System.out.println.

L'affectation s'écrit = en langage Java.

Page 4: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

La boucle tant que est traduite par l'instruction Java while (...) ... Le symbole mathématique ≠ s'écrit != en Java.

Dans la suite du TD, nous allons programmer et exécuter cette classe en utilisant un logiciel de développement : Eclipse.

D - Démarrer Eclipse

Nous supposons ici que vous avez un environnement Java installé conformément à la démarche indiquée dans Installer un environnement Java.

Pour commencer, il faut lancer Eclipse en lançant eclipse.exe depuis le répertoire d'installation d'Eclipse.

Selon la configuration initiale, vous pouvez avoir l’écran d’accueil d’Eclipse avec des liens vers des présentations ou des tutoriels d’apprentissage. Vous pourrez y revenir à tout moment via le menu Help -> Welcome.

À noter que l'affichage peut légèrement différer selon la version d'Eclipse disponible.

Pour l’instant, si nécessaire, quittez cet accueil en cliquant sur la flèche «workbench » pour accéder à l’environnement de travail classique.

Page 5: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Les projets que vous allez réaliser sous Eclipse sont généralement stockés dans un répertoire de travail appelé workspace.

Ce répertoire de travail est peut être configuré par défaut pour être présent sur le lecteur E:.

Pour s'assurer du workspace en cours d'utilisation et éventuellement modifier celui-ci, utilisez l'option Switch Workspace... du menu File pour visualiser le dossier de travail.

Par exemple, si celui-ci est positionné sur C:\Workspace, vous pouvez modifier l'option en cliquant sur le bouton Browse...

Vous pouvez ensuite naviguer vers un lecteur de votre choix (par exemple U: s'il est présent sur votre système) et créer le cas échéant un nouveau dossier workpace sur U: pour obtenir :

Page 6: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Si vous cliquez sur ok Eclipse doit redémarrer en utilisant ce nouveau répertoire de travail.

E - Création d'un projet sous Eclipse

Par défaut, tous vos projets Eclipse et les fichiers associés seront maintenant enregistrés sur le répertoire de travail U:\workspace.

Pour créer un nouveau projet, utilisez le menu File -> New -> Project…

Un assistant de création de projet doit apparaître.

Sélectionnez le sous-item Java Project puis cliquez sur le bouton Next.

Page 7: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Renseignez le nom du nouveau projet (par exemple TDM) et sélectionnez l’option Create separate source and output folders pour obtenir des fichiers sources et compilés dans des répertoires séparés.

Nous n'avons pas besoin d'option supplémentaire : cliquez sur Finish.

Eclipse utilise des configurations d'écran spécifiques (appelées perspectives) selon les besoins.

On peut visualiser la perspective courante dans l'onglet en haut à droite de la fenêtre d'Eclipse :

Normalement, vous êtes déjà dans la perspective Java. Si ce n'était pas le cas, une fenêtre a du s'ouvrir pour vous proposer de passer dans ce mode d'affichage. Cliquez sur Yes pour vous placez dans ce mode de présentation d’Eclipse.

Page 8: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Voilà à peu près la configuration que vous devez obtenir :

F - Création d'un paquetage

Développer en langage Java consiste essentiellement à écrire des classes.

Nous nous contentons ici de montrer comment on traduit un algorithme en une classe Java qui pourra ensuite être exécutée.

Remarquons que d'une façon plus générale un programme est constitué d'un certain nombre de classes qui peut être conséquent.

Pour mieux organiser la structure du programme, les classes sont donc regroupées dans différents dossiers selon leur usage. Ces dossiers sont appelés paquetage (packages).

Page 9: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Nous créons ici un paquetage pour regrouper les classes que nous pourrons développer dans le tutoriel.

Utilisez le menu File -> New puis sélectionnez l'item Package :

Renseignez le nom du nouveau paquetage (par exemple td1) et cliquez sur Finish.

Par convention, le nom d'un paquetage doit commencer par une lettre minuscule.

Le paquetage créé doit alors apparaître dans la fenêtre d'exploration de paquetage (Package Explorer) :

G - Création d'une classe

Nous allons maintenant créer notre première classe sous Eclipse. Nous allons recréer la classe Euclide.java présentée précédemment.

Page 10: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Cliquez-droit sur le paquetage td1 dans la fenêtre d'exploration de paquetage et sélectionnez l'item New puis Class :

Dans la rubrique Name, indiquez le nom de la classe (Euclide) et cochez le cas échéant la case qui indique qu'on souhaite rendre la classe exécutable (demande d'une création automatique d'une méthode public static void main(String[] args).

Une fois le bouton Finish activé, vous devez obtenir le squelette de notre future classe :

Page 11: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

À noter que l'instruction package td1; indique que la classe appartient au

paquetage td1.

Compléter le code pour obtenir :

Page 12: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Eclipse vous indique alors qu'il y 2 erreurs dans votre code.

Elles ont la même explication : la classe Scanner (qui permet de décoder ce qui est transmis par le clavier via System.in) est inconnue.

En fait, le problème tient au fait que cette classe est définie dans un autre paquetage (java.util) et qu'il faut indiquer le nom de ce paquetage pour utiliser la classe Scanner.

Eclipse propose de nous aider à résoudre le problème. Pour ce faire, cliquez sur

l'icone face à la ligne de code où se situe le problème.

Eclipse propose alors plusieurs corrections possibles :

La bonne correction pour notre programme est la seconde (Import 'Scanner' (java.util)) : double-cliquez sur cette correction.

Eclipse ajoute alors l'instruction qui permet d'utiliser la classe java.util.Scanner

: import java.util.Scanner;

Cliquez enfin sur l'icone d'enregistrement : votre classe est prête à être exécutée.

Page 13: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

H - Exécution du programme

Nous allons maintenant exécuter notre programme dans l'environnement d'Eclipse.

Le plus simple consiste à cliquer-droit sur le nom de la classe (Euclide.java) dans la fenêtre Package Explorer, puis à sélectionnez Run As -> Java Application.

Si votre programme a été modifié, Eclipse vous suggère de l'enregistrer au préalable pour exécuter la bonne version.

Une fois lancé, le dialogue s'affiche dans la fenêtre Console en bas de l'écran :

Eclipse a maintenant créé une configuration d'exécution pour notre classe : vous pouvez relancer la dernière configuration (ou sélectionner une autre configuration

sauvegardée) en cliquant sur le bouton .

I - Débogage

Limiter les bogues est une activité essentielle du développement logiciel.

Le débogueur est un outil privilégié pour cette traque aux anomalies.

Celui-ci permet en effet en particulier de tracer l'exécution du code au plus près, notamment en autorisant une exécution pas à pas et une visualisation de l'état des variables en cours d'exécution.

Nous allons introduire quelques unes des possibilités offertes par cet outil en nous basant sur notre programme.

Pour commencer, nous allons créer un point d'arrêt à l'intérieur de notre code en cliquant droit sur le bord de la fenêtre d'édition et en sélectionnant Toggle

Breakpoint en face de la ligne Scanner clavier = ... :

Page 14: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Le point d'arrêt est matérialisé par une puce bleue.

Vous pouvez alors lancer le débogage en cliquant sur l'icone .

Eclipse doit alors vous demander la confirmation du passage du mode de perspective vers le mode débogage. Cliquez sur Yes.

Le mode d'affichage est alors réorganisé pour prendre en compte les besoins spécifique du débogage :

Page 15: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Le menu Run vous donne l'essentiel des commandes disponibles (accompagnées de leur raccourci clavier) :

En résumé, la touche F8 permet de poursuivre l'exécution jusqu'au prochain point d'arrêt (ou la fin du programme), Terminate interrompt le débogage, F5 effectue un pas détaillé (éventuellement à l'intérieur d'une méthode) et F6 exécute l'instruction en entier.

Pour l'heure, nous utiliserons essentiellement F8 et F6.

Tapez sur F6.

Page 16: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Le débogueur doit alors passer à la ligne suivante et une nouvelle variable (clavier) doit apparaître dans la fenêtre d'inspection des variables.

Pressez de nouveau F6 deux fois de suite pour exécuter l'instruction : a = clavier.nextInt();

Vous devez maintenant saisir une valeur numérique dans la fenêtre Console. Donnez par exemple la valeur 426.

La variable a apparaît maintenant avec la valeur saisie dans la fenêtre d'inspection :

Procéder de même pour affecter la valeur 168 à la variable b.

Pour accélérer le debogage, nous allons placer un point d'arrêt sur l'instruction r = a % b; qui figure à l'intérieur de la boucle while et presser F8 :

Page 17: Premier programme JAVA - Freelepoittevin.olivier.free.fr/java/javaPremiersProgrammes.pdf · Le symbole mathématique ≠ s'écrit!= en Java. Dans la suite du TD, nous allons programmer

Vous possédez maintenant les rudiments de l'utilisation d'un débogueur : utilisez vos connaissances pour exécuter le programme jusqu'à la fin (en utilisant alternativement F6 ou F8 pour bien saisir la différence de comportement entre ces deux commandes).

K - Application

Vous êtes désormais parés pour la traduction en Java d'algorithmes simples.

Pour progresser dans votre maîtrise du langage Java et de la programmation en général, il est indispensable de pratiquer au maximum et de bien se familiariser avec le débogueur.

L - Pour aller plus loin Le site officiel d'Eclipse est www.eclipse.org.

Vous trouverez d'autres sites intéressants dans la rubrique liens, et plus particulièrement un tutoriel sur l'utilisation d'Eclipse.