:: Enseignements :: Master :: M1 :: 2008-2009 :: Stage Java ::
[LOGO]

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;
     }
  
  1. 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).
  2. 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

  1. Comment faire pour renvoyer plusieurs valeurs ?
  2. Pourquoi le champs peuvent être marqué par le mot-clé final ?
    Quelle est l'intérêt de ce mot-clé ?
  3. Ecrire le code de la méthode minmax.
  4. 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.

  1. É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.
  2. Écrire le constructeur prenant en paramètres les valeurs des champs précédents, ainsi que les méthodes getSerial() et getStateCode() .
  3. Écrire la méthode toString() .
    A quoi sert l'annotation @Override ? Doit-on l'utiliser dans ce cas ?
  4. É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.

  1. Quels sont les objets métiers de ce programme ?
  2. Ecrire le code de la classe Slide.
  3. 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.
  4. 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.
  5. Ecrire la méthode toString sur la classe Diaporama qui permet d'afficher l'ensemble des transparents.
    Pensez à utiliser la délégation !
  6. 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.
  7. Ecrire une méthode getSildeAt qui prend un index (à partir de zéro) en paramétre et renvoie le slide à la position demandé.
  8. 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.
  9. Comment faire si l'on veux implanter la méthode before dans la classe Slide ?
  10. 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.
  11. 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.
  12. 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.