D35 - TP2 - Révision de Java, mise en pratique de git+maven
Pour une introduction rapide à maven : http://fr.slideshare.net/sandeepchawla/maven-introduction
Objectif
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
Au fur et à mesure du développement
Livraison du résultat
Fabriquer automatiquement avec maven un fichier jar exécutable qui contient toutes les classes nécessaires. Exécuter l’application à partir de ce fichier.
Gestion des log
Modifier vos classes pour que les logs sont gérés proprement à l’aide du Logger du jdk.
Test de vos classes avec JUnit
(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.
Classes, Instances et Héritage
Hiérarchie
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 ?
Constructeurs, ''toString'' et égalité
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.
Collections
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 ?
Administration de classes
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 ?
Héritage Multiple / Interfaces
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.
Entrées/Sorties et sauvegarde (serialisation)
– 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.
Persistance avec JPA
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
IHM
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.