\documentclass[twoside,a4paper,10pt]{report}
\usepackage[french]{babel} %% Use your own babel language
\usepackage[top=3cm,bottom=3cm,left=2.5cm,right=2.5cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{pslatex}
\usepackage{hyperref}
\usepackage{graphicx}
\usepackage{tabularx}
\usepackage{supertabular}
\usepackage{pdflscape} %% Used for very big table
\usepackage{moreverb}
\usepackage{color}
\usepackage{listings}
\usepackage{lastpage}
\usepackage{fancyhdr}
\usepackage{ulem}
\usepackage{textcomp}
\usepackage{wasysym}
\usepackage{wrapfig} %%Usefull for image 
%%\usepackage{fguill} %%Use this package for guillemot[left|right] useless with babel set to french
\usepackage{eso-pic} %% Background
\pagestyle{fancy}%
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}
\renewcommand{\chaptermark}[1]{%
	\markboth{\chaptername\ \thechapter.\ #1}{}}

\renewcommand{\sectionmark}[1]{%
	\markright{#1}{}}

\fancypagestyle{plain}{%
\fancyhf{}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}}
\fancyhf{}
\fancyhead[L]{\rightmark}
\fancyhead[R]{\leftmark}
\fancyfoot[R]{\thepage/\pageref{LastPage}}
\renewcommand{\headrulewidth}{0.1pt}
\renewcommand{\footrulewidth}{0pt}

\definecolor{codegray}{gray}{.95}
\lstset{language=C,
	numbers=left,
	tabsize=2,
	basicstyle=\scriptsize,
	stringstyle=\textrm,
	showstringspaces=false,
	frame=none,
	xleftmargin=3pt,
	backgroundcolor=\color{codegray}}

\newcommand{\settexitref}[2]{(\ref{#1}p\pageref{#1})}
\newcommand{\dokutitlelevelone}[1]{\chapter{#1}}
\newcommand{\dokutitleleveltwo}[1]{\section{#1}}
\newcommand{\dokutitleleveltree}[1]{\subsection{#1}}
\newcommand{\dokutitlelevelfour}[1]{\subsubsection{#1}}
\newcommand{\dokutitlelevelfive}[1]{\paragraph{#1}}
\newcommand{\dokufootnote}[1]{\footnote{#1}}
\newcommand{\dokufootmark}[1]{\footnotemark[#1]}
\newcommand{\dokubold}[1]{\textbf{#1}}
\newcommand{\dokuitalic}[1]{\textsl{#1}}
\newcommand{\dokumonospace}[1]{\texttt{#1}}
\newcommand{\dokuunderline}[1]{\underline{#1}}
\newcommand{\dokuoverline}[1]{\sout{#1}}
\newcommand{\dokusupscript}[1]{\textsuperscript{#1}}
\newcommand{\dokusubscript}[1]{$_{#1}$}
\newcommand{\dokuhline}{\line(1,0){400}}
\newcommand{\dokulabel}[1]{\label{#1}}
\newcommand{\dokuitem}{\item}
\newcommand{\dokuquoting}{\textbar}
\newcommand{\dokutabularwidth}{\textwidth}
\newcommand{\dokusupertabularheadbreak}{\small\sl continued from previous page}
\newcommand{\dokusupertabulartailbreak}{\small\sl continued on next page}
\newcommand{\dokuheadingstyle}[1]{\textbf{#1}}
\definecolor{dokuheadingcolor}{rgb}{0,0,0.60}
\newcommand{\dokubackground}[1]{%
\AddToShipoutPicture{%
  \AtTextCenter{%
    \makebox(0,0)[c]{\resizebox{\textwidth}{!}{%
      \rotatebox{25}{\textsf{\textbf{\textcolor[gray]{0.90}{#1}}}}}}%
  }%
 }%
}

\hypersetup{
pdftitle = {INF2 JAVA TP3 - Collections},
pdfauthor = {E. Bruno},
pdfcreator = {DokuTeXit},
pdfproducer = {dokuwiki + TeXit + pdflatex}
}
\title{INF2 JAVA TP3 - Collections}
\author{E. Bruno}
\dokubackground{http://lsis.univ-tln.fr/\~{ }bruno/}
\begin{document}
\thispagestyle{empty}
\maketitle
\thispagestyle{empty}
\cleardoublepage
\tableofcontents
\newpage
\thispagestyle{plain}
\cleardoublepage
\newpage



\dokutitlelevelone{TP3 - Les collections en Java}
\label{464c13010f52e5db08e22009493a5bd0}%% tp3_-_les_collections_en_java
\label{32efe2815eb7c9abd9e6978b427e680f}%%Start: tp3 => /home/bruno/public_html/data/pages/tp3.txt

\dokutitleleveltwo{Objectif}
\label{ba81ee9ceeb9c96227f3607460f09179}%% objectif
L'objectif ce TP est de présenter d'une part l'utilisation des collections et d'autre part l'utilisation d'un outils d'édition de diagrammes UML permettant la génération de code Java (\href{http://www.topcased.org/}{Topcased}).


\dokutitleleveltwo{Utilisation "Simple" des collections}
\label{fdb64fb6786fbfd7dff616c2a207aafa}%% utilisation_simple_des_collections
Vous utiliserez les classes du TP précédent.


\begin{itemize}
\dokuitem  Créez un \dokubold{ ensemble } d'animaux (sans utiliser de génériques) et peuplez le en utilisant concrètement un \dokumonospace{HashSet}.
\dokuitem  On suppose que tous les animaux ont un nom, indiquez que deux animaux sont égaux s'ils ont le même nom.
\dokuitem  Vérifier que l'on ne puisse pas ajouter deux animaux ayant le même nom (par définition d'un ensemble)
\dokuitem  Affichez cet ensemble en utilisant un itérateur puis avec le foreach de Java 5
\dokuitem  Transformez le support physique de cet ensemble en un \dokumonospace{TreeSet}, que faut-il modifier d'autre ?
\dokuitem  Créer une liste d'animaux à partir des animaux de l'ensemble. 
\dokuitem  Afficher la liste des animaux triée par l'ordre alphabétique de leur nom.
\dokuitem  Convertissez cet ensemble en un tableau d'animaux (Faites attention au type)
\dokuitem  Modifier cet ensemble en ajoutant la généricité et définissez un ensemble d'animaux (supprimez les transtypages devenus inutiles).
\dokuitem  On suppose que l'on associe à chaque animal un tatouage unique composé de son espèce (une Chaîne de caractères) et d'un entier. Le couple des deux est unique.  Ecrire la classe tatouage, surcharger et redéfinir les méthodes nécessaires. Créer une \dokumonospace{Map} (avec la généricité) contenant des animaux (\dokuitalic{(Aigle,1), (Aigle,2), (Chien,1), (Chien,2)}) et affichez les informations concernant l'animal dont l'identifiant est \dokuitalic{(Chien,1)}.
\end{itemize}

\dokutitleleveltwo{Ecriture manuelle d'un programme à partir d'un diagramme de classe}
\label{89b90a5d612cddc92c60e8333fc9ea70}%% ecriture_manuelle_d_un_programme_a_partir_d_un_diagramme_de_classe
L'objectif est d'écrire un programme de gestion d'une bibliothèque qui prête des livres et des ordinateurs à des enseignants et des étudiants.

\begin{figure*}[h]
\includegraphics{/home/bruno/public_html/lib/plugins/tmp/texitimages/texitxV6GQs.png}
\caption{fr.univtln.bruno.tp.tp3.Bilbio.eps}
\end{figure*}



\dokutitleleveltree{Architecture de base}
\label{e624f1ddb280c2b30a3553b17da4ef6c}%% architecture_de_base
Ecrire (sans utiliser d'éditeur UML) les classes Java correspondant au diagramme UML donné décrivant une bibliothèque simple. Vous veillerez en particulier à


\begin{itemize}
\dokuitem  redéfinir la méthode \dokumonospace{toString()} des différentes classes pour que celles-ci puissent être affichées
\dokuitem  représenter correctement les associations multiples en utilisant des collections (il est conseillé d'utiliser les génériques).
\dokuitem  créer une classe exécutable \dokumonospace{Test} dans laquelle vous pourrez :
\begin{itemize}
\dokuitem  créer une bibliothèque
\dokuitem  ajouter des adhérents qui doivent avoir un nom, un prénom et un statut
\dokuitem  ajouter au moins deux livres, deux revues, deux dictionnaires et deux BD
\dokuitem  ajouter deux ordinateurs portables (un sous linux, un sous windows)
\end{itemize}

\end{itemize}

\dokutitleleveltree{Gestion des emprunts}
\label{ff25f942966d17c5dbfe373539002062}%% gestion_des_emprunts
Ecrire le code permettant de gérer les emprunts en ajoutant aux adhérents les méthodes \dokumonospace{boolean emprunter(Empruntable e)} et \dokumonospace{boolean rendre(Empruntable e)}. Pensez à bien vérifier qu'un objet n'est pas emprunté deux fois (vérifier que cela marche en faisant un test dans la classe \dokumonospace{Test}) et qu'un adhérent n'emprunte pas plus de cinq objets.


\begin{itemize}
\dokuitem  Ajouter une méthode \dokumonospace{void afficherEmprunts()} à la classe \dokumonospace{Adherent}
\dokuitem  Ajouter une méthode \dokumonospace{void afficherFonds()} à la classe \dokumonospace{Bibliothèque} qui affiche les documents et le matériel (chacun affichant par qui il a été emprunté). \dokubold{ Ajoutez les méthodes qui vous semblent utiles pour cela}
\dokuitem  Surcharger les méthodes \dokumonospace{emprunter} et \dokumonospace{rendre} pour les Livres et les Portables, pour vérifier que l'on emprunte au plus cinq livres mais un seul portable.
\end{itemize}

\dokutitleleveltree{Recherche dans une collection}
\label{8546a7ca9619fd5c63a569eb48aed984}%% recherche_dans_une_collection
Ajouter une méthode \dokumonospace{Collection rechercherTitre(String mot)}, qui retourne une collection contenant des références vers les documents qui comportent la chaîne \dokumonospace{mot} dans leur titre.


\dokutitleleveltwo{Ecriture assistée d'un programme à partir d'un diagramme de classe}
\label{175580f7630040e8632f8a98004c6248}%% ecriture_assistee_d_un_programme_a_partir_d_un_diagramme_de_classe
En utilisant un outils d'édition de diagramme UML, construisez le diagramme précédent et générer automatiquement le squelette des classes. 


\dokutitleleveltwo{Si vous avez fini\ldots{}}
\label{72f7165a20a5cab1257f0c41bfcc70d4}%% si_vous_avez_fini
Vous pouvez affinez vos connaissances en suivant le tutorial de Sun : \href{http://java.sun.com/docs/books/tutorial/collections/index.html}{http://java.sun.com/docs/books/tutorial/collections/index.html} et la documentation \href{http://download-llnw.oracle.com/javase/6/docs/technotes/guides/collections/overview.html}{http://download-llnw.oracle.com/javase/6/docs/technotes/guides/collections/overview.html}.

\end{document}

