:: Enseignements :: Master :: M1 :: 2008-2009 :: Stage Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) |
Objet, redéfinition, encapsulation, conteneur, visibilité
|
Exercice 1 - De C vers Java
Cet exemple a pour but de montrer les différences de performance
entre un programme en C et le même en Java.
#include <stdio.h>
#include <stdlib.h>
int pascal (int nBut, int pBut){
int * tab;
unsigned int n, i;
tab = (int *)malloc ((nBut+1)*sizeof(int));
if(tab==NULL){
fprintf(stderr,"Pas assez de place\n");
exit(0);
}
tab[0] = 1;
for(n=1; n<=nBut; n++){
tab[n] = 1;
for(i=n-1; i>0; i--)
tab[i] = tab[i-1] + tab[i];
}
int result=tab[pBut];
free(tab);
return result;
}
int main(int argc, char * argv[]) {
printf(" Cn, p = %d\n", pascal (30000, 250));
return 0;
}
-
Compiler (gcc pascal.c) et exécuter le
programme a.out en demandant au système
le temps d'exécution du programme. (time a.out).
-
Ecrire le programme (Pascal.java) équivalent en Java.
Pour une fois, servez-vous du copier/coller.
Compiler le programme. Exécuter le en mesurant le temps
(toujours avec time).
Comment peut-on expliquer la différence de vitesse ?
Exercice 2 - Comment créer un livre ?
Le but de cet exercise est de définir des objets
Book. Nous allons pour cela créer la
classe
Book.
-
son titre (une chaîne de caractère) ;
-
son auteur ;
-
son numéro ISBN (une chaîne de caractère) ;
-
son prix en euros (un nombre réel).
Ecrire une classe
Book dont les attributs
sont tout ce qui caractérise un livre.
Dans la classe
Book, mettre un constructeur
public Book(String title, String author, String isbn, double price)
servant à initialiser les attributs des instances de
la classe
Book (les arguments du
constructeur sont respectivement le titre,
les auteurs, l'ISBN et le prix).
Comment faire pour construire un objet livre
(une instance de la classe
Book) ?
Exercice 3 - Comment afficher un livre ?
On aimerait pouvoir afficher les caractéristiques d'un
livre, par le code Java suivant :
Book book=...
System.out.println(book);
Java sait faire cela, à condition de mettre dans la classe
Book une méthode
public String toString()
retournant une chaîne de caractères, qu'on construit typiquement
à partir des attributs de l'objet.
Ecrire cette méthode, pour obtenir par exemple l'affichage suivant :
Title : Concepts fondamentaux de l'informatique
Author : Alfred Aho
ISBN : 2-7117-8689-7
Price : 40.0
Exercice 4 - minmax
On souhaite écrire un programme qui prend un tableaux d'entiers
en paramètre et qui renvoie le minimum ET le maximum de se tableau.
Si le tableau n'a pas d'élement les valeurs devront être
Integer.MIN_VALUE et Integer.MAX_VALUE
-
Comment faire pour renvoyer plusieurs valeurs ?
-
Pourquoi le champs peuvent être marqué par le mot-clé final ?
Quelle est l'intérêt de ce mot-clé ?
-
Ecrire le code de la méthode minmax.
-
Comment faire si l'on veut que la méthode minmax
marche aussi avec un tableaux de valeurs flottantes ?
Exercice 5 - Plaque d'immatriculation
On veut modéliser des numéros de plaques d'immatriculation
en séparant le code du département des autres informations.
Pour tous les exercices suivants même si ce n'est pas
explicitement demandé il vous faudra tester à chaque fois le
code que vous écrivez en écrivant un
main
soit dans la classe courante soit dans une autre classe.
-
Écrire une classe
NumberPlate
contenant 2 champs
stateCode
et
serial
représentant respectivement le code du département
(penser aux codes 2A et 2B pour la Corse) et la séquence
de chiffres et de lettres qui le précède.
-
Écrire le constructeur prenant en paramètres les valeurs
des champs précédents, ainsi que les méthodes
getSerial()
et
getStateCode()
.
-
Écrire la méthode
toString()
.
A quoi sert l'annotation
@Override
? Doit-on l'utiliser dans ce cas ?
-
Écrire un autre constructeur prenant en paramètres une
chaîne de caractères contenant l'immatriculation
entière, et qui en extrait le code du département et le
numéro de série pour initialiser les champs de l'objet.
On supposera que le numéro de département est toujours
composé des deux derniers caractères de
l'immatriculation entière.
Pour vous aidez, vous pouvez regarder, dans la
documentation, la classe
java.lang.String
.
Exercice 6 - Glissons
On souhaite écrire un programme qui permet à un utilisateur de
définir des transparents contenant du texte, de les ordonnées pour
en faire un diaporama et de chosir des transitions
entre deux transparents.
-
Quels sont les objets métiers de ce programme ?
-
Ecrire le code de la classe Slide.
-
On va supposer qu'il n'y a pas de transition pour l'instant,
mais uniquement des transparents.
Ecrire le code de la classe Diaporama permetannt
d'ajouter ou de retirer des transparents.
Pour stocker les transparents vous utiliserez en interne
un objet de la classe java.util.ArrayList.
-
Ecrire un main dans une classe Main
permettant de tester votre code.
Pour la suite de l'exercice, vous modifirez le code de ce
main pour tester vos implantations.
-
Ecrire la méthode toString sur la classe Diaporama
qui permet d'afficher l'ensemble des transparents.
Pensez à utiliser la délégation !
-
Ecrire une méthode before dans Diaporama
qui permet de renvoyer le transparent précédent un transparent particulier.
Que doit-on faire si l'on demande le transparent
avant le premier transparent ?
Implanter la solution retenue.
-
Ecrire une méthode getSildeAt qui prend un index
(à partir de zéro) en paramétre et renvoie le slide à la position
demandé.
-
On souhaite écrire une méthode swap qui permet d'échanger
deux transparents.
Quelle est le prototype d'une telle méthode ?
Ecrire le code de cette méthode.
-
Comment faire si l'on veux implanter la méthode before
dans la classe Slide ?
-
Sachant qu'un slide ne peut appartenir à plus d'une présentation,
expliquer pourquoi il est possible de changer la signature
de la méthode before.
Implanter les changements proposés.
-
On souhaite avoir une méthode createSlide dans la classe
Diaporama et empécher l'utilisateur de créer
des transparents autrement qu'en passant par cette méthode.
Comment faire ?
Ecrire le code corrrespondant.
-
On souhaite enfin que chaque transparent ait une méthode
getIndex() qui renvoie sa position (à partir de zéro).
Faire les changements qui s'impose (Partout !).
Noter que le code utilisateur, celui du main,
ne change pas.
© Université de Marne-la-Vallée