Vous êtes sur la page 1sur 11

JAVA TP1

Remarques prliminaires
- Les travaux pratiques seffectueront sous le systme dexploitation Windows
avec l'outil de dveloppement NetBeans. A la cration des projets, veiller ce que
ceux-ci soient situs sur le disque rseau. Pour chaque exercice, un projet doit tre
cr. Pour les exercices ncessitant des arguments sur la ligne de commande, ceux
ci peuvent tre placs sur la ligne Arguments de la catgorie Run des
proprits du projet.
-

Vous pourrez trouvez de laide en ligne sur les diffrentes classes et mthodes de
la version 8 du langage utiliser ladresse:
http://download.oracle.com/javase/8/docs/api/

Tous les affichages consoles demands dans les exercices seront effectus par
appel de la mthode System.out.println(String), par contre les ventuels messages
derreurs seront affichs par appel de la mthode System.err.println(String).

Pour les comptes rendus de travaux pratiques, une attention particulire sera
porte sur les commentaires ; outre les listings des programmes, chaque classe,
partir du TP2, devra tre accompagne par sa description qui devra tre gnre
par la commande javadoc (utilisation des commentaires /**
*/). Les comptes
rendus sous forme darchive du projet NetBeans devront tre dposs sur la
plateforme denseignement http://foad.ensicaen.fr.

Exercice I
crire une application console au sein dune classe Telegramme qui permet lors
de son excution d'afficher les chanes de caractres prises en argument
spares par des "Stop.".
Exemple :
Chane ceci est drole
Rsultat ceci Stop. est Stop. drole Stop.

Exercice II
Ecrire une application console au sein dune classe Somme qui permet dafficher la
somme des nombres transmis en arguments lors de lexcution de lapplication.
Ne pas oublier d'intercepter l'exception NumberFormatException lors de la
conversion chane de caractres/entier.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-1-

Exercice III
Ecrire une application console permettant d'crire un double avec un nombre
limit de dcimales. Pour cela, on dfinira une classe contenant la fonction
principale main et une mthode tronque, ayant deux paramtres : un double x et
un entier nbDecimales. La mthode devra retourner une chane de caractres
donnant le double x ventuellement tronqu de faon avoir au plus nbDecimales
dcimales. L'affichage du rsultat sur la console sera fait dans la mthode main.
On ne cherchera pas "arrondir au plus proche", on enlvera simplement les
dcimales excdentaires, que x soit positif ou ngatif. Le paramtre nbDecimales
transmis la mthode tronque sera toujours positif ou nul. La valeur de x et celle
de nbDecimales seront transmises par la ligne de commande.
Voici quelques exemples d'excution.
98.7689
98.76

-0.765
-0.7

-0.765
0

-4.765
-4

Avant d'appeler la fonction de troncature, on s'assurera qu'il y a bien 2 arguments


sur la ligne de commande et que le premier argument est effectivement un double
et le deuxime argument un entier positif ou nul. On pourra utiliser la mthode :
String [ ] split (String regex) de la classe java.lang.String pour dcomposer les
chaines.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-2-

JAVA TP2
Exercice I
On souhaite grer une bibliothque constitue de documents; un document est
caractris par un numro (entier) et un titre (chane de caractres).
a) Ecrire une classe "Document" permettant cette reprsentation. La classe
contiendra un constructeur admettant un entier (le numro) et une chane de
caractres (le titre) en argument et un deuxime constructeur admettant un objet
Document en argument. On inclura galement une mthode toString() pour
accder la reprsentation chane de caractres des objets Document et une
mthode equals () permettant de tester si deux documents sont gaux (deux objets
seront gaux s'ils sont tous les deux de type Document et s'ils ont le mme numro
de registre).
b) Testez la classe en crivant une application console (dans une autre classe)
capable de crer un objet de type Document et dafficher les caractristiques de ce
document en appelant la mthode System.out.println.
c) Ecrire une classe Bibliotheque rpondant au cahier des charges suivant :
a. Un constructeur qui prend en paramtre le nombre maximum de
documents que peut contenir la bibliothque. Les documents seront
contenus dans un tableau (on utilisera ultrieurement les "collections"
qui seront plus adaptes).
b. Une mthode int getCapacite () retournant la capacit de la
bibliothque.
c. Une mthode boolean ajoutDocument (Document) qui ajoute un
document la bibliothque. La mthode renvoie true si lajout sest
correctement effectu, false sinon.
d. Une mthode int getNbDocuments () retournant le nombre de
documents contenus dans la bibliothque.
e. Une mthode String toString () qui permettra dafficher lensemble des
documents contenus dans la bibliothque.
d) Modifier le programme principal pour tester la classe Bibliothque.
e) On souhaite maintenant que la mthode ajoutDocument () puisse gnrer une
exception si la bibliothque est pleine, plutt que de renvoyer un boolen.
Crer une classe BibiliothequeException pour grer ce cas de figure et modifier
en consquence la mthode ajoutDocument (). Modifier galement le
programme principal; il sera intressant de faire afficher les titres des
documents qui n'ont pu tre ajouts.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-3-

f) Les documents ranger peuvent tre des livres (incluant un auteur et un


nombre de pages pouvant tre soit des romans (pouvant obtenir un prix
littraire tel que GONCOURT, MEDICIT, INTERALLIE reprsent par un
entier) ou un manuel scolaire (contenant un niveau scolaire). Les documents
peuvent aussi tre des dictionnaires (ANGLAIS, ALLEMAND, reprsent
par un entier). Reprsenter l'arborescence des diffrentes classes et crire le
code java correspondant.
g) Enrichir les classes Bibliotheque et Livre afin de permettre de rechercher tous les
livres d'un auteur spcifi. On pourra utiliser la classe java.util.ArrayList<E>
pour stocker tous les livres correspondants au critre.

Exercice II
On souhaite construire une classe baptise TriSimple capable de manipuler des
tableaux dentiers. Le tableau dentiers sera dfini comme une donne membre
prive de la classe. Au moment de la cration dun objet TriSimple, la taille du
tableau aura une valeur par dfaut dfinie par le programmeur mais pourra
galement tre indique par lutilisateur de la classe lors de la construction dun
objet TriSimple. Le tableau initial ne contiendra aucun lment. La classe TriSimple
devra contenir les mthodes suivantes :
. void inserer(int entier) : insre un entier dans le tableau en respectant un ordre
croissant sur les entiers.
. void supprimer(int entier) : retire un entier donn, si un tel entier est dans le
tableau. Si l'entier figure plusieurs fois, une seule occurrence est retire.
. public String toString() : retourne une chane de caractres dcrivant le
tableau, et redfinit la mthode correspondante de la classe Object.
. Deux constructeurs : un sans paramtre, et un qui prend en paramtre la
capacit initiale du tableau et la valeur dun incrment ; lincrment sera utilis par
les mthodes inserer () et supprimer () comme ceci :
-

Lorsque le tableau devient trop petit, il faut l'agrandir en dfinissant


un tableau plus grand et en recopiant les entiers un un. La
diffrence entre la capacit de l'ancien tableau et celle du nouveau
sera fournie par la donne entire increment.

Lorsque le nombre de donnes aura diminu de telle sorte que la


capacit inemploye soit au moins gale au double de l'incrment, on
diminuera la taille du tableau.

Dautres mthodes peuvent naturellement tre ajoutes.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-4-

On rcuprera le fichier EssaiTri.java, contenant la mthode main qui permet de tester


la
classe
TriSimple
que
vous
aurez
crite,

l'adresse
http://www.ecole.ensicaen.fr/~dp/tpjava/EssaiTri.java. Lors de l'excution de ce
programme de test, on pourra entrer :
la lettre a suivie de donnes insrer
la lettre s suivie de donnes supprimer
la lettre q pour quitter

Exercice III
On souhaite gnraliser le concept prcdent pour manipuler des tableaux tris de
type quelconque (pas uniquement d'entiers) pourvu qu'il soit possible d'tablir une
relation d'ordre et un test d'galit entre 2 valeurs de ce type.
- Dfinir une interface de nom Ordonnable contenant les prototypes:
boolean plusGrand (Object o) ;
boolean egal (Object o) ;
La mthode plusGrand renvoie true si l'instance courante est plus grande que
l'instance spcifie en paramtre, false sinon. La mthode egal renvoie true si l'instance
courante est gale l'instance transmise en paramtre, false sinon. Tout type de
donne implmentant cette interface devra dfinir ces mthodes.
-

Dfinir une classe EntiersOrdonnables implmentant l'interface Ordonnable. On


pourra prvoir un constructeur acceptant un argument de type String et le
convertissant en entier. La surcharge de la mthode toString () pourra s'avrer
ncessaire. On pourra en outre s'assurer que les objets transmis aux mthodes
plusGrand et egal sont bien Ordonnable (utilisation de l'oprateur instanceof).

En s'inspirant de la classe TriSimple de l'exercice prcdent, dfinir une classe


TableauTrie dfinissant les mthodes inserer, supprimer, toString s'appliquant non
plus des entiers mais des objets de type Ordonnable.

Vous trouverez l'adresse http://www.ecole.ensicaen.fr/~dp/tpjava /EssaiTableauTrie.java


un fichier contenant la mthode main qui vous permettra de tester votre logiciel.
Facultatif : dfinir dautres types Ordonnables .

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-5-

JAVA TP3
Exercice I
- Ecrire une application capable dafficher lcran le nom de tous les fichiers
contenus dans un rpertoire. Le nom du rpertoire sera saisi au clavier. On
saidera pour cet exercice de la classe java.io.File.
- Modifier lapplication pour nafficher cette fois que les fichiers dextension .java ;
On utilisera linterface java.io.FilenameFilter.

Exercice II
Ecrire une application console capable de lire le contenu dun fichier texte (la
lecture du fichier se fera laide des classes de flux de caractres java.io.Reader, le
nom du fichier sera saisi au clavier) et de compter le nombre d'occurrence des
mots prsents dans ce fichier. Un mot sera dfini comme un ensemble de
caractres dfinis entre 2 dlimiteurs. Les dlimiteurs de mots pourront tre les
suivants:
" ,.;:_-+*/\\.;\n\"'{}()=><\t!?"
Pour compter le nombre d'occurrences des mots dans le fichier il est possible
dutiliser une table de hachage; Le langage java propose la classe
java.util.HashMap<K,V>. Une table de hachage est une collection de paires clesvaleurs. Les cles permettent d'accder trs rapidement la valeur associe; Il ne
peut pas y avoir 2 cls identiques. Les cls doivent tre des sous classes de la
classe Object et implmenter les mthodes hashCode () et equals () (c'est le cas de la
classe String). La valeur associe la cl pourra tre une instance de la classe
Integer permettant de compter le nombre d'occurrences du mot correspondant.
Voil un exemple de rsultat attendu:
Le mot faut figure 2 fois
Le mot InputStreamReader figure 1 fois
Le mot void figure 1 fois
Le mot public figure 1 fois
Le mot IOException figure 1 fois
Le mot LEURS figure 1 fois
Le mot java figure 2 fois
Le mot ouvert figure 1 fois
Le mot throws figure 1 fois
Le mot TABLE figure 1 fois

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-6-

Exercice III
Ecrire une application console permettant de coder et dcoder des donnes. Ce
programme sera utilis de la manire suivante :

Aucun argument : lit sur System.in et crit sur System.out

1 argument : lit sur le fichier indiqu et crit sur System.out

2 arguments : lit sur le fichier indiqu en premier argument et crit sur le


fichier indiqu en second argument

Le codage sera ralis dans la classe Rot13OutputStream qui tendra la classe


java.ioFilterOutputStream. Dans cette classe, la mthode public void write (int) sera
dfinie. On choisira un algorithme de chiffrement symtrique simpliste: le codage
par dcalage de 13 caractres utilis par Jules Csar :
alphabet original :
alphabet cod
:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M

Exercice IV
a) Ecrire une classe FileCopy permettant la duplication dun fichier. Cette
classe comportera :
-

un constructeur avec 2 arguments de type String pour dfinir le


nom du fichier copier et le nom de la copie.
Une mthode duplicateFile () ralisant la copie du fichier. Pour les
besoins de cet exercice, les octets seront copis un un avec une
temporisation entre chaque criture de caractre. La valeur de la
temporisation sera une donne membre de la classe. On utilisera
les classes de la famille java.io.InputStream et java.io.OutputStream.
Une mthode setTemporisation (int) pour fixer la valeur de la
temporisation.
Une mthode getNumberBytesCopied () retournant le nombre
doctets copis au moment de lappel de cette mthode.

b) Ecrire dans une autre classe, une application console permettant de vrifier
le bon fonctionnement de cette classe.
c) Sans modifier la classe FileCopy, on souhaite maintenant pouvoir surveiller
la progression de la copie en affichant toutes les 2 secondes le nombre
doctets copis. Ecrire une classe tendant la classe java.lang.Thread
permettant de raliser cela.
d) Ecrire la mthode main () permettant de crer une application console
utilisant ces 2 classes.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-7-

Exercice V
On se propose dtudier les problmes de synchronisation entre threads en
mettant en uvre un modle producteur-consommateur.
-

Ecrire une classe TamponCirculaire contenant en donnes membres


au minimum un tableau dlments de type Object et la taille du
tableau et disposant des mthodes suivantes :
Un constructeur avec un argument : la taille du tableau
Une mthode void depose (Object) ; pour ranger lobjet reu
dans le tableau circulaire.
Une mthode Object preleve () pour retourner lobjet courant.

Ecrire une classe Producteur tendant la classe java.lang.Thread


dposant continuellement des objets (du type de votre choix) dans
le tampon circulaire avec une temporisation entre 2 dpts, la
valeur de cette temporisation est dfinie la construction de lobjet
Producteur.

Ecrire une classe Consommateur tendant la classe java.lang.Thread


retirant continuellement des objets du tampon circulaire avec une
temporisation entre 2 retraits. La construction dun objet
Consommateur permettra de dfinir la valeur de la temporisation
ainsi quun nom (type java.lang.String) pour ce consommateur.

Ecrire une application console mettant en uvre un producteur et


un ou plusieurs consommateurs. On doit notamment constater que
lorsque le tampon circulaire est plein, le producteur est en attente
(non active) dun retrait pour dposer un nouvel objet et que
lorsque le tampon circulaire est vide, le consommateur est en
attente (non active) dun dpt pour obtenir un nouvel objet.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-8-

JAVA TP4
On se propose de dvelopper une application pour interroger une base de donnes
cinmatographique. Le gestionnaire de base de donnes sera SQLite dont la
particularit est de placer lintgralit de la base de donnes (dclarations, tables,
index, donnes) dans un fichier unique indpendant de la plate forme. SQLite est
beaucoup utilis dans la programmation pour mobile. On pourra rcuprer
lexcutable pour Windows ladresse :
http://www.ecole.ensicaen.fr/~dp/tpjava/sqlite3.exe
Une base de donnes (palolithique) contenant quelques centaines de films
pourra tre tlcharge ladresse : http://www.ecole.ensicaen.fr/~dp/tpjava/cinema.db
Pour ouvrir la base en mode console, il suffit de taper : sqlite3 cinema.db
Schma de la base :

Pour connatre le schma dune table ainsi que les types de donnes utiliss, on peut
taper sous sqlite3 : .schema nom_de_la_table
Pour interfacer la base de donnes et le code java, il est ncessaire de disposer
dun driver jdbc. Celui-ci est disponible ladresse :
http://www.ecole.ensicaen.fr/~dp/tpjava/sqlite-jdbc-3.8.11.2.jar

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

-9-

Code java ncessaire lutilisation du driver jdbc :


private Connection Conn ;
private void connectionBaseSQLLite ()
{
// Chargement du driver JDBC
try {
Class.forName("org.sqlite.JDBC");
} catch (ClassNotFoundException ex)
{
System.err.println (" Classe JDBC non trouve ") ;
System.exit (1) ;
}
// On se connecte sur la base de donnes
try {
Conn= DriverManager.getConnection("jdbc:sqlite:cinema.db");
} catch (SQLException E)
{
System.err.println("Probleme de connexion : " + E.getMessage());
System.exit (1) ;
}
}

Travail effectuer :
Avec NetBeans, concevoir une interface utilisatrice pouvant interroger la base de
donnes et qui pourra ressembler ceci :

On saisit le nom ou le
dbut du nom dun
comdien. On ne peut
trouver quun seul
comdien ; un message
derreur apparaitra en
statut si on ne trouve
pas de comdiens dans la
base ou si on en trouve
plus quun.

Aprs avoir tap sur la touche Entre dans la zone de saisie du comdien ou cliqu
sur le bouton Rechercher :
-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

- 10 -

On affiche le nom
complet du comdien.

On affiche les titres de


films dans lesquels a jou
ce comdien.

Quand le curseur de souris


est au dessus du titre, on
affiche le rsum dans une
infobulle.

Quelques directives de programmation :


-

Toutes les instructions SQL seront regroupes dans une classe que
lon pourra baptiser GestionBase.
Dfinir une classe Film contenant toutes les caractristiques dun
film (numro, titre, resume, ). Pour un comdien donn, on
disposera ainsi dune collection dobjets de type Film.
Les films seront affichs dans un objet de type javax.swing.JTable.
Grce aux classes de rendus, on naffichera que les titres des films
et les rsums dans les infobulles.

-Ecole Nationale Suprieure d'Ingnieurs de Caen -

dp

Travaux Pratiques

- 11 -