Dans cette première séance nous allons voir comment compiler et exécuter un fichier de code source Java, et effectuer des manipulations basiques sur les objets.
Commencez par recopier le code source suivant dans un fichier nommé Main.java
. Vous pouvez utiliser l’éditeur de texte de votre choix comme VScode
, Emacs
ou Atom
par exemple. Placez ce fichier dans un répertoire vide créé pour l’occasion (exemple: poo/td1
)
// Définition de classe, obligatoire dans chaque fichier Java.
// Le nom de la classe doit être égal au nom du fichier.
class Main {
// Point d'entrée des programmes Java. Le tableau de String args correspond
// aux paramètres passés sur la ligne de commande.
public static void main(String[] args) {
// Affichage du message.
System.out.println("Hello World!");
}
}
1) Pour compiler ce fichier il faut faire appel au compilateur Java : javac
. Vous pouvez compiler le fichier avec la commande suivante :
lreveill@jc:~/poo/td1$ javac Main.java
2) Si tout se passe bien, vous devriez obtenir un fichier nommé Main.class
. Il contient le code précédent sous forme de bytecode. Pour lancer l’exécution du programme, il faut cette fois lancer la machine virtuelle Java, avec la commande
lreveill@jc:~/poo/td1$ java Main
Normalement, l’exécution du programme devrait afficher la chaîne Hello World!
sur votre console.
L’unique argument de la fonction main est un tableau de chaînes de caractères. Les tableaux s’utilisent comme en C avec la notation crochet. Le premier élément du tableau est à l’indice 0.
1) Modifiez le programme précédent pour que la chaîne de caractères à afficher soit passée en argument.
2) Faire en sorte que le programme affiche les arguments de la ligne de commande à l’envers, comme sur l’exemple ci-dessous.
lreveill@jc:~/poo/td1$ java Main un deux trois quatre
Inverse = quatre trois deux un
Dans cette deuxième partie, nous allons mettre en oeuvre les opérations élémentaires d’un robot dans un espace 2D.
Le but de cet exercice est d’écrire un programme manipulant des positions dans un espace 2D.
1) Écrivez une classe Position
dans un fichier Position.java
ayant comme attributs les deux coordonnées x en abscisse et y en ordonnée de type double.
2) Écrivez une classe TestPosition
dans un fichier TestPosition.java
dans laquelle vous définirez un main afin de tester votre classe Position
. Dans un premier temps, nous utiliserons le constructeur par défaut sans argument.
3) Définissez dans la classe Position
la méthode void afficher()
qui affiche sur la console les coordonnées d’une position.
Information :
En java, il n’est pas nécessaire de compiler l’ensemble de vos fichiers sources .java
. Si chaque fichier .java
ne contient qu’une seule classe et que le fichier porte le même nom que la classe, il suffit simplement de compiler le fichier qui contient la méthode public static void main(String[] args)
. Le compilateur compilera les fichiers nécessaires automatiquement.
4) Définissez ensuite les méthodes suivantes dans la classe Position
et testez votre programme dans la classe TestPosition
.
// Deplace une position par rapport à son origine
void deplacement(double dx, double dy);
// meme deplacement en x et en y
void deplacement(double delta);
// Calcul la distance euclidienne entre deux positions
double distance(Position cible);
Remarque :
Java met à disposition la méthode Math.sqrt()
pour calculer la racine carrée. Cette méthode prend uniquement un nombre positif ou nul en paramètre. Vous pouvez également utiliser la méthode Math.pow
pour le calcul de la puissance.
5) Définissez maintenant un constructeur prenant en paramètre les coordonnées de la position à créer.
Le but de cet exercice est d’écrire une classe modélisant notre robot d’exploration.
1) Écrivez une classe Robot
dans un fichier Robot.java
ayant les attributs position, energie et cout. La position du robot dans un espace 2D est de type Position
. L’énergie restante du robot est de type double
et le coût de déplacement du robot est de type double
. Ce dernier correspond à l’énergie dépensée pour un déplacement d’une unité.
La classe Robot
offrira un seul constructeur prenant en arguments les trois paramètres position, energie et cout. La position correspond au centre du robot. Dans la suite, on supposera que le robot est un carré de taille 40.
2) Écrivez une classe TestRobot
dans un fichier TestRobot.java
dans laquelle vous définirez un main afin de tester votre classe Robot
.
3) Définissez ensuite les méthodes suivantes et testez votre programme.
// Retourne le rayon d'action du robot, c'est à dire la distance maximale que peut parcourir le robot compte tenu de son énergie disponible.
double rayonAction();
// Détermine si le robot possède siffisamment d'énergie pour atteindre la position cible. La méthode retournera `true` si le test est positif, et `false` dans le cas contraire.
boolean peutSeDeplacer(Position cible);
// Affiche les informations du robot sur la console
void afficher();
Dans le programme principal, instanciez plusieurs objets de la classe Robot
, affectez des valeurs de votre choix à leurs attributs et testez vos méthodes. Vous devriez obtenir quelque chose comme ça pour un robot aux coordonnées (100,100) avec 400 d’énergie et 10 de coût de déplacement:
Robot @ (100,00 x 100,00)
Energie : 400,00
Cout : 10,00
Nous allons maintenant utiliser une bibliothèque graphique pour afficher notre robot sur la planète rouge. Le programme suivant affiche une fenêtre avec un robot aux coordonnées (100,100). Vous pouvez utiliser l’image du robot suivante :
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
public class Main extends Application {
@Override
public void start(Stage stage) {
Pane root = new Pane();
// Affiche le robot
ImageView img = new ImageView(new Image("./robot.png"));
img.setX(100);
img.setY(100);
// Affiche la fenetre
root.getChildren().addAll(img);
Scene scene = new Scene(root, 220, 220);
scene.setFill(Color.rgb(241,199,128));
stage.setTitle("POO - TD1");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) { launch(); }
}
La compilation de votre code Java avec JavaFX est un peu plus compliquée en ligne de commande. Vous pouvez exécuter les commandes suivantes dans votre terminal. Vous devrez avoir téléchargé au préalable dans un dossier de votre choix la version de JavaFX correspondant à votre système d’exploitation. Attention, choisir le Type SDK et si vous n’avez aucune idée de l’architecture de votre processeur opter pour x64.
Extraire l’archive puis indiquer le chemin du répertoire lib dans les lignes de commande ci-dessous.
lreveill@jc:~/poo/td1$ javac --module-path "chemin_javaFX/lib" --add-modules javafx.controls Main.java
lreveill@jc:~/poo/td1$ java --module-path "chemin_javaFX/lib" --add-modules javafx.controls Main
Informations complémentaires sur l’installation de JavaFX.
1) Ajoutez dans la classe Robot
une méthode ImageView FXRobot();
qui retourne la représentation graphique du robot. Modifiez le code précédent pour instancier un objet de type Robot et faire en sorte qu’il s’affiche à l’écran
2) Ajoutez dans la classe Robot
une méthode Circle FXRayonAction();
qui retourne la représentation graphique du cercle autour du robot montrant son rayon d’action. Vous devriez obtenir quelque chose comme sur l’exemple ci-dessous.
3) Modifiez le programme de test pour instancier des robots et les afficher à l’écran.
Ajoutez une méthode deplacer
au robot lui permettant d’atteindre une position cible et mettre à jour la quantité d’énergie restante du robot. Vous choisirez le ou les paramètres adaptés pour cette méthode
Information : Nous verrons le moyen d’animer le déplacement du robot un peu plus tard.