Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
enseignement:d35:tp:tp2 [2018/11/06 16:29] – modification externe 127.0.0.1enseignement:d35:tp:tp2 [2023/09/20 18:52] (Version actuelle) – modification externe 127.0.0.1
Ligne 1: Ligne 1:
 +====== 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:maven_and_proxies]]. 
 +
 +** 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 d''Animal'' ?
 +
 +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.
 +
 +{{tag>D35 TP java git maven}}
 ---- struct data ---- ---- struct data ----
 +metadata.level       : 
 +metadata.Type        : TP
 +metadata.Nom         : 
 +metadata.Enseignements : D35
 +metadata.Promotions  : M2
 +metadata.Technologies : Maven, Java, JPA, Git
 +metadata.Thèmes     : Build Tool
 +metadata.Description : 
 ---- ----