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
)
1) Pour compiler ce fichier il faut faire appel au compilateur Java : javac
. Vous pouvez compiler le fichier avec la commande suivante :
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
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 sont utilisés de manière similaire à ceux en C, avec la notation entre crochets. Le premier élément du tableau est à l’indice 0. Chaque tableau dispose d’un attribut length
qui indique le nombre d’éléments contenus dans le tableau.
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.
Dans cette deuxième partie, nous allons mettre en oeuvre les opérations élémentaires d’un robot sur la surface de Mars.
Le but de cet exercice est de pouvoir manipuler des objets de type Position
représentant des coordonnées dans un espace euclidien entier (chaque point a des coordonnées (x,y) où x et y sont des entiers.
1) Implémentez une classe Position
dans un fichier Position.java
pour représenter une coordonnée dans un tel espace. Assurez-vous que l’objet représentant une position est correctement initialisé dès de sa création.
2) Implémentez dans la classe Position
la méthode void afficher()
qui affiche dans le terminal les coordonnées d’une position sous la forme (2,4)
pour une position d’abscisse 2
et d’ordonnée 4
.
3) Implémentez une classe TestPosition
dans un fichier TestPosition.java
afin de tester votre classe Position
.
💡
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) Implémentez les méthodes suivantes dans la classe Position
et tester votre implémentation dans la classe TestPosition
.
💡 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.
L’objectif de cet exercice est de concevoir et manipuler des objets représentants des robots d’exploration à la surface de la planète Mars. Nos robots peuvent évoluer dans toutes les directions.
1) Implémentez une classe Robot
dans un fichier Robot.java
, qui contient les attributs nom (de type String
), position (de type Position
pour représenter la position 2D du robot), energie (de type double
pour l’énergie restante du robot) et cout (de type double
pour le coût en énergie d’un déplacement d’une unité). On doit pouvoir définir les valeurs de tous les attributs d’un robot au moment de son instanciation.
2) Implémentez les méthodes suivantes dans la classe Robot
.
rayonAction
: retourne le rayon d’action du robot, c’est-à-dire la distance maximale que le robot peut parcourir avec son énergie disponible.peutSeDeplacer
: détermine si le robot a suffisamment d’énergie pour atteindre la position cible.afficher
: affiche les informations du robot dans le terminal. Soit un robot de nom curiosity aux coordonnées (80, 100), ayant une énergie de 400 et un coût de déplacement de 10, l’affichage des informations du robot doit être :Robot curiosity
Position : (80, 100)
Energie : 400,00
Cout : 10,00
deplacer
: déplace le robot vers une position cible. Cette méthode doit également mettre à jour la quantité d’énergie restante du robot en fonction de la distance parcourue. La méthode renvoie un booléen indiquant si le robot a atteint la cible.4) Implémentez une classe TestRobot
dans un fichier TestRobot.java
afin de tester votre classe Robot
. Vous devrez mettre en place une série de scénarios de test pour évaluer toutes les fonctionnalités de la classe Robot
, en créant plusieurs instances de robots avec des attributs variés et en assignant à chaque robot un scénario de test spécifique.
Les standards de codage recommandent l’utilisation de l’anglais afin de faciliter la compréhension et la relecture du code par un plus grand nombre de personnes.
Pour la suite, il est demandé d’écrire directement votre code en anglais, commentaires inclus.
Nous supposons maintenant que la surface de la planète Mars est divisée en tuiles carrées, formant ainsi un quadrillage. Le robot peut se déplacer uniquement horizontalement ou verticalement, d’une case à l’autre. Il n’est pas capable de se déplacer en diagonale, ce qui signifie que son déplacement respecte une connexité-4. La position du robot est représentée par le numéro de colonne et le numéro de ligne dans le quadrillage. Dans le prochain TD, nous explorerons comment représenter graphiquement notre robot.
Le calcul de la distance effectué par l’objet Position
est trop restrictif car il correspond à une distance euclidienne, ne prenant pas en compte les spécificités de l’espace dans lequel le robot évolue. Supprimez donc ce calcul de la classe Position
.
Implémentez la méthode distance
au sein de la classe Robot
afin de calculer la distance de Manhattan entre la position actuelle du robot et la cible à atteindre, en considérant un espace géométrique discret.
Assurez-vous de tester votre code.
Dans les séances à venir, nous allons utiliser IntelliJ IDEA, un Environnement de Développement Intégré (IDE) pour Java. Cet IDE offre des fonctionnalités avancées telles que le refactoring et une intégration transparente avec des outils de versionnage comme Git. Nous utiliserons également Gradle, un système de gestion et d’automatisation de build pour Java qui permet de gérer les dépendances et de compiler le code.
Il est fortement recommandé de suivre ce tutoriel pour se familiariser avec IntelliJ et Gradle. Cette initiation est cruciale pour le bon déroulement du TD2 et devra être réalisée au début de cette session si elle n’a pas été effectuée auparavant. Se familiariser avec ces outils dès maintenant vous permettra de tirer le meilleur parti des fonctionnalités qu’ils offrent pour le développement de vos applications Java.