D14 - TP1 - Premiers pas en Java

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.

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/

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 :

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

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)

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é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

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

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.

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.

Mettez en place l’application “Hello World !” avec Maven.

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.

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.

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.

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.

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