D35 - TP2 - Révision de Java, mise en pratique de git+maven

metadata
TypeTP
EnseignementsD35, D35, D35, D35
PromotionsM2, M2, M2, M2
TechnologiesMaven, Java, JPA, Git
ThèmesBuild Tool, Build Tool, Build Tool, Build Tool

Pour une introduction rapide à maven : http://fr.slideshare.net/sandeepchawla/maven-introduction

L’objectif de ce TP est réviser les concepts de base du langage Java que vous devez maîtriser. Il permettra une première mise en pratique réelle de l’utilisation de Git et de maven. Appuyez vous sur https://bruno.lsis.univ-tln.fr/java/fulljava. Vous lirez le sujet en entier et par groupes de deux ou trois vous mettrez en place un projet github ou trello pour suivre l’avancement de vos révisions (mise en place d’une roadmap, de tickets pour chaque question, suivi des bug et livraisons).

Pour tous les exercices, vous devez utiliser l’environnement IntelliJ IDEA (www.jetbrains.com/idea/) ()ou Eclipse (http://www.eclipse.org/). Ils sont installés dans /usr/local/. Vous devez écrire la javadoc minimale (http://java.sun.com/j2se/javadoc/writingdoccomments/) au fur et à mesure de l’avancement.

La compilation et la génération de la documentation et des artefacts (fichier jar) seront réalisés avec Maven. Pensez à configurer le proxy pour maven Maven et les proxies web.

Pour vos inspirez regarder le projet https://github.com/emmanuelbruno/cours-java-librarymanager-parent

Attention, c’est un projet multimodule : git clone –recurse-submodules git@github.com:emmanuelbruno/cours-java-librarymanager-parent.git cours-java-librarymanager

Fabriquer automatiquement avec maven un fichier jar exécutable qui contient toutes les classes nécessaires. Exécuter l’application à partir de ce fichier.

Modifier vos classes pour que les logs sont gérés proprement à l’aide du Logger du jdk.

(Après une présentation rapide de Junit) Mettez en place des tests unitaires au fur et à mesure du développement en utilisant Junit (http://junit.sourceforge.net/)

L’exécution des tests sera faite par maven.

Dans un sous-paquetage appelé “vivants”. Ecrire les classes Java permettant de décrire une hiérarchie d’animaux : Tous les animaux doivent avoir un nom, ils sont soit des mammifères, soit des oiseaux. Pour le moment les animaux sont des vaches et des aigles. Créer une classe exécutable Test, dont la méthode main instancie des vaches et des aigles. Avec quel type de références peut-on les manipuler ?

Ajouter des constructeurs et mettez en place les méthodes bases d’égalité et de comparaison (equals, hascode et l’interface Comparable). En utilisant, les constructeurs modifier les classes précédentes pour que la méthode toString() des classes Vache et Aigle, affiche : Je m’appelle Geronimo et je suis un animal, je suis un oiseau, je suis un aigle Je m’appelle Marguerite et je suis un animal, je suis un mammifère, je suis une vache. Est-ce cohérent de pouvoir créer des instances dAnimal ?

Remplacer les constructeurs par des factory ou des builder pattern.

http://java.sun.com/docs/books/tutorial/collections/index.html

Nous allons maintenant regrouper les animaux dans des zoos qui sont des collections d’animaux. Créer une classe Zoo (dans un paquetage structures), qui possède une méthode ajouteAnimal(), et une méthode afficheToi(). Dans la classe Test, créez deux zoos et peuplez les avec des animaux pour obtenir le résultat suivant :

Affichage du zoo : mon Zoo
Je m’appelle Germaine et je suis un animal, je suis un mammifère, je suis une vache
Je m’appelle Geronimo et je suis un animal, je suis un oiseau, je suis un aigle
Je m’appelle Marguerite et je suis un animal, je suis un mammifère, je suis une vache
Affichage du zoo : ton Zoo
Je m’appelle Gertrude et je suis un animal, je suis un mammifère, je suis une vache
Je m’appelle Philomène et je suis un animal, je suis un mammifère, je suis une vache
Je m’appelle Tiki et je suis un animal, je suis un oiseau, je suis un aigle

Comment s’assurer que deux animaux qui ont le même nom ne peuvent être ajouté au même zoo ?

Comment faire pour qu’une référence vers tous les animaux (y compris ceux qui n’ont pas été ajouté à un zoo) soient conservée ? L’ensemble des animaux sera appelé la faune. Ajouter une méthode afficherFaune() qui affiche la faune ?

On souhaite pouvoir distinguer, parmi les animaux, les carnivores et les herbivores. Quel est le problème avec la hiérarchie de classe actuelle? Une solution à ce problème consiste à utiliser deux interfaces (un carnivore peut manger un autre animal, un herbivore broute). Définissez et implanter ces deux interfaces pour manipuler les aigles et les vaches à travers celles-ci. Attention, le code ne doit pas être dupliqué, utilisez la délégation.

http://java.sun.com/docs/books/tutorial/essential/io/index.html

Ajouter à la classe Zoo, une méthode sauve() (doit-elle être de classe ou d’instance ?) qui enregistre un zoo complet dans un fichier dont le nom est passé en paramètre. Ajouter une méthode restaure() (doit-elle être de classe ou d’instance?), qui retourne une référence vers un objet Zoo construit à partir des valeurs trouvées dans un fichier dont le nom est passé en paramètre.

Obligatoire pour la suite. En utilisant JPA, mettez en place la persistance de l’application (La faune et les animaux) dans une base de données relationnelles. Vous utiliserez le SGBD H2 (www.h2database.com).

Pour l’utilisation de JPA/Hibernate avec Intellij vous pouvez suivre : http://www.jetbrains.com/idea/features/jpa_hibernate.html

Créer une petite IHM swing permettant d’ajouter des vaches ou des aigles à la faune en précisant leur nom. A chaque ajout, l’affichage de la faune devra être mis à jour. Le projet exemple fourni un exemple de mise en place de MVC avec swing.