Introduction à la programmation objet
Compilation et exécution en Java
Explications sur l’exécution de code Java
La portabilité sur différentes plates-formes était un objectif important lors de la conception du langage Java. Afin d’atteindre cet objectif, le code Java n’est pas directement compilé en un exécutable spécifique pour chaque architecture ou système comme cela peut être le cas pour le langage C. À la place, le code java est compilé dans un fichier exécutable en bytecode java par une machine spécifique à Java. Cette machine virtuelle est appelé Java Virtual Machine (JVM) et des versions existent pour quasiment toutes les plates-formes existantes. L’avantage est que contrairement à des langages directement compilés en exécutable, il suffit de compiler une seule fois le code et pas une fois par cible souhaitée.
Pour exécuter du code java en ligne de commande, on doit donc le compiler en bytecode Java à l’aide de la commande javac
puis l’exécuter à l’aide de la commande java
.
But de l’exercice
Comprendre à très haut niveau le processus d’exécution et de compilation de code Java.
Déroulé de l’exercice
Vous devez réaliser les tâches suivantes :
Créez un dossier Programmation2, un dossier TP_1 contenu dans Programmation2 et un dossier Exercice1 contenu dans TP_1. Vous pouvez utiliser la commande mkdir pour créer des dossiers ou bien le gestionnaire de fichiers de votre système.
Téléchargez le fichier HelloWorld.java et le mettez-le dans le dossier Exercice1.
Ouvrer un terminal et placez-vous dans le dossier Exercice1 (rappel : on se déplace dans les dossiers grâce à la commande
cd
). Vérifiez que vous êtes bien dans le bon dossier en exécutant la commandepwd
.Vérifiez que le dossier contient le fichier HelloWorld.java en listant les fichiers à l’aide de la commande
ls
Compiler ce fichier à l’aide de la commande
javac
en exécutantjavac HelloWorld.java
.Lancez à nouveau la commande
ls
. Que remarquez-vous ?Exécuter le bytecode Java en lançant la commande
java HelloWorld
. Que se passe-t-il ?
Manipulation de listes
Interpréteur Java JShell
Dans cet exercice, on va manipuler des listes et afin d’éviter de repasser pour chaque test par le processus de compilation, on va utiliser l’interpréteur jshell inclus avec Java de puis sa version 9. Jshell se lance dans le terminal en tapant jshell
. En salle de TP à Aix, jshell
se lance avec /usr/java/jdk-10.0.2/bin/jshell
. Un fois lancé, il est possible d’exécuter des instructions ou de définir des variables et des méthodes tout simplement en écrivant le code correspondant à l’intérieur de la console. Il est aussi possible de vérifier le contenu des variables en tapant leur nom. Pour sortir de jshell
, il suffit de taper /exit
.
Les listes en Java
En Java, il est possible de créer une liste d’entiers grâce à l’instruction suivante1 :
Les listes en Java sont des collections d’objets ordonnés. Nous allons seulement utiliser quelques méthodes de cette classe. Pour plus de détails sur les listes, nous vous conseillons (comme dans la plupart des cas pour Java) de vous référer à la documentation officielle de List
.
Pour cet exercice, nous allons seulement considérer des listes d’Integer
2. Les Integer
est une classe encapsulant le type primitif int
. Cela permet de manipuler des entiers en tant qu’objet car les int
ne sont pas des objets en Java.
Dans cet exercice, on va utiliser les méthodes suivantes de List
:
add(Integer e)
: ajoute l’entiere
à la fin de la listeequals(Object o)
: compare la liste avec l’objeto
et renvoietrue
sio
est une liste contenant les éléments de la liste dans le même ordre.
But de l’exercice
- Comprendre l’utilisation des méthodes de
List
et d’Object
. - comprendre le concept de référence
Déroulé de l’exercice
Vous devez réaliser les tâches suivantes :
lancez la commande
jshell
dans un terminal.Définissez et créez une liste
l1
en tapant l’instructionList<Integer> l1 = new ArrayList<Integer>();
.Vérifiez que la liste est bien vide en tapant
l1
.Ajoutez 1 à la fin de la liste
l1
à l’aide de la méthodeadd
.Vérifiez que la liste
l1
contient bien 1 en tapantl1
.Ajoutez 2 à la fin de la liste
l1
à l’aide de la méthodeadd
.Vérifiez que la liste
l1
contient bien 1 et 2 en tapantl1
.Définissez une liste
l2
en tapant l’instructionList<Integer> l2 = l1
.Quels sont les entiers contenus dans
l2
? Pourquoil2
contient ces entiers ?Ajoutez 3 à la fin de la liste
l1
à l’aide de la méthodeadd
.Vérifiez le contenu de la liste
l2
. Est-ce qu’il a changé ?Définissez et créez une liste
l3
en tapant l’instructionList<Integer> l3 = new ArrayList<Integer>();
.Ajoutez 1 puis 2 puis 3 à la fin de la liste
l3
à l’aide de la méthodeadd
.Vérifiez que la liste
l3
contient bien 1, 2 et 3 en tapantl3
.Comparer les listes
l1
etl2
à l’aide de l’opérateur==
en tapantl1 == l2
.Faites de même pour comparer
l1
etl3
ainsi quel2
etl3
.Comparer les listes
l1
etl2
à l’aide de la méthodeequals
en tapantl1.equals(l2)
.Faites de même pour comparer
l1
etl3
ainsi quel2
etl3
.Comment expliquez-vous le résultat des comparaisons ?
Arréter
jshell
en tapant/exit
.
Student
But de l’exercice
Connaître la syntaxe permettant de définir une nouvelle classe en Java.
Environnement de développement (IDE)
Afin de programmer dans ce cours, nous allons utiliser un environnement de développement (Integrated Development Environment : IDE). Il existe de nombreux IDE pour Java. Dan ce cours, nous vous conseillons d’utiliser IntelliJ IDEA de chez JetBrains mais vous pouvez aussi utiliser Eclipse ou un autre IDE.
Lancement de l’IDE
Allez dans le Menu ‘Application’ (en haut à gauche de l’écran) et ouvrir ‘IntelliJ IDEA’ dans la section programmation.
Si vous avez installé IntelliJ sur votre machine :
Après le chargement, vous pouvez tomber sur une première fenêtre vous proposant d’importer vos paramètres. Il faudra dans l’ordre :
Laissez sur ‘Do not import settings’ et cliquez sur ‘OK’. À partir de là vous allez personnaliser votre installation pour qu’elle corresponde à vos besoins.
Sur la première fenêtre de personnalisation, vous devez choisir l’apparence de votre IDE. Ici rien de fondamental, vous pouvez choisir l’option que vous voulez entre
Default
(texte foncé sur fond blanc) oudarcula
(texte clair sur fond noir).Les deux écrans suivants sont plutôt destinés à une installation sur une machine personnelle, vous pouvez laisser les options par défaut et passer à la suite.
Les deux écrans suivants vous permettent de choisir les plugins que vous allez activer. De manière générale, il vaut mieux en activer le moins possible pour éviter les mauvaises surprises.
Création de projet
Ensuite vous allez arriver sur la fenêtre d’accueil d’IntelliJ IDEA (vois l’image ci-dessous).
Pour le premier TP, nous allons créer un projet pour la gestion d’inscription d’étudiant. Vous allez donc créer un projet nommé student_management
. Pour cela, il vous suffit de cliquer sur Create New Project
sur la fenêtre suivante :
Vous allez devoir choisir la version de java ainsi que le moteur de production. Pour le moment, on va laisser les paramètre de base (Java 10.0.2 et Java). Vous pouvez donc cliquer sur next
à la fenêtre suivante :
Vous devez maintenant choisir si vous souhaitez créer le projet à partir d’un modèle (template
). Pour ce premier TP, nous allons utiliser le modèle pour les applications en ligne de commande. Vous devez donc cochez la case Create project from template
et choisir Command Line App
.
Vous devez maintenant choisir le nom du projet ainsi que le nom du package. Le projet devra s’appeler student_management
et le package fr.univ_amu.l2info
.
La classe Student
Maintenant que le projet est créé, vous allez créer une premiere classe Java. Pour cela, placez-vous sur le répertoire student_management
\(\rightarrow\) src
\(\rightarrow\) fr.univ_amu.l2info
dans la partie gauche de l’IDE et cliquez sur le bouton droit de votre souris. Un menu s’ouvrira. Choisissez New
puis Java class
pour créer une classe nommée Student
.
Attributs
Vous devez créer une classe Student
ayant les attributs suivants :
- un numéro d’identification appelé
id
de typeint
, - le prénom
firstName
de typeString
, - le nom
lastName
de typeString
.
Pour chacun de ces attributs, choisissez s’il doit être public ou privé, mutable ou immutable.
- privée (mot-clé private) : la valeur de l’attribut ne peut être accédée ou modifiée qu’à l’intérieur de la classe
- publique (mot-clé public) : la valeur de l’attribut peut être accédée ou modifiée à l’extérieur de la classe
- Mutable : la valeur de la propriété peut changer au cours du temps
- Immutable : la valeur de la propriété ne peut pas être modifiée après la construction de l’objet
Rajoutez le code correspondant dans le fichier Student.java
que vous venez de créer.
Constructeur
Vous devez maintenant ajouter un constructeur à la classe Student
. Quels arguments devraient avoir ce constructeur selon vous ?
Méthode toString
Vous devez maintenant ajouter une méthode String toString()
à la classe Student
. Cette méthode devra renvoyer une chaîne de caractères au format suivant : “Paul Calcul id: 12”.
Vérifier que la classe est correcte
Afin de vérifier que vous avez bien codé la classe, vous devez remplacer le code de la classe main par le code suivant :
public class Main {
public static void main(String[] args) {
final int NB_STUDENTS = 3;
final String[] firstNames = {"Pierre", "Marie", "Paul"};
final String[] lastNames = {"Martin", "Dubois", "Calcul"};
for(int index = 0; index < NB_STUDENTS; index ++){
System.out.println(new Student(index, firstNames[index], lastNames[index]));
}
}
}
Vous devriez obtenir le résultat suivant à l’exécution (triangle en haut à droite de l’écran) :
Déroulé de l’exercice
Vous devez réaliser les tâches suivantes :
Lancer un IDE, IntelliJ IDEA de préférence.
Créer un projet
student_management
dans un packagefr.univ_amu.l2info
.Créer un fichier
Student.java
dans ce projet.Ajouter les attributs :
id
,firstName
etlastName
à la classeStudent
.Ajouter un constructeur à la classe
Student
.Ajouter une méthode
toString
à la classeStudent
.Vérifier que votre code est correct.
Lectures simples au clavier : la classe Scanner
Le but de cet exercice est de vous initier à l’utilisation de la classe java.util.Scanner
, qui permet d’effectuer simplement des lectures à la console. La documentation de cette classe est disponible au lien suivant : https://docs.oracle.com/javase/10/docs/api/java/util/Scanner.html.
Cette classe s’emploie de la manière suivante : au début du programme, on crée une instance (nommée ici input
) connectée à un flot en entrée, qui très souvent est l’entrée standard System.in
:
Ensuite, pour lire un entier integerValue
, il suffit d’écrire :
Pour lire un double doubleValue
, il suffit d’écrire :
Pour lire une chaîne de caractères string
, il suffit d’écrire :
La chaîne renvoyée comme résultat par nextLine
sera formée de tous les caractères qu’on va trouver sur System.in
à partir de maintenant et jusqu’au prochain caractère de fin de ligne (on produit un caractère fin de ligne au clavier en pressant la touche « Entrée »). Le caractère fin de ligne lui-même sera lu, mais n’apparaîtra pas dans la chaîne résultat.
Pour essayer la classe Scanner, écrivez en Java le programme qui calcule et affiche la somme d’une suite de nombres décimaux strictement positifs, lus au clavier, dont la fin est indiquée par un nombre égal à 0.
Exercices supplémentaires
- Coder les classes
Article
,Point
,LineSegment
,BankAccount
etBottle
des feuilles de TD. - Analyser le code de l’algorithme de parcoursup. Relever tous les problèmes dans le code dans la classe GroupeClassement.