12
Fiche Exercices POO- JAVA UEO55.1 Licence MI 2011-2012 TD : Compilation d’exercices et d’extraits d’examens 1. Classes et visibilité a. Parmi les appels suivant indiquez ceux qui sont corrects et ceux qui ne le sont pas public class A { public int i ; private int a; protected int b; public void afficher() { System.out.println(i+a+b); } } public class B extends A { public void afficher() { System.out.println(i+a+b); } } public class D { Public A a = new A(); Public void afficher() { System.out.println(a.i + a.a + a.b); } } public class E { Public B b = new B(); Public void afficher() { b.afficher();} } public class F { Public B b = new B(); Public void afficher() { System.out.println(b.i + b.a + b.b) } } 2. Relations entre classes 1. Définir les relations entre les classes suivantes a. Personne, homme, femme, enfant b. Animal, chien, chat, ravet, dalmatien, domestique, sauvage, racoon, ours, comestible 2. Généraliser a. Bateau, voiture, avion b. Souris, clavier, écran 3. Spécialiser a. Ordinateur, … D’après le code suivant, donnez le diagramme de classe (classes et relations). Public class A {public B b ;} Public class B { public C c; public B(C c) {this.c = new C(c);}} Public class C { public int I, j; public C(C c) { this.i = C.i; this.j = C.j ;} }

LMI - POO - TD1 - Exercices Et Questions d'Examen

Embed Size (px)

DESCRIPTION

LMI - POO - TD1 - Exercices Et Questions d'Examen

Citation preview

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    TD : Compilation dexercices et dextraits dexamens

    1. Classes et visibilit

    a. Parmi les appels suivant indiquez ceux qui sont corrects et ceux qui ne le sont pas

    public class A {

    public int i ;

    private int a;

    protected int b;

    public void afficher() { System.out.println(i+a+b); }

    }

    public class B extends A {

    public void afficher() { System.out.println(i+a+b); }

    }

    public class D {

    Public A a = new A();

    Public void afficher() { System.out.println(a.i + a.a + a.b); }

    }

    public class E {

    Public B b = new B();

    Public void afficher() { b.afficher();}

    }

    public class F {

    Public B b = new B();

    Public void afficher() { System.out.println(b.i + b.a + b.b) }

    }

    2. Relations entre classes

    1. Dfinir les relations entre les classes suivantes

    a. Personne, homme, femme, enfant

    b. Animal, chien, chat, ravet, dalmatien, domestique, sauvage, racoon, ours, comestible

    2. Gnraliser

    a. Bateau, voiture, avion

    b. Souris, clavier, cran

    3. Spcialiser

    a. Ordinateur,

    Daprs le code suivant, donnez le diagramme de classe (classes et relations).

    Public class A {public B b ;}

    Public class B { public C c; public B(C c) {this.c = new C(c);}}

    Public class C { public int I, j; public C(C c) { this.i = C.i; this.j = C.j ;} }

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    Public class D { void test() {B b =new B(); A a = new A(b); A a2 = new A(b); }

    3. Analyse de code 2009 (4 points)

    public class Parent {

    int x;

    Parent(int k) {x=k;}

    int ajoute(int a) { return x+a; }

    public void moi() { System.out.println(" x = "+ x); }

    }

    public class Enfant1 extends Parent {

    int y;

    Enfant1 (int k, int l) { super(k); y=l; }

    int ajoute(int a) { return x+2*a;}

    }

    public class Enfant2 extends Enfant1 {

    int z ;

    Enfant2 (int k, int l, int m) { super(k, l); z= m; }

    int ajoute(int a) { return x+3*a;}

    public void moi() {

    super.moi();

    System.out.println(" z = "+ z);

    }

    }

    public class Essai{

    public static void main (String args[]) {

    int a =2;

    Parent p = new Parent(3);

    p.moi();

    System.out.println(" ajoute("+ a +") = "+ p.ajoute(a) );

    Enfant1 e1 = new Enfant1(3, 4);

    e1.moi();

    System.out.println(" ajoute("+ a +") = "+ e1.ajoute(a) );

    e1 = new Enfant2(3, 4, 5);

    e1.moi();

    System.out.println(" ajoute("+ a +") = "+ e1.ajoute(a) );

    }

    }

    1. Quels sont les attributs dont disposent les classes Enfant1 et Enfant2 ? 2. Ecrivez le rsultat de l'excution de la classe Essai.

    4. Cours 2010 (5 points)

    Quelle est la diffrence entre une classe et un objet ?

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    En quoi lhritage est-il un outil puissant pour le dveloppement dapplications ?

    Quelle est la diffrence entre o Point p[][] = new Point[5][4] ; o Point p = new Point(5,4) ;

    5. Gnricit et figures 2010 (4 points)

    On souhaite donner la possibilit duniformiser les sommets dun polygone en forant ceux-ci tre

    des pointNomm ou des pointPondr, Pour cela on utilise une version gnrique de la classe

    polygone. Les sommets sont stocks dans une liste chane et le paramtre gnrique doit garantir

    que les sommets soient des points.

    1. Ecrivez lentte de la classe polygone gnrique 2. Ecrivez la dclaration de la liste chane 3. Ecrivez le constructeur de la classe polygone 4. Ecrivez la mthode getPoints() qui renvoie la liste de points

    6. Clonage et liste chane 2010(5 points)

    Soit A une classe implmentant linterface Cloneable, et B une classe

    nimplmentant pas linterface Cloneable, le code suivant est extrait de la

    mthode main de la classe test

    LinkedList Liste = new LinkedList ();

    Liste.add(new A());

    Liste.add(new B());

    LinkedList Liste2 = (LinkedList) Liste.clone();

    1. Sachant que ce code ne renvoie pas derreur ni la compilation ni lexcution, expliquez

    sont fonctionnement et ltat de la mmoire. 2. Comment sappelle le clonage ralis par la classe LinkedList ? 3. Si on voulait raliser lautre type de clonage sur les LinkedList, quelle condition serait

    ncessaire sur les objets passs la liste ? 4. Comment sappelle le (LinkedList) devant Liste.clone() et pourquoi est-ce

    ncessaire dans le cas de la method clone().

    7. Les poupes russes 2010(7 points)

    On veut modliser le fonctionnement dun ensemble de poupes russes. Une poupe russe est une

    sorte de bote. Il en existe de diffrentes tailles et on peut placer une poupe dans une autre plus

    grande ds lors que la plus petite est ferme et la plus grande ouverte.

    1. Quels sont les caractristiques qui dfinissent une poupe russe ou son tat ? 2. Ecrire la classe PoupeeRusse contenant les mthodes suivantes

    a. Constructeur

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    b. Public void ouvrir() : ouvre la poupe si elle nest pas dj ouverte et si elle ne se trouve pas lintrieur dune autre poupe

    c. Public void fermer() : ferme la poupe si elle nest pas dj ferme et si elle ne se trouve pas lintrieur dune autre poupe

    d. Public void placerDans(PoupeeRusse p) : place la poupe courante dans la poupe p si elle nest pas dj dans une autre et si la poupe p ne contient aucune autre poupe et si la poupe courante est ferme et la poupe p est ouverte et plus grande

    e. Public void sortirDe(PoupeeRusse p) : sort la poupe courante de la poupe p si elle est dans p et si p est ouverte

    Vous devez ajouter les attributs dont vous avez besoin.

    8. Les poupes russes 2 2010(6 points)

    On souhaite modliser nouveau le fonctionnement des poupes russes mais cette fois ci laide

    dune structure de donnes.

    Pour cela on dfinit la classe ListeDePoupees qui hrite de la version gnrique de la classe

    LinkedList. Le paramtre gnrique de la classe ListeDePoupees doit tre dfini de manire

    nautoriser que des poupes Russes tre ajoutes la liste.

    Lobjectif est de modifier la mthode add() de la classe LinkedList de manire raliser les tests

    ncessaires avant lajout.

    1. Donner lentte de la classe ListeDePoupees 2. Donner le code et lentte de la mthode add() de la classe ListeDePoupees qui permet

    dajouter en fin de liste la poupe passe en paramtre si les conditions suivantes sont respectes : la dernire poupe de la liste est ferme et a une taille infrieure la poupe passe en paramtre, la poupe passe en paramtre est ouverte et vide. (on considre la classe PoupeeRusse dj code et possdant les mthodes ncessaires son utilisation).

    3. Si on souhaite garantir quune poupe nest pas prsente dans plusieurs listes de poupes (relation dagrgation), comment peut-on procder ?

    9. Cours 2009 (4 points)

    1. Comment crer une constante partage par toutes les instances dune mme classe ? 2. Expliquez chacun des termes de la dclaration de la mthode main

    public static void main(String[] args)

    10. Les figures composes 2009 (6 points)

    On souhaite ajouter la notion de figure compose. Comme son nom lindique, une figure compose

    est une figure compose dautres figures.

    Par exemple, la figure suivante est compose de 3 cercles et dun rectangle (mme si le rectangle na

    pas t dfini en TD, il peut tre considr comme un polygone).

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    Quelle est la place de la classe FigureCompose dans la hirarchie des Figures ?

    Indiquez ses attributs en utilisant les structures de donnes vues en cours.

    Dtaillez la fonction daffichage de ce nouveau Type de figure.

    11. Les exceptions 2009 (5 points)

    1. Dfinir une exception ExceptionNegatif. Cette classe aura simplement un attribut entier valeur et un constructeur avec un paramtre entier (correspondant valeur).

    2. Ecrire le code permettant de lever lexception dans une mthode appele factoriel si le paramtre pass la mthode est ngatif.

    3. Ecrire le code permettant de rcuprer lexception et dafficher la valeur (ngative) ayant conduit sa leve. On considre que la mthode factoriel se trouve dans la classe Calcul.

    12. Cours 2008 (5 points)

    Citez et expliquez les diffrentes relations existant entre deux classes.

    Expliquez la notion de polymorphisme

    Quest-ce que la srialisation. Donnez les diffrentes tapes pour la mettre en uvre.

    13. Analyse de code 2008 (4 points)

    Indiquez si le code suivant est correct ou non. Sil ne lest pas proposez une correction.

    A.java B.java

    public class A { public class B extends A{

    public int i ; public int k ;

    private int j; void afficher() {

    void afficher(){ System.out.println(i+ j+k);}

    System.out.println(i+ j) ; } }

    public int getI() { return i;}

    public int getJ() { return j;}

    public void setI(int i) {this.i=i;}

    public void setJ(int j) {this.j=j;}

    }

    Test.java

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    public class Test {

    public void main(String[] args) {

    A a = new A();

    a.i = 1;

    a.j = 2;

    a.afficher();

    a = new B();

    a.i = 3;

    a.j = 4;

    a.k = 5;

    a.afficher();

    }

    }

    14. Singleton 2008 (6 points)

    Soit le code suivant

    public class Singleton { static final private Singleton INSTANCE=new Singleton();

    // Autres attributs private Singleton() { };

    public static Singleton getInstance() {return INSTANCE;}

    // Autres mthodes }

    Que se passe t il la compilation si on fait lappel suivant lextrieur de la classe Singleton :

    Singleton S = new Singleton() ; ?

    Daprs vous pourquoi le constructeur de la classe est il priv ?

    Combien dinstances diffrentes de Singleton peut-il y avoir en tout dans le programme ?

    15. Segments et exceptions 2008 (5 points)

    On veut protger la classe Segment pour viter que les deux points ne soient confondus (Segment

    rduit un point). Pour cela on dfinit une exception : PointsConfondusException.

    1. Ecrire la classe PointsConfondusException

    2. Ecrire un constructeur de la classe segment qui lve une exception si les points passs en paramtre

    sont confondus.

    3. Ecrire la mthode setP1 qui modifie le point P1

    4. Ecrire lappel au constructeur de Segment (dclaration et instanciation dun objet de type

    Segment).

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    16. Cours 2007 (5 points)

    Expliquez les deux types de clonage que vous connaissez

    Expliquez la notion de polymorphisme

    17. Complment sur les figures 2007 (10 points)

    On souhaite ajouter la possibilit de transfrer des figures sur le rseau

    1. Indiquez les diffrentes tapes pour raliser ce transfert (classes modifier, classes crer (ventuellement), objets crer pour le transfert.

    2. On souhaite ajouter la notion de figure complexe (compose de plusieurs figures de base). En utilisant les structures de donnes et la hirarchie des figures vue en TD, indiquez

    comment et o vous voulez y insrer la classe FigureComplexe. Listez les attributs et les

    mthodes de cette classe. Donnez le code des principales mthodes.

    18. Analyse de code 2007 (5 points)

    Soit le code Java suivant:

    Public PolygoneSegment(Point[] t)

    {

    segments = new Segment[t.length];

    for (int i=0; i

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    Ce bouton est associ une figure qui sera dfinie lors de son instanciation.

    On suppose dfinie dans la classe figure une mthode saisie() qui affiche une interface graphique

    permettant la saisie des attributs de la figure.

    Lorsque lon clique sur le bouton celui-ci demande la saisie des attributs de la figure, puis demande

    un raffichage du composant.

    1. Rappelez le type dvnement gnr lors du clic sur un bouton. 2. Ecrivez la dclaration de ce nouveau type de composant (entte de la classe et attributs). 3. Ecrivez le constructeur de la classe. 4. Ecrivez la mthode appele lors du clic sur le composant. 5. Quelle mthode est appele lors de laffichage du composant ? Quel est le paramtre pass

    cette mthode et quoi sert-il ? 6. Illustrez lutilisation de ce type de composant (instanciation et ajout dans un JFrame par

    exemple).

    21. Extraction dune liste de points 2011 (5 points)

    On souhaite crer une liste de points partir de toutes les figures cres laide de lditeur de

    figure.

    1. On ajoute une mthode getPoints() dans chaque figure qui renvoie la liste des points de cette figure. Codez cette mthode pour les classes Point, Segment, Polygone et Cercle

    2. Codez la mthode createListe() prenant en paramtre une liste de Figure et permettant de construire la liste des Points

    22. SauveQuiPeut 2011 (5 points)

    On souhaite coder de deux manires la mthode SauveQuiPeut dont lentte est : public void

    SauveQuiPeut(Collection Col, ObjectOutputStream Out) { } et qui permet de sauver tous les

    objets serialisables de Col dans le flux Out.

    1. Coder cette mthode en utilisant instanceOf 2. Coder cette mthode en utilisant les exceptions

    23. Les exceptions 2010 (6 points)

    On suppose dfinie une liste de figures : LinkedList figures ;

    On souhaite afficher la liste des noms des figures. Certaines figures possdent un nom

    (cercleNomm, polygoneNomm, ) et dautres pas (point, ). Les figures possdant un nom

    implmentent linterface Nomme qui possde une mthode public void String getNom().

    1. En utilisant instance of, coder la mthode public String Noms() qui concatne les noms de toutes les figures qui en possde un.

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    2. En utilisant les exceptions (et sans utiliser instance of), coder la mme mthode. On rappelle que lorsquun appel est fait sur une mthode qui nest pas prsente dans une classe, lexception NoSuchMethodException est leve.

    24. Les interfaces graphiques 2010 (5 points)

    1. Expliquer brivement le fonctionnement de linteraction entre un utilisateur et une interface graphique en java.

    2. On souhaite coder dans un unique fichier une interface graphique possdant un bouton appel inverse qui affiche alternativement Bonjour et Au revoir dans un Jlabel (pour changer le texte du Jlabel on utilise la mthode setText() prenant en paramtre une chane de caractre).

    25. Les structures de donnes 2010 (6 points)

    1. Coder une mthode prenant en paramtre : une structure de donne ne pouvant contenir que des Figures et une Figure F. La mthode renvoie le nombre de Figures de mme type que F contenues dans la structure. La mthode getClass() est prsente dans toutes les classes java et renvoie la classe de lobjet appelant la mthode (exemple : Integer I ; I.getClass() renvoie Integer).

    2. On souhaite stocker les Figures dans une liste trie (sortedSet). Quelle interface doivent implmenter les figures pour que cela puisse fonctionner ?

    3. On suppose code la mthode getPoids() qui renvoie le poids de la figure (nombre de points de celle-ci par exemple). Coder la mthode prsente dans linterface prcdente et permettant de faire la comparaison entre deux figure en utilisant le poids.

    26. La srialisation 2010 (3 points)

    1. Expliquer le fonctionnement de la srialisation. 2. Indiquer le contenu du fichier (en expliquant) aprs les oprations suivantes

    a. Point P= new Point(1,2) ; b. Ouverture dun accs un fichier F c. Srialisation de P dans le fichier F d. P.translater(1,1) e. Srialisation de P dans le fichier F f. Fermeture du fichier F

    27. Rseau 2009 (7 points)

    On cherche produire un diteur de figures coopratif. Chaque intervenant est donc sur sa propre

    machine et dite des figures sur un dessin global partag.

    On suppose que lon a une architecture client/serveur (une application serveur et n applications

    clientes).

    1. On ne veut pas que les figures soient prsentes en double dans notre collection. Quelle structure de donnes faut-il utiliser ?

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    2. Le serveur possde une liste des clients connects, donner la dclaration et linstanciation de cette structure de donnes.

    3. Initialisation a. Le serveur cr et initialise une collection ( dfinir) de figures puis attend les

    demandes de connexion des clients. b. Lapplication cliente tablit une connexion avec le serveur. c. Donner le code correspondant chacune de ces tapes.

    4. Echange des donnes a. Le serveur lit les figures ajoutes par chacun des clients puis constitue un nouvel

    ensemble quil envoie vers chacun des clients. b. Le client envoie sa propre liste de figures vers le serveur puis rcupre la liste

    complte depuis le serveur et laffiche. c. Donner le code correspondant chacune de ces tapes

    28. Thread 2009 (5 points)

    On considre que plusieurs threads peuvent ajouter des figures dans une mme liste appele

    listeFig. Pour cela ils utilisent la mthode public void add(Figure f).

    1. Donner la dclaration et linstanciation de listFig. 2. Donner le code de la mthode add() 3. Comment peut-on viter quil y ait des conflits entre les diffrents threads lors de lajout des

    figures dans la liste ? 4. On ajoute un thread donc la fonction est de parcourir la liste des figures et de supprimer les

    figures trop proches. Coder la mthode filtrer() qui filtre la liste et renvoie le nombre dlments supprims.

    29. Figure rcursive 2009 (5 points)

    On souhaite dfinir la notion de figure rcursive (type fractale). Une figure rcursive est dfinie par

    un ensemble de figures et un nombre de rptitions (nb). On affiche une figure rcursive en affichant

    les figures qui la composent diffrents niveau de rsolution (nb). On considre pour cela que lon

    dispose dune mthode rduction() qui prend en paramtre une figure et renvoie sa rduction un

    niveau de rsolution juste infrieur.

    1. Donner la place de la classe figureRecursive dans la hirarchie des figures. 2. Donner la dclaration des attributs de cette classe. 3. Donner le code de la mthode public void paint(Graphics g) de cette classe qui affiche la

    figure rcursive sur les nb niveaux.

    30. Base de documents (20 points)

    On sintresse au systme dinformation dune mdiathque dans lequel un ensemble de documents

    est rpertori : des livres, films, ou disques. Ces documents peuvent tre emprunts par les clients

    de la

    Mdiathque.

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    Les documents sont tous caractriss par un titre et un auteur. Du point de vue programmation, un

    document est caractris par linterface ci-dessous :

    import Auteur;

    public interface Document {

    /** @return lauteur de ce document */

    public Auteur getAuteur();

    /** @return le titre de ce document */

    public String getTitre();

    /** @return une chane de caractres reprsentant ce document */

    public String toString();

    /** @param lobjet tester

    * @return true si le paramtre est un document identique this */

    public boolean equals(Object o);

    /** indique si le document est emprunte ou non

    * @return true ssi le document est emprunt

    */

    public boolean estEmprunte();

    /** permet de marquer comme emprunt ou non un document

    * @param b true si le document est emprunt, false si il est disponible

    */

    public boolean setEmprunte(boolean b);

    }

    1. (3 points) La classe Auteur permet de reprsenter les auteurs des documents. Un auteur est

    dfini par son nom, de type chane de caractres, ses dates de naissance et de dcs de type Date.

    La valeur de la date de dcs est null si lauteur est encore vivant. On veut pouvoir accder aux

    diffrentes informations sur un auteur et tester si deux objets auteurs sont gaux (mmes nom et

    dates de naissance/dcs).

    La classe Date est dfinie en annexe.

    Donnez un code java complet pour la classe Auteur.

    2. (2 points) Le type Mois est une numration. Quest-ce que cela signifie ? Dfinir le type Mois.

  • Fiche Exercices POO- JAVA UEO55.1 Licence MI

    2011-2012

    3. (5 points) Dfinir une classe BaseDocumentaire comportant une liste de Documents (utiliser la

    version gnrique des listes). Cette classe permet de rechercher des documents dans la liste par leur

    titre ou leur auteur (mthode recherche), permettant de connatre les documents emprunts ou non

    emprunts (mthodes rechercheEmprunte et rechercheNonEmprunte).

    Coder chacune des mthodes (penser au type de donne renvoy par les mthodes).

    4. (5 points) On souhaite que les mthodes de recherche renvoient une exception

    (NoDocumentFoundException) la place de null. Expliquer les tapes ncessaires pour procder de

    cette manire. Modifier une des mthodes de recherche en consquence.

    Que doit faire lutilisateur de ces mthodes ?

    Ecrire le code correspondant.

    5. (5 points) On veut dfinir plusieurs types de documents (livre, vido (avec ou sans sous titres),

    enregistrement audio, photo, ). Dfinir le diagramme de ces classes.

    Ces documents peuvent tre lus, regards ou couts. Comment dfinir ces proprits sans utiliser

    dattributs ? Complter le daigramme.

    Annexe : dfinition UML de la classe Date

    Date

    - jour : int

    - mois : Mois

    - annee : int

    + Date(j : int, mois : Mois, annee : int)

    + toString() : String

    + equals(o : Object) : boolean

    + getJour() : int

    + getMois() : Mois

    + getAnnee() : int

    + compareTo(o : Object):int

    + differenceEnJours(d : Date):int

    + static aujourdhui():Date