ENPC - Objets et Patterns - Séance 1

Un premier programme

Lancez l'éditeur de texte emacs et ouvrir un nouveau fichier Bonjour.java dans le répertoire $HOME/Info1/src/Td1/. $HOME/ représente la racine de votre répertoire personnel et Info1/src/Td1/ est un répertoire que vous devez avoir créé afin d'y placer les fichiers des exercices de la première séance.

  1. Dans ce fichier Bonjour.java, tapez le code source suivant et enregistrez ce fichier:
    // Un premier programme qui affiche "Bonjour!" sur la sortie standard
    public class Bonjour {
        public static void main(String [] args) {
            System.out.println("Bonjour!");
        }
    }
  2. Dans une fenêtre de "shell" (terminal, ou encore fenêtre de commandes), placez vous sous le répertoire $HOME/Info1/src/Td1/ et compilez le fichier source Java avec la commande:
    javac Bonjour.java
    Listez le répertoire et constatez l'effet de cette commande: un nouveau fichier a été généré, Bonjour.class, qui contient le bytecode de la classe Bonjour.
  3. Exécutez ce programme avec la commande suivante:
    java Bonjour
L'exécution de la commande java suivie du nom d'une classe a pour effet de lancer une Machine Virtuelle Java (JVM) qui interprète le bytecode de cette classe. Pour cela, cette classe doit contenir une méthode main qui possède exactement la signature de celle utilisée dans notre programme.

Organisation des fichiers sources et des classes

Afin de séparer les fichiers sources des fichiers contenant le bytecode des classes, nous voulons maintenant mettre systématiquement tous les fichiers de classes (bytecode) dans le répertoire $HOME/Info1/classes/. Créez ce répertoire, puis supprimez le fichier Bonjour.class du répertoire $HOME/Info1/src/Td1/. Utilisez maintenant pour compiler le fichier source la commande:
javac -d $HOME/Info1/classes -classpath $HOME/Info1/classes Bonjour.java
Vérifiez que le fichier contenant le bytecode a bien été placé dans le répertoire classes/. Pour exécuter le programme, il faut maintenant utiliser la commande:
java -classpath $HOME/Info1/classes Bonjour
Afin d'éviter de tapez ces longues commandes à chaque fois, on peut définir des alias en ajoutant les lignes suivantes au fichier $HOME/.tcshrc:

alias enpcjavac javac -d $HOME/Info1/classes -classpath $HOME/Info1/classes
alias enpcjava java -classpath $HOME/Info1/classes
Il suffit ensuite d'utiliser ces commandes pour compiler et exécuter vos programmes.
Les différentes options des commandes javac et java peuvent être obtenues en les lançant sans aucun argument.

Documentation

Le langage Java repose sur des librairies de classes offertes en standard aux utilisateurs, qui sont organisées en packages. Ainsi, par exemple, l'instruction dans notre programme System.out.println("Bonjour!") est un appel à la méthode println() avec comme argument la chaîne de caractère (String) "Bonjour!", sur le champ out de la classe System. Ces classe, champ et méthode font partie de la librairie standard offerte par Java, que l'on appelle API (Application Programming Interface). Ces API sont documentées dans un format standardisé et ces documentations sont accessibles à l'URL file:///usr/local/jdk1.3/docs/api/index.html
Ouvrez une fenêtre de navigateur (Netscape, par exemple) et parcourez ces documentations. Sauvegardez cet URL dans vos signets (bookmarks). En partant de la classe System du package java.lang, retrouvez la méthode println() précédemment utilisée.

Nomenclature

Par habitude, les identificateurs en Java respectent les règles implicites suivantes:

Un programme plus ambitieux

Récupérez les deux fichiers sources aux URL suivants et les enregistrer sous le même nom dans votre répertoire Td1: http://www-igm.univ-mlv.fr/~duris/ENPC/Simulation.java et http://www-igm.univ-mlv.fr/~duris/ENPC/Cible.java.
Compilez ces fichiers. Sachant que la JVM (lancée par java ou enpcjava) tente d'exécuter la méthode main, déterminez quel nom de classe doit être utilisé pour exécuter le programme; testez-le.

Structure d'un programme

On peut distinguer, dans l'exemple du programme de simulation, les notions de classe, d'instance (ou encore d'objet) de variable d'instance (champ ou encore attribut) et de méthode. Étant donnée une classe, les variables d'instance représentent l'état d'un objet tandis que les méthodes représentent les fonctionnalités d'un objet. Les méthodes statiques représentent les fonctionnalités d'une classe.

Exercices

  1. Envoyer un mail à Etienne.Duris[at]univ-mlv.fr avec pour sujet "OP Td1 Test". Dans le corps du message, vous indiquerez vos nom et prénom.
  2. Écrire un programme qui affiche les carrés des n premiers entiers ainsi que leurs sommes cummulées, avec n=10.
  3. Modifier le programme pour qu'il récupère la valeur de n à partir d'une String sur la ligne de commande (méthode parseInt() de la classe Integer).
Envoyez-moi par mail le code source de ces programmes (sujet: "OP Td1").

Etienne.Duris[at]univ-mlv.fr - © École Nationale des Ponts et Chaussées - Octobre 2000 - http://www-igm.univ-mlv.fr/~duris/ENPC/index2000.html