Vous êtes sur la page 1sur 12

Fiche Exercices POO- JAVA UEO55.

Licence MI

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()
}
public class B extends A {
public void afficher()
}
public class D {
Public A a = new A();
Public void afficher()
}
public class E {
Public B b = new B();
Public void afficher()
}
public class F {
Public B b = new B();
Public void afficher()
}

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

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

{ b.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 ;} }
2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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 ?

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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.
2.
3.
4.

Ecrivez lentte de la classe polygone gnrique


Ecrivez la dclaration de la liste chane
Ecrivez le constructeur de la classe polygone
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

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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).

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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).

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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<segments.length; i++)
{
segments[i]

new

Segment(t[i],

t[(i+1)

t.length]);

}
}
Commentez le plus prcisment possible le code (type de mthode, type des variables,
fonctionnement, rle des appels de fonction, ).
Indiquez comment doit tre dclar lobjet segments .

19. Cours 2011(4 points)


1. Expliquez la notion dException en java (fonctionnement, dclaration, ).
2. Quest-ce quune classe anonyme ?

20. Interfaces graphiques 2011 (6 points)


On souhaite dfinir un nouveau composant qui se comporterait comme un bouton mais qui serait
autonome du point de vue des traitements effectuer en cas dactionnement de celui-ci.

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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.
2.
3.
4.
5.

Rappelez le type dvnement gnr lors du clic sur un bouton.


Ecrivez la dclaration de ce nouveau type de composant (entte de la classe et attributs).
Ecrivez le constructeur de la classe.
Ecrivez la mthode appele lors du clic sur le composant.
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<Figure> 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.

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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 ?

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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.

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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.

2011-2012

Fiche Exercices POO- JAVA UEO55.1

Licence MI

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

2011-2012