D14 - TP1 - Premiers pas en Java
Objectif
Les objectifs de ce premier TP sont la mise en place de l’environnement de travail en java et l’étude des fondements du langage. C’est-à-dire d’une part la compréhension de la compilation et de l’exécution de code java, l’arborescence classique d’une application et la génération de la documentation et d’autre part la maîtrise de la création de classes et d’objets.
Une première exécution
Mettre en place l’environnement
La première chose à faire est de fixer quelle distribution du jdk va être utilisée,
pour cela fixer la valeur de la variable d’environnement JAVA_HOME
pour
indiquer son emplacement /usr/local/jdk1.7.0_67
, /usr/lib/jvm/java-1.6.0-openjdk
, /usr/local/jdk1.8.0_20
, …
Pour les étudiants de l’UFR de sciences et techniques, les jdk se trouvent dans /usr/local/jdk…
. Pour les autres télécharger openjdk 14 (lire le paragraphe suivant) sur le site https://jdk.java.net/14/ et décompresser l’archive à la racine de votre compte.
Pour une installation, rapide et simple de Java et Maven en autres, il est possible d’utiliser : L’outils SDKMain : http://sdkman.io/
- curl -s “https://get.sdkman.io” | bash
- sdk install java 14.0.2.hs-adpt
- sdk install maven 3.6.3
Ensuite, on ajoute le répertoire ${JAVA_HOME}/bin
au début de la valeur de la variable PATH
pour que les commandes de bases soient accessibles. Vérifier que cela fonctionne en exécutant les commandes java -version
et
javac -help
(il doit s’agit de la JVM de Sun/Oracle/Open JDK de la bonne version).
Il est impératif que toutes les documentations suivantes soient ouvertes dans votre navigateur web :
- la documentation sur les outils Java fournis par Oracle : https://docs.oracle.com/en/java/javase/14/
- la documentation sur les API : https://docs.oracle.com/en/java/javase/14/docs/api/index.html
Compiler et exécuter une application
A la racine de votre compte ajouter un répertoire I111
(ce répertoire sera
appelé répertoire de travail ou workspace, il contiendra tout vos projets). A l’intérieur de votre répertoire de travail ajouter le répertoire TP1
(appelé répertoire de projet). A l’intérieur de votre répertoire
de projet ajouter les répertoires standards src
, build
, doc
, dist
et lib
.
Dans le répertoire src
, créer l’arborescence correspondant au paquetage :
fr.univtln.login.tp.tp1
. A l’intérieur de ce paquetage ajouter le programme
Java PremierProgramme.java.
Ouvrir et modifier ce programme pour que l’instruction package
soit correcte.
A partir de votre répertoire de projet, compiler le programme avec la commande suivante :
javac -sourcepath src -d build src/fr/univtln/login/tp/tp1/PremierProgramme.java
Regarder dans le répertoire build
. Pour exécuter le programme, depuis votre
répertoire de projet :
java -classpath build fr.univtln.login.tp.tp1.PremierProgramme Pierre
Générer la documentation
Précision sur la forme
La commande javadoc produit de la documentation en partant de commentaires particuliers insérés dans le code source des classes (/** … */). On peut ainsi documenter les paquetages, classes ou interfaces, variables d’instance, méthodes,…
Les commentaires peuvent contenir du texte simple et des balises HTML de mise en forme de texte (<I> italique, <B> caractère gras, … ). On peut utiliser la balise <code> pour inclure du code dans les commentaires. Des balises spéciaux appelées annotations qui commencent par le caractère @ (@author, @version, @param,. . . ) sont définies pour fixer des valeurs standards. Les commentaires doivent être placées juste avant ce qu’ils commentent. Lire cette page : https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javadoc.html
De plus, il est rappelé que le langage Java est entouré d’un ensemble de bonnes pratiques. Cette page présente les habitudes dans le cadre du langage java. Lire cette page : http://www.oracle.com/technetwork/java/javase/documentation/index-137868.html
Ajouter les commentaires pour les packages (cf. package-info.java
)
Génération
A partir de maintenant, tous vos programmes seront commentés. Générer la documentation depuis votre répertoire de projet avec la commande:
javadoc -d doc -sourcepath src -subpackages fr.univtln.login.tp.tp1
Générer et exécuter l’archive jar
Génerer l’archive de votre projet depuis votre répertoire de projet avec la commande :
cd build; jar cvf ../dist/tp.jar fr; cd ..
Exécuter le programme en ajoutant le jar au classpath et en indiquant la classe exécutable avec la commande suivante :
java -classpath dist/tp.jar fr.univtln.login.tp.tp1.PremierProgramme Pierre
Il est possible de rendre le jar “exécutable” en créant un fichier manifest
qui indique en particulier quelle est la classe exécutable.
Copier le fichier monManifest
(monmanifest.zip) dans le répertoire de projet et regarder son
contenu. Recréer le fichier .jar
en précisant le manifeste à ajouter :
cd build; jar cvfm ../dist/tp.jar ../monManifest fr; cd ..
Puis exécuter directement l’archive :
java -jar dist/tp.jar Pierre
Automatiser le processus avec Apache Ant (Partie Dépréciée)
Comme vous l’avez vu, la compilation d’un projet complet en Java est une tâche
fastidieuse. C’est pourquoi, il est conseillé d’utiliser un outil qui automatise ce
travail : Ant (http://ant.apache.org/). Ant utilise un fichier de configuration
qui indique les tâches à accomplir, vous trouverez un exemple de ce fichier sur
le wiki build.xml.zip.
Copier ce fichier dans votre répertoire de projet et regarder son contenu.
Adapter son contenu pour qu’il indique des chemins corrects.
Créer une variable d’environnement
ANT_HOME
qui indique le répertoire d’installation
de ant (/usr/share/ant
). Ajouter ANT_HOME/bin
dans le PATH
.
Pour obtenir l’ensemble des tâches possibles avec un fichier de construction:
ant -projecthelp build.xml
Pour lancer l’exécution et si nécessaire compiler et générer l’archive :
ant run
Utilisation de l’environnement Eclipse (Partie Dépréciée)
Nous allons maintenant utiliser l’environnement de développement eclipse (http://www.eclipse.org) qui se trouve dans le répertoire
/usr/local/eclipse
.
Comme “workspace” vous pouvez choisir votre
espace de travail (c’est là que eclipse stocke ses informations de configuration).
Créer un nouveau projet à partir d’un fichier ant (cf. menu file).
Modifier les propriétés du nouveau projet (clic droit sur le projet). Dans
“Java compiler” indiquer la compatibilité avec Java 5 (ou 6). Dans les propriétés des
chemins vérifier que les répertoires des sources et des binaires sont corrects.
Dans les propriétés du paquetage JRE_LIB
indiquer où se trouve l’archive de
la Javadoc.
Pour lancer une tâche ant, utiliser le menu de droite.
Vous pouvez maintenant éditer vos programmes Java.
Automatiser le processus avec Maven
Tout ce processus peut être automatisé avec Maven. Maven sera présenté plus en détail en cours. Nous allons commencer par un utilisation minimale.
- Configurer le proxy http : Maven et les proxies web
- Création d’un projet générique Java : Projet Java de base avec Maven
Mettez en place l’application “Hello World !” avec Maven.
Utilisation de l’environnement Intellij Idea
Dans le cadre des travaux pratique nous utilisons la version Ultimate d’Intellij Idea : http://www.jetbrains.com/idea/. Demandez une licence avec votre adresse email UTLN ici : https://www.jetbrains.com/shop/eform/students
/usr/local/idea/bin/idea.sh
Ouvrez et modifiez l’application Hello World avec Idea.
Les concepts de base de Java
Création et instanciation d’une classe
Créer une classe Java exécutable nommée Test
qui appartient au paquetage
‘tp1’. La classe ‘Test’ devra afficher “Hello”
.
Créer une classe Personne
sans constructeur explicite qui décrit une
personne ayant un nom, un prénom, un âge et un salaire. Créer les accesseurs
correspondants à ces attributs (l’IDE peut le faire automatiquement).
Vous vérifierez qu’un salaire ne peut pas être
négatif. Instancier une personne p1
dans le main
de la classe Test
, mettre à jour ses informations et les afficher (Pierre Truc est agé de 30 ans et gagne 2000€
).
Ajouter des constructeurs dans la classe Personne qui initialisent le nom et le prénom et éventuellement l’âge et la profession. Modifier cette classe pour que le nom et le prénom ne puissent plus être modifiés après l’instanciation.
Ajouter un attribut qui indique l’année de naissance et les accesseurs associés. Modifier la méthode que retourne l’âge. L’année courante s’obtient avec
java.util.Calendar.getInstance().get(Calendar.YEAR)
.
Ajouter une méthode comparerSalaire()
qui prend en paramêtre une personne et retourne -1, 0 ou 1 selon que celle à un salaire supérieur, égal ou
inférieur à l’instance courante. Créer une deuxième personne p2
née la même
année que p1
mais qui gagne plus. Afficher le résultat de la comparaison des
salaires de p1
et p2
.
Ajouter une méthode comparerSalaire()
qui prend en paramètre deux personnes et qui retourne -1, 0 ou 1 selon de le salaire de la première est inférieur, égal ou supérieur à celui de la seconde.
Attention comparerSalaire(Personne)
et comparerSalaire(Personne,
Personne)
sont-elle des méthode de classe ou d’instance ?
Ajouter un attribut de classe totalDesSalaires
qui indique le total des salaires des
personnes et un accesseur. Modifier les méthodes nécessaires pour le salaire
total soit maintenu à jour automatiquement.
Afficher le salaire total après la création de chaque personne.
Les méthodes de base
toString()
Afficher directement l’objet p1
dans la classe Test
. Ajouter une méthode :
String toString()
à la classe personne qui retourne une chaîne de caractère
qui décrit la personne. Exécuter Test
.
equals()
On souhaite considérer que deux personnes sont “égales” dans notre application, si elles sont nées la même année. Pour définir une relation d’égalite d’objets en Java on redéfinit la méthode Boolean equals(Object)
. Vérifier
que p1
et p2
sont égales.
Définition de classes locales
Pour représenter le fait qu’une Personne à un cerveau ajouter une définition de
la Classe Cerveau
à l’intérieur de la définition de la classe Personne
. Ajouter
un attribut cerveau
à Personne
et instancier un cerveau à chaque personne lors
de sa création. Compiler et exécuter Test
. Regarder dans le répertoire build
les classes qui ont été compilées. Essayer de créer une instance de Cerveau
directement dans la classe Test
.
Pour finir...
Vous allez maintenant créer une classe Entreprise
qui permet de représenter
des entreprises qui comportent au maximun MAX_EMPLOYES
Personnes
.
Vous ajouterez les méthodes pour créer une entreprise, ajouter des employés
et afficher le nombre d’employés, un employé précis et tous les employés (en
utilisant le foreach
de Java5).
Les entreprises doivent appartenir à l’une des trois catégories suivantes:
{PUBLIQUE, PME, GRAND GROUPE}
. Modifier la classe Entreprise
pour
représenter cela en utilisant un type enum
et ajouter trois méthodes isPUBLIQUE()
,
isPME()
, isGRAND_GROUPE()
qui retournent un booléen.
Ajouter une méthode miseEnForme()
qui passe le nom de toute les personnes
d’une entreprise en majuscule.
Modifier votre classe Test
, pour l’on puisse lui passer en paramètre le nom
et le type d’une entreprise, puis la liste des personnes qui la compose.
java Test maBoite PME Pierre Durand 1950 2000 Paul Dupond 1960 3000 Marie Martin 1975 2500