MIM1
TD 1 de POOGL

Vincent BOUDET
Bureau 343 (84-70)
email vboudet@ens-lyon.fr

23 Janvier 2000

L'objectif de ce premier TD est de se familiariser avec l'environnement de travail ainsi qu'avec les differents outils constituant le JDK.

A   Environnement de travail

L'environnement de travail pour les séances de TD sera le suivant : Si vous travaillez chez vous, vous pouvez travailler sous un environnement semblable sous Linux, Windows, ou tout autre OS.

Il est possible que par defaut vous n'avez pas acces aux outils Sun. Si c'est le cas, modifier votre variable PATH pour y inclure /usr/local/jdk1.2/bin.

B   Utiliser l'aide en ligne

Allez voir à l'adresse http://java.sun.com/products/jdk/1.2/docs/api/, pour consulter l'aide en ligne. La fenêtre est découpée en trois frames. En haut à gauche se trouve les ``packages''. En bas à gauche se trouvent les classes contenues dans le package. Si vous cliquez sur une de ces classes, les membres, les méthodes ainsi que leur description s'affichent dans la fenêtre de droite.

Question B.1   Trouvez la classe Applet. De quelle classe hérite-telle directement ?

Question B.2   Trouvez la classe qui représente les entiers. Quelles sont ses membres ?

Question B.3   Trouvez la classe qui permet de dessiner un rectangle dans la fenêtre d'une applet.

C   Premier exercice

But : toucher à toute la chaîne de développement d'un programme Java, étudier grossièrement la structure d'un programme très simple.

Objet : écrire l'incontournable ``Hello World!'', sous forme d'application, mais aussi d'applet.

Question C.1   Recopiez ces quelques lignes dans un éditeur. Nommez le fichier HelloWorld.java.

public class HelloWorld {
  public static void main(String argv[]) {
    System.out.println(``Hello World\n'');
  }
}
La compilation se fait avec la commande : javac hello.java. En sortie, cela donne un fichier HelloWord.class. L'exécution se lance avec la commande : java HelloWorld.
Question C.2   Recopiez ces quelques lignes dans un éditeur. Nommez le fichier helloapp.java.

import java.applet.*;
import java.awt.*;

public class HelloWorldApp extends Applet
{
   public void paint(Graphics g)
   {
      g.drawString(``Hello world!'', 50, 25);
   }
}
Compilez le programme avec : javac helloapp.java : ca ne marche pas !

Question C.3   Lisez le message d'erreur et remédiez à cette erreur.

De même, si vous essayez d'exécuter l'applet en tapant : java HelloWorldApp, ca ne marche pas. Pour lancer l'applet, il faut utiliser appletviewer sur un code html !

Question C.4   Recopiez ces quelques lignes dans un éditeur. Nommez le fichier helloapp.html.

<HTML>
<HEAD>
<TITLE>Applet Hello World </TITLE>
</HEAD>

<BODY>
<APPLET CODE=''HelloWorldApp.class'' WIDTH=200 HEIGHT=50>
</APPLET>
</BODY>
</HTML>
Lancez la commande : appletviewer helloapp.html.
Remarques :
Question C.5   Essayez d'enlevez le g. devant drawString pour voir le résultat.

D   Deuxième exercice

But : Se familiariser avec les outils de documentation de Java.

Objet : utiliser javadoc pour créer automatiquement la documentation de votre code.

En utilisant les commentaires d'unn programme, on peut générer directement la documentation de ce programme avec l' utilitaire javadoc. Chaque classe, chaque champ et chaque méthode sont précédés dún commentaire de documentation délimité par /** et */ qui apparaît dans le fichier html. Dans líndex seule la première ligne de commentaire est présentée. L' option -private est nécessaire si on veut voir les commentaires relatifs aux classes non publiques ainsi qu' aux champs et méthodes non publiques. La documentation standard Java est réalisé sans cette option ni celles qui suivent. L' option -author affiche le nom donné après le paramètre @author et l' option -version affiche le numéro de version donné après @version.

Certains mots-clés sont précédés du caractère @, afin de donner à l' utilisateur certaines précisions:
Question D.1   Écire un programme qui souhaite la bienvenue à la personne dont le nom est passé en argument.
Question D.2   Réaliser la documentation la plus complète possible de ce programme avec javadoc.

E   Types de variables

La plupart des types sont identiques à ceux du C : byte, short, int, long, float, double, char, boolean. Cependant, ces types sont également utilisables sous forme de classes : Byte, Short, Integer, Long, Float, Double, Character, Boolean. L'instanciation d'une variable se fait comme en C.

Question E.1   Tapez le programme suivant Variable.java :

public class Variable
{
   public static void main(String[] args)
   {
      byte b = 5;
      short s = -107;
      int i = 15463;
      long l = -1765424554;
      float f = -1.4523f;
      double d = 0.314159e+01;
      char c = 'C';

      System.out.println(b+'',''+s+'',''+i+'',''+l+
    '',''+f+'',''+d+'',''+c);
   }
}
Compilez avec javac Variable.java et exécutez avec java Variable.

Question E.2   Remplacez la dernière ligne par System.out.println(i + c);. Recompilez. Observez bien le résultat. Conclusion ?

Question E.3   Modifiez le programme comme suivant :

public class Variable
{
   public static void main(String[] args)
   {
      int i = 15463;
      double d = 0.314159e+01;
      char c = 'C';

      Integer ii = new Integer(i);
      Double dd = new Double(d);
      Character cc = new Character(c);
      System.out.println(ii+'',''+dd+'',''+cc);
      System.out.println(ii.doubleValue()+'',''+dd.intValue()+'',''+
           Character.toLowerCase(c));
      System.out.println(ii.TYPE+'',''+dd.MAX_VALUE+'',''+cc.MIN_VALUE);      
   }
}
Comparez bien la sortie écran des différentes lignes. Par analogie avec le C, la deuxième affiche des valeurs ``castées''.

Remarques: Il est possible d'obtenir le même résultat avec les variables i et d avec un cast type C:


System.out.println((double)i+'',''+(int)d);


Question E.4   Essayez maintenant avec cette ligne :


System.out.println((double)ii+'',''+(int)dd);


La compilation ne marche pas : il n'est pas possible de ``caster'' un Integer en int. De même, la ligne suivante conduit à une erreur de compilation :


System.out.println(i.doubleValue()+'',''+d.intValue());


Les variables i et d ne sont pas des objets donc n'ont pas de méthodes associées!

F   Écrire un double avec un nombre limité de décimales

      Il s'agit de définir une méthode permettant d'écrire un double avec un nombre limité de décimales. Pour cela, on définira une classe contenant une méthode statique, la méthode tronque, ayant deux paramètres : un double x et un entier nbDecimales. La méthode devra retourner une chaîne de caractères donnant le double x éventuellement tronqué de façon à avoir au plus nbDecimales décimales. On ne cherchera pas à "arrondir au plus proche", on enlèvera simplement les décimales excédentaires, que x soit positif ou négatif.

La valeur de x et celle de nbDecimales seront transmis par la ligne de commande. Voici quelques exemples d'exécution.

java EcritDouble 98.7689 2
98.76

java EcritDouble -0.765 1
-0.7

java EcritDouble -0.765 0
0

java EcritDouble -4.765 0
-4

java EcritDouble 4.765 -1
4


Les méthode suivantes de la classe String pourraient vous servir : Vous pouvez aussi regarder la classe StringTokenizer.
This document was translated from LATEX by HEVEA.