TP1. Outils Java Eléments de correction



Documents pareils
INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Java Licence professionnelle CISII,

TP1 : Initiation à Java et Eclipse

Traitement de données

Initiation à JAVA et à la programmation objet.

TP1 : Initiation à Java et Eclipse

Bases Java - Eclipse / Netbeans

Plan du cours. Historique du langage Nouveautés de Java 7

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Installation et prise en main

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Module d anonymisation

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Remise à niveau d un programme JAVA du domaine public

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Utiliser Java sans BlueJ

Java Licence Professionnelle CISII,

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

TP, première séquence d exercices.

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

as Architecture des Systèmes d Information

Introduction à Eclipse

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

Introduction à Java. Philippe Genoud.

Programmer en JAVA. par Tama

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

Remote Method Invocation (RMI)

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Tp 1 correction. Structures de données (IF2)

Chapitre I Notions de base et outils de travail

Environnements de développement (intégrés)

Systeme d'exploitation

Java c est quoi? Java pourquoi?

Eclipse atelier Java

TD/TP 1 Introduction au SDK d Android

bbc Launch Pad Juillet 2011 Version 10.0

Programmeur Java 1.4 et 5.0

Environnements de développement (intégrés)

Cours 1: Java et les objets

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

ACTIVITÉ DE PROGRAMMATION

Généralités sur le Langage Java et éléments syntaxiques.

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Java au cœur de la base de données Oracle

Remote Method Invocation Les classes implémentant Serializable

27/11/12 Nature. SDK Python et Java pour le développement de services ACCORD Module(s)

La base de données XML exist. A. Belaïd

HTML. Notions générales

Programmation par les Objets en Java

INITIATION AU LANGAGE JAVA

Tutoriel d installation de Hibernate avec Eclipse

Introduction à Linux (pour le HPC) «Linux 101» Présentation :

Présentation de Java. Olivier de Pertat IT GROUP

Premiers Pas en Programmation Objet : les Classes et les Objets

Hadoop / Big Data. Benjamin Renaut <renaut.benjamin@tokidev.fr> MBDS

Java Avancé. Le langage Java. Rémi Forax

Annexe 10 - Procédure pour créer un Jar

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Programmation Objet Java Correction

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Programmation Orientée Objet

Une introduction à Java

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Quelques éléments de compilation en C et makefiles

Dossier. Développer en Java sur téléphone mobile. Benjamin Damécourt UFR SITEC Master 2 EESC 11 janvier 2012

Module.NET 3 Les Assemblys.NET

Construire des plug-ins pour SAS Management Console SAS 9.1

Cours 1 : Qu est-ce que la programmation?

Cours Langage C/C++ Programmation modulaire

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

TD séances n 3 et n 4 Répertoires et Fichiers sous Unix

Java Licence Professionnelle CISII,

Introduction au langage C

Le langage C. Séance n 4

Initiation à html et à la création d'un site web

Web Tier : déploiement de servlets

Tutoriel BlueJ. Michael Kölling Mærsk Institute University of Southern Denmark. Version 1.4 fr-2 par le groupe Sigma 1 pour BlueJ Version 1.2.

Cours d initiation à la programmation en C++ Johann Cuenin

C.M. 1 & 2 : Prise en main de Linux

Outils pour la pratique

Corrigé des exercices sur les références

Fichiers d'archives java - *.jar

Java DataBaseConnectivity

Les outils actuels permettent-ils d automatiser la production de cartes? De quels outils dispose-t-on?

Introduction aux concepts d ez Publish

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Chapitre 1 Qu est-ce qu une expression régulière?

Aide-Mémoire unix. 9 février 2009

TP 1 Prise en main de l environnement Unix

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

Programmation en Java IUT GEII (MC-II1) 1

Transcription:

c sep. 2008, v2.1 Java TP1. Outils Java Eléments de correction Sébastien Jean Le but de ce TP, sur une séance, est de se familiariser avec les outils de développement et de documentation Java fournis par Sun sous le nom de J2SE SDK. 1 Préambule 1.1 Rappels sur les variables d environnement Les variables d environnement sont utilisées par le système sous-jacent (Windows, DOS, Linux) pour obtenir des informations sur des chemins d accès,... Certaines variables d environnement sont déjà définies (par exemple, la variable d environnement PATH contient les répertoires de recherche dans lesquels le shell cherche l existence de fichiers lorsqu on lui demande l exécution d une commande qu il ne connaît pas), d autres peuvent être définies par l utilisateur lorsqu il le souhaite. Une variable d environnement est caractérisée par son nom, sa valeur (une chaîne de caractères) et dans certains cas son accessibilité (publique/privée). 1.1.1 Syntaxe Linux Pour définir une variable d environnement privée de nom var et de valeur val, il suffit de taper dans une console shell var=val, Pour que cette variable d environnement devienne publique (c est à dire qu elle soit connue de tous les processus issus de ce shell), il suffit de taper dans la même console export var, La valeur de cette variable peut ensuite être désignée et utilisée via $var, Le contenu de cette variable peut également être visualisé avec echo $var, Enfin, pour supprimer la définition de cette variable, il suffit de taper (toujours dans la console) unset var. 1.1.2 Syntaxe DOS/Windows Pour définir une variable d environnement publique (il n est pas possible de créer de variable d environnement privée en DOS) de nom var et de valeur val, il suffit de taper dans une console DOS SET var=val, La valeur de cette variable peut ensuite être désignée et utilisée via %var%, Le contenu de cette variable peut également être visualisé avec echo %var%, Enfin, pour supprimer la définition de cette variable, il suffit de taper (toujours dans la console) SET var=. 1.2 Avant toute chose... Dans votre répertoire de travail, créez un répertoire manip1 et éditez-y le fichier HelloWorld.java dont le contenu sera le suivant : public class HelloWorld public static void main (String[] args) System.out.println("Hello world"); 1

L éditeur utilisé est quelconque : emacs, vi, jgrasp, kedit,...certains éditeurs ont la faculté de colorer la syntaxe et ainsi de donner la possibilité au rédacteur de se rendre compte plus rapidement d éventuelles erreurs dans l écriture de mots-clés du langage,... Cette application java est quasiment la plus simple qu il soit possible d écrire. Elle consiste à afficher le message «Hello world» sur la console. Les différentes constructions de langage sont résumées dans le document d accompagnement intitulé «Eléments de syntaxe». Au cours de ce TP, nous ne nous intéresserons qu à la compilation, l exécution, l archivage et la documentation d applications. 2 Manipulations 2.1 Compilation, utilisation basique de javac Comme tout programme source de type non script, notre application Java nécessite d être compilée pour pouvoir être exécutée ultérieurement. Cette opération s effectue à l aide de la commande javac. En vous plaçant dans le répertoire où le fichier est édité, exécutez la commande javac sans paramètre pour obtenir l aide en ligne. Compilez ensuite la classe HelloWorld et vérifiez qu un fichier.class a bien été produit dans le même répertoire. Ligne de commande pour compiler : javac HelloWorld.java Ligne de commande pour exécuter : java HelloWorld Exécutez la même commande avec l option -verbose et observez les informations générées durant le processus de compilation. Ces informations vous en apprendront plus sur la manière dont se déroule la compilation. On aperçoit en particulier que le compilateur tente d obtenir les fichiers.class correspondant à toutes les classes utilisées dans le programme (String, System, mais aussi bien d autres qui sont utilisées par les précédentes). Ces fichiers se trouvent dans une archive nommée rt.jar (voir suite du TP) connue implicitement du compilateur. L objectif ici n est pas d inclure le code de ces classes dans le fichier HelloWorld.class (l édition de lien est dynamique en java) mais simplement de vérifier que ces classes sont disponibles et que l utilisation qui en est faite est correcte (i.e. les méthodes existent, les types des paramètres sont ceux attendus,...). Recompilez la classe, en vous plaçant cette fois-ci dans le répertoire parent, et visualisez l endroit où le fichier.class a été produit. Ligne de commande pour compiler : javac./manip1/helloworld.java Le fichier.class est toujours par défaut produit à côté du fichier.java. Créez maintenant deux sous-répertoires de manip1 que vous appellerez src et build. Placez le fichier HelloWorld.java dans le premier et, en utilisant l option -d de javac, faites en sorte que le fichier.class soit produit dans le second. Ligne de commande pour compiler : javac -d./build./src/helloworld.java 2.2 Comprendre l utilisation de la variable d environnement CLASSPATH Préambule La variable d environnement CLASSPATH est utilisée de manière différente au moment de la compilation (par le compilateur donc) et au moment de l exécution (par la machine virtuelle). 2

Le processus de compilation conduit (en cas de réussite) à la génération d un fichier.class contenant le code interprétable de la classe spécifiée en entrée. Lorsque le compilateur détecte une instruction où l utilisation d une autre classe est faite (appel de méthode, accès à un attribut), il tente de se procurer le fichier.class associé à cette classe afin de vérifier simplement que la-dite classe est correctement utilisée (i.e. l attribut ou la méthode existent, sont visibles,...). Le compilateur sait implicitement localiser ces fichiers pour les classes des bibliothèques fournies avec le SDK (par exemple la classe System). Pour les autres, et notamment celles écrites par les développeurs tiers, il utilise le contenu de la variable d environnement CLASSPATH (qu il est donc utile de bien initialiser et de rendre publique). La valeur de cette variable est une suite de chemins de recherche séparés par : (convention Linux) ou ; (convention DOS/Windows). L ordre des chemins dans cette variable est important, le compilateur cessant de chercher lorsqu il a trouvé un chemin le conduisant au fichier souhaité. Lorsque cette variable n est pas définie, il est considéré par défaut que la recherche s effectue uniquement dans le répertoire courant. Lors de l exécution d une application, les classes sont chargées au fur et à mesure de leur première utilisation, en commençant par celle contenant le main. La machine virtuelle a donc besoin, comme le compilateur, d obtenir les fichiers.class correspondant aux différentes classes. La variable d environnement CLASSPATH est alors utilisée à cette fin, de la même manière. Il est cependant important d avoir à l esprit que le fichier.class utilisé par la machine virtuelle n est pas forcément celui ayant été utilisé par le compilateur. Si le contenu de ces deux fichiers n est pas identique, il peut survenir des erreurs lors de l exécution. Manipulations Créez, au même niveau que le répertoire manip1, un répertoire manip2 et éditez-y un fichier nommé TestHello.java dont le contenu est le suivant : public class TestHello public static void main (String[] args) Hello h = new Hello(); h.print(); Créez ensuite deux sous-répertoires de manip2 nommés hello1 et hello2 et éditez-y deux fichiers Hello.java dont le contenu ressemble au suivant (en veillant cependant à différencier le message affiché) : public class Hello public void print() System.out.println("un message au choix"); L application est maintenant décomposée en deux parties : un programme principal TestHello.java, une classe Hello fournissant une méthode print qui affiche un message sur la console comme précédemment. Compilez les deux fichiers source Hello.java en faisant en sorte que chaque fichier produit soit dans le même répertoire que son fichier source. Compilez maintenant le fichier TestHello.java et justifiez l erreur survenue. L erreur affichée indique que la classe Hello n a pas pu être chargée. La variable CLASSPATH n étant pas définie, la recherche de classes s effectue uniquement dans le répertoire courant, et celui-ci ne contient pas de fichier Hello.class 3

Résolvez le problème en positionnant correctement la variable d environnement CLASSPATH 1. Ligne de commande : export CLASSPATH =. :[...]/manip2/hello1 où [...] représente le chemin conduisant à manip1. Il est important de remarquer que les chemins indiqués dans la variable CLASSPATH sont des chemins absolus, dans le cas contraire le contenu de cette variable serait interprété de manière différente selon l endroit à partir duquel les commandes javac ou java sont exécutées. Exception est faite du répertoire courant (.) qu il est préférable de toujours ajouter dans la mesure où il n est plus fait de recherche par défaut dans ce répertoire dès que la variable d environnement possède une valeur. Essayez de montrer que même si c est la classe du répertoire hello1 qui a été utilisée lors de la compilation, le fait d utiliser la classe du répertoire hello2 à l exécution n introduit pas de dysfonctionnement (i.e. le message affiché est celui de la classe du répertoire hello2). Changez le nom de la méthode print de la classe du répertoire hello2, et recompilez l application en utilisant la classe du répertoire hello1. Montrez que l exécution de l application, en utilisant la classe du répertoire hello2, conduit à une erreur. 2.3 Archivage Il est dans certains cas utile (notamment lorsque l on transmet l application via le réseau) de regrouper au sein d une archive l ensemble de classes d une application ou d une librairie. Une telle archive a en Java un format normalisé et se dénomme un jar. Un outil éponyme permet d archiver des classes. A l aide de cet outil (dont l aide en ligne s obtient avec l option help 2 ), créez une archive dénommée TestHello.jar et contenant le fichier TestHello.class ainsi qu un des fichiers Hello.class au choix. La syntaxe de la commande de création d archive est la suivante : jar -cvf [nom du jar à créer] [fichiers à inclure]. Les fichiers à inclure sont désignés par leur nom uniquement. Il est possible d utiliser des jokers (par exemple A*.class) ou d indiquer un nom de répertoire (ce qui aura pour effet d inclure tous les fichiers du répertoire, en conservant la structure dans l archive). L outil jar considère comme répertoire de base celui à partir duquel il est exécuté, si l on souhaite inclure des fichiers situés dans un autre répertoire, il faut spécifier avant leur nom le chemin conduisant au répertoire avec l option -C. Ligne de commande : jar -cvf TestHello.jar TestHello.class -C hello1 Hello.class Placez l archive dans un nouveau sous-répertoire nommé manip3. Lorsque les fichiers.class sont archivés, il faut que la variable CLASSPATH contienne non pas le répertoire contenant l archive jar mais le chemin désignant l archive elle-même (il en est de même lorsque les classes sont archivées dans un zip, l environnement Java supportant aussi ce format d archive non standard). Positionnez donc correctement la variable CLASSPATH (elle ne doit contenir que l archive jar), puis vérifiez que l exécution de l application TestHello ne génère pas d erreur. Ligne de commande : export CLASSPATH = [...]/manip3/testhello.jar Ligne de commande (pour exécuter) : java TestHello, comme précédemment. Il est également possible d exécuter directement une application contenue dans une archive jar avec l option -jar de l outil java. Pour ce faire, il faut cependant avoir ajouté à l archive un fichier de métadonnées que l on appelle manifest indiquant quelle est la classe de l archive contenant le main. 1. Sous linux, pensez à exporter la variable après l avoir définie. Il est encore plus simple d effectuer les 2 opérations d un coup en écrivant export CLASSPATH=... 2. ou dans la documentation en ligne du SDK dont l URL vous a été également fournie en début de séance. 4

Pour ce faire, éditez un fichier manifest contenant uniquement la ligne Main-Class: TestHello (attention, la ligne doit se terminer par un saut de ligne). Recréez l archive en incluant le manifest avec l option -m. Syntaxe : jar -cvmf [manifest] [jar] [fichiers] Exécutez directement la classe TestHello avec l option -jar de java. On remarquera qu il n est plus utile de positionner la variable CLASSPATH dans la mesure où la machine virtuelle prend en entrée l archive complète. Ligne de commande : java -jar TestHello.jar 2.4 Documentation Le SDK fournit un outil de génération de documentation (avec pour cible privilégiée le langage HTML) nommé javadoc basé sur l utilisation de balises (tags) dans le code source. Vous pouvez consulter la partie de la documentation en ligne traitant de cette outil afin de vous familiariser avec les balises et les paramètres de la ligne de commande. La finalité de cet outil est de fournir une documentation pour chaque classe, détaillant notamment la signification des attributs, des méthodes, des paramètres et valeurs de retour. Les commentaires JavaDoc s insèrent toujours avant ce qu ils sont censés décrire, et peuvent mélanger du texte qui sera inséré tel quel dans la documentation et des balises interprétées par l outil. Il est par exemple possible, en utilisant cette syntaxe, de préciser à quoi sert la classe, qui en est l auteur et quel est le numéro de version : * La classe Lampe... * @author S.Jean * @version 1.0 public class Lampe... Il est aussi possible de préciser à quoi sert un attribut : * La puissance de la lampe public int puissance; Il est également possible de préciser à quoi sert une méthode (ou un constructeur) : * Constructeur avec paramètre. * @param p La puissance de la lampe. public Lampe(int p)... * Obtention de la puissance de la lampe. * @return la puissance de la lampe. public int getpuissance()... Expérimentez l utilisation de l outil javadoc sur la classe Lampe du cours à laquelle vous ajouterez une méthode isallumee permettant de savoir si la lampe est allumée ou non. Vous pourrez également observer dans quelle mesure du code HTML peut être inséré dans les commentaires, et générer une documentation incluant ou non les descriptions des attributs et méthodes privés. 5