0% ont trouvé ce document utile (0 vote)
105 vues128 pages

QCM de Programmation Java 2004

Transféré par

el brahmi chafik
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
105 vues128 pages

QCM de Programmation Java 2004

Transféré par

el brahmi chafik
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Paris 7 – Licence d’informatique – 1er décembre 2004

Durée 45 minutes, documents manuscrits autorisés, ouvrages et ordinateurs portables interdits

Nom:
Programmation I
Test de mi-parcours, Version: A Carte d’étudiant:

Pour chaque question encerclez la bonne réponse ; si le temps permet, remplissez la table
Question générale 1 2 3 4 5 6 Question spécifique 1 2 3 4 5
Réponse Réponse
Section 1. Questions générales bonne réponse=1pt ; mauvaise réponse=-0.5pt ; pas de réponse=0pt.

Bonne réponse=1pt ; mauvaise réponse=-0.5pt ; pas de réponse=0pt.


1. Lequel de ces langages n’est pas orienté objet
(a) Java
(b) Simula
(c) C
(d) C++
2. class B {
private int x ; private float y ;
public void setX( int x) {this.x=x ; }
public void setY( float y) {this.y=y ; }
}
Le code ci-dessus est une illustration
(a) de l’encapsulation
(b) de la cryptographie
(c) du polymorphisme
(d) de l’héritage
3. Toutes les classes de Java héritent de
(a) la classe Base
(b) l’interface Cloneable
(c) la classe Object
(d) la classe Class
4. Le passage de paramètres en Java est effectué par
(a) variable
(b) référence
(c) valeur
(d) nom
5. Un objet traite un message reçu
(a) en implémentant une interface
(b) en exécutant un constructeur
(c) en exécutant une méthode statique
(d) en exécutant une méthode d’instance
6. La fonction principale de la JVM consiste à
(a) compiler le code Java
(b) interpréter le bytecode
(c) virtualiser les appels système
(d) fournir la console Java

1
Section 2. Questions spécifiques bonne réponse=3pt ; mauvaise réponse=-1pt ; pas de réponse=0pt

1. Pour les classes Oeuf et Poule définies comme suit :


class Oeuf { class Poule extends Oeuf {
public int x ; public Poule() {}
public Oeuf() {x=5 ; } public Poule(int i){this() ; x=x*i ; }
public Oeuf(int y) {x=y ; } public Poule(String s){super(33) ; x- - ; }
} }
qu’affichera le code suivant ?
Poule b1=new Poule(”2004”) ; Poule b2 =new Poule(2004) ; Poule b3= new Poule() ;
[Link](b1.x + ” et ” + b2.x + ” et encore ” + b3.x ) ;

(a) 32 et 10020 et encore 5


(b) 32 et 0 et encore 0
(c) -1 et 2004 et encore 5
(d) autre chose (laquelle ?)
2. Pour la classe D définie comme suit :
class D {
public static int x ;
public int y ;
public static travailler() {x++ ;}
public D() {x++ ; y- - ; }
}
qu’affichera le code suivant ?
[Link]() ; D a=new D() ; D b=new D() ; [Link]() ;
[Link](b.x + ” et ” + b.y) ;

(a) 2 et -1
(b) ce code ne se compile pas
(c) 4 et -2
(d) 4 et -1
3. Combien d’instances de la classe A sont créées pendant l’exécution du code suivant ? Combien
en reste après le passage du Garbage collector ?
A u,b,c ;
A a=new A() ;
b=new A() ; c=b ;
a=b ;

(a) 5 ;2
(b) 2 ;2
(c) 2 ;1
(d) 3 ;3
4. Pour les classes A et B définies comme suit :
class A { class B extends A {
public int f(int x) {return(x+1) } ; public int f(int x) {return(x+2) } ;
public static int g(int x) {return (6) ; } public static int g( int x) {return (x+4) ; }
} }
qu’affichera le code suivant ?
B b=new B() ; A a =b ;
[Link](a.f(2)*a.g(3)) ;

(a) 18
(b) 21
(c) 24
(d) 28
5. Étant donné que la classe Sardine étend la classe Poisson, trouvez une ligne qui passe bien
la compilation mais produit une erreur à l’exécution parmi les suivantes
(a) Poisson y =new Poisson() ; Sardine x= (Sardine)y ; Poisson z=x ;
(b) Sardine y =new Sardine() ; Poisson x= y ; Sardine z=(Sardine)x ;
(c) Poisson y =new Sardine() ; Object x= y ; Sardine z=x ;
(d) Poisson y =new Poisson() ; Sardine z= new Sardine() ; y=z ;

2
QCM de Java corrigé
1. Java est un langage
(a) Compilé
(b) Interprété
(c) Compilé et interprété
(d) Ni compilé ni interprété
Le compilateur compile le code source vers un bytecode, la machine virtuelle Java
(JVM) interprète ce bytecode
2. Java est un langage développé par
(a) Hewlett-Packard
(b) Sun Microsystems
(c) Microsoft
(d) Oracle
Par James Gosling chez Sun.
3. Combien d’instances de la classe A crée le code suivant?
A x,u,v;
x=new A();
A y=x;
A z=new A();

(a) Aucune
(b) Cinq
(c) Trois
(d) Deux
Il y a deux instances de A créées par les deux new, la première est référencée par x
et y, la deuxième par z.
4. Pour la classe B définie comme suit:
class B {
public B(){[Link](”Ciao”);};
public B(int i) {this(); [Link](”Bonjour ”+i);};
}

qu’affichera l’instruction suivante?


B monB=new B(2003);

(a) erreur de compilation


(b) erreur d’exécution
(c) CiaoBonjour 2003
(d) Bonjour 2003
L’instruction invoque le constructeur avec un argument entier (2003). Ce dernier
appelle explicitement le constructeur sans arguments (this()) qui imprime ”Ciao”,
et ensuite le message ”Bonjour 2003” est imprimé.

1
5.
(a) Une classe peut implémenter plusieurs interfaces mais doit étendre une seule classe
(b) Une classe peut implémenter plusieurs classes mais doit étendre une seule interface
(c) Une classe peut implémenter plusieurs classes et peut étendre plusieurs interfaces
(d) Une classe doit implémenter une seule interface et étendre une seule classe
C’est comme ça
6. La liaison tardive est essentielle pour assurer
(a) l’encapsulation
(b) le polymorphisme
(c) l’héritage
(d) la marginalisation
La marginalisation n’a rien à voir avec la programmation. La liaison tardive dy-
namique permet d’utiliser pour chaque objet sa propre version d’une méthode (en
fonction de la classe de l’objet déterminée à l’exécution). Ceci permet d’obtenir un
code polymorphe.

7. Étant donné que la classe Grande étend la classe Petite, trouvez une ligne correcte parmi les
suivantes
(a) Petite y =new Petite(); Grande x= (Grande)y; Petite z=x;
La deuxième affectation Grande x= (Grande)y; essaye de transformer un objet
(référencé par y) de la classe Petite vers un objet de sa sous-classe Grande. Un
tel downcasting est impossible.
(b) Grande x= new Grande(); Petite y = x; Grande z=(Grande)y;
Tout va bien. On crée un objet de classe Grande référencé par x. Ensuite on fait
une variable y (de type Petite) référencer le même objet – c’est un upcasting explicite
qui est toujours possible. À la fin on fait encore une référence z (cette fois Grande)
sur ce même objet. Ce dernier downcasting est possible parce que l’objet est en fait
une instance de la classe Grande.
(c) Grande x= new Grande(); Petite y = x; Grande z=y;
C’est presque comme dans le cas précédent, mais la dernière affectation Grande
z=(Grande)y; est un downcasting implicite, ce qui est interdit.
(d) Petite y =new Petite(); Grande x= (Grande)y; Petite z=(Petite)x;
Grande x=(Grande)y; est un downcasting impossible, comme dans le (a).

2
8. Pour la classe C définie comme suit:
class C {
public static int i;
public int j;
public C() {i++; j=i; }
}

qu’affichera le code suivant?


C x=new C(); C y=new C(); C z= x;
[Link](z.i + ” et ” + z.j);

(a) 2 et 2
(b) 1 et 1
(c) 2 et 1
(d) 1 et 3
On remarque d’abord, que i est une variable (statique) de classe commune à toutes
les instances, tandis que chaque objet de la classe a son propre j. Donc, après
la première affectation on a i=1, x.j=1; après la deuxième: i=2, y.j=2 (x.j a resté
inchangé et égal à 1); la troisième n’appelle pas le constructeur mais fait z référencer
le même objet que x. D’où z.i est la valeur globale de i, c-à-d 2, et z.j=x.j=1.
9. Pour les classes A et B définies comme suit:
class A { class B extends A {
public int x; public B() {x++;}
public A() {x=5; } public B(int i){this(); x=x+i; }
} public B(String s){super(); x- -; }
}

qu’affichera le code suivant?


B b1=new B(); B b2 =new B(2003); B b3= new B(”Bonjour”);
[Link](b1.x + ” et ” + b2.x + ” et encore ” + b3.x );

(a) 6 et 2009 et encore 4


(b) 1 et 2004 et encore 4
(c) 1 et 2004 et encore 2003
(d) autre chose
Le constructeur B() n’appelle explicitement ni this(), ni super(). Donc, par con-
vention, le constructeur de la super-classe A est appelé (implicitement) avant de
procéder. Ceci donne b1.x=6. Le constructeur B(2003) appelle le constructeur
précédent avec le this(), ce qui donne b2.x=6. Ensuite on y ajoute 2003, ce qui
donne finalement b2.x=2009 Le constructeur B(”Bonjour”) appelle le constructeur
de la super-classe A avec le super(). Ceci donne b3.x=5. Ensuite on le decrémente
et on a finalement b3.x=4.

3
10. Pour les classes Machin et Bidul définies comme suit:
class Machin { class Bidul extends Machin {
public int f() {return(5) }; public int f() {return(2) };
public static int g() {return (6);} public static int g() {return (4); }
} }

qu’affichera le code suivant?


Bidul b=new Bidul(); Machin m =b;
[Link](m.f()*m.g());

(a) 30
(b) 20
(c) 8
(d) 12
La methode g est statique, la version utilisée est déterminée par le compilateur en
fonction du type de la référence. Comme m est une référence Machin, m.g() - c’est
toujours la méthode g de la classe Machin (valeur 6). Pour f tout est différent: sa
version utilisée est déterminée dynamiquement (à l’execution)par la JVM en fonc-
tion du type de l’objet. Dans le cas de m.f(), m fait référence à une instance de Bidul,
c’est donc la version de f redéfinie dans la classe Bidul qui est invoquée (valeur 2).
D’où la réponse.

4
Corrigé du QCM de Programmation 1
Licence d’informatique

Le 01/12/2004

1 Questions générales
Barème : bonne réponse=1pt ; mauvaise réponse=-0.5pt ; pas de réponse=0pt.

1. class B {
private int x ; private float y ;
public void setX( int x) {this.x=x ; }
public void setY( float y) {this.y=y ; }
}
Le code ci-dessus est une illustration de l’encapsulation.
2. La fonction principale de la JVM consiste à interpréter le bytecode.
3. Lequel de ces langages n’est pas orienté objet : C. Par ailleurs, SIMULA est probablement
le premier langage OO, tandis que C++ est une extension objet de C.
4. Toutes les classes de Java héritent de Object.
5. Le passage de paramètres en Java est effectué par valeur, même si les variables objet sont
des références, et donc leur passage par valeur ressemble à un passage par référence.
6. Un objet traite un message reçu en exécutant une méthode d’instance, c’est juste une
terminologie différente pour dire la même chose

2 Questions spécifiques
Barème : bonne réponse=3pt ; mauvaise réponse=-1pt ; pas de réponse=0pt
7. Combien d’instances de la classe A sont créées pendant l’exécution du code suivant ? Combien
en reste après le passage du Garbage collector ?
A u,b,c ;
A a=new A() ;
b=new A() ; c=b ;
a=b ;
Les deux instances référencées par a (1ère) et b (2ème) sont créées par les deux new. Ensuite
la variable a est réorientée sur la 2ème instance, en laissant la 1ère “orpheline”. Par la suite
l’instance “orpheline” sera nettoyée par le Garbage collector. D’où la réponse 2 ;1.
8. Étant donné que la classe Sardine étend la classe Poisson, trouvez une ligne qui passe bien
la compilation mais produit une erreur à l’exécution parmi les suivantes
– Poisson y =new Poisson() ; Sardine x= (Sardine)y ; Poisson z=x ;
Tout va bien pour le compilateur : une affectation sans transtypage, un downcasting expli-
cite, un upcasting implicite. Par contre, à l’execution la tentative de transtyper un simple
Poisson en Sardine donne une erreur. Donc la première ligne correspond à l’énoncé.
– Sardine y =new Sardine() ; Poisson x= y ; Sardine z=(Sardine)x ;
Tout va bien pour le compilateur : une affectation sans transtypage, un upcasting impli-
cite, un downcasting explicite. A l’execution le downcasting se passe bien, comme l’objet
référencé par x est en réalité Sardine. Pas d’erreur.
– Poisson y =new Sardine() ; Object x= y ; Sardine z=x ;
La dernière affectation est un downcasting implicite, ce qui est interdit et donne lieu à
une erreur à la compilation.
– Poisson y =new Poisson() ; Sardine z= new Sardine() ; y=z ;
Pas de downcasting - pas de problèmes.

1
9. Pour la classe D définie comme suit :
class D {
public static int x ;
public int y ;
public static travailler() {x++ ;}
public D() {x++ ; y- - ; }
}
qu’affichera le code suivant ?
[Link]() ; D a=new D() ; D b=new D() ; [Link]() ;
[Link](b.x + ” et ” + b.y) ;
x est ici une variable de classe, elle appartient à toute la classe D et l’écriture b.x signifie
D.x. Cette variable est initialisée a 0 au début incrémentée 4 fois (avec 2 appels de travailler
et 2 appels du constructeur), donc sa valeur finale est 4. Par contre, y est une variable
d’instance, chaque objet de la classe D contient son propre y. La variable b.y est initialisée
à 0 et tout de suite decrémentée par le constructeur. Sa valeur finale est -1. D’où la réponse
4 et -1 valant 3 points.
Il y une petite coquille dans cet exercice, j’ai oublié de mettre le type de retour void dans la
définition de la fonction travailler. Ceux qui ont choisi la réponse pédantique ce code ne se
compile pas ont 1 point.
10. Pour les classes Oeuf et Poule définies comme suit :
class Oeuf { class Poule extends Oeuf {
public int x ; public Poule() {}
public Oeuf() {x=5 ; } public Poule(int i){this() ; x=x*i ; }
public Oeuf(int y) {x=y ; } public Poule(String s){super(33) ; x- - ; }
} }
qu’affichera le code suivant ?
Poule b1=new Poule(”2004”) ; Poule b2 =new Poule(2004) ; Poule b3= new Poule() ;
[Link](b1.x + ” et ” + b2.x + ” et encore ” + b3.x ) ;
Pour obtenir la bonne réponse il suffit de ne pas oublier que le constructeur Poule() contient
un appel implicite de Oeuf(). Il faut aussi comprendre que Poule(int i) commence par un this()
qui signifie Poule(), et que Poule(int i) commence par un super(33) qui signifie Oeuf(33). En
tenant compte de toutes ces considérations on obtient la bonne réponse : 32 et 10020 et
encore 5.
11. Pour les classes A et B définies comme suit :
class A { class B extends A {
public int f(int x) {return(x+1) } ; public int f(int x) {return(x+2) } ;
public static int g(int x) {return (6) ; } public static int g( int x) {return (x+4) ; }
} }
qu’affichera le code suivant ?
B b=new B() ; A a =b ;
[Link](a.f(2)*a.g(3)) ;
La méthode d’instance f est définie dans la classe A et redéfinie dans B. Le choix de la version
utilisée s’effectue à l’exécution (liaison tardive) et dépend de la vraie classe de l’objet. Comme
la variable a réfère en réalité à un objet de classe B, la JVM utilisera “la f de B”. Pour la
méthode statique g tout est différent. Cette méthode est associée à une classe (et non à une
instance), sa version est choisie statiquement par le compilateur. Bref, a.g() signifie A.g(),
c-à-d “la g de A”. La bonne réponse sera donc 24

2
QCM de POO-2005 corrigé
Section 1. Questions générales bonne réponse=1pt ; mauvaise réponse=-0.5pt ; pas de réponse=0pt.

Bonne réponse=1pt ; mauvaise réponse=-0.5pt ; pas de réponse=0pt.


1. L’interprétation des programmes Java est effectuée par
(a) API
(b) JDK
(c) JVM
(d) AWT
La machine virtuelle Java (JVM) interprète le bytecode des programmes Java
2. Trouver la phrase qui n’est pas une caractérisation correcte de polymorphisme :
(a) le P. est un mécanisme consistant à rassembler les données et les méthodes au sein
d’une structure en cachant l’implémentation de l’objet.
(b) le P. signifie que la même opération peut se comporter différemment sur différentes
classes de la hiérarchie.
(c) le P. offre la possibilité à plusieurs objets de natures différentes d’exposer une inter-
face identique au système, et ainsi répondre à un même message d’une manière qui
leur est propre
(d) le P. consiste à autoriser le même code à être utilisé avec différents types, ce qui
permet des implémentations plus abstraites et générales.
La première phrase est en fait une définition de l’encapsulation, les trois autres
décrivent divers aspects du polymorphisme
3. Laquelle des opérations ci-dessus est interdite en Java ?
(a) le upcasting implicite
(b) le upcasting explicite
(c) le downcasting implicite
(d) le downcasting explicite
Le downcasting est une opération risquée et le programmeur doit la demander expli-
citement
4. Quelle classe n’a pas de classe mère ?
(a) Orpheline
(b) String
(c) Object
(d) une classe abstraite
La classe Object est l’ancêtre de toutes les autres classes.
5. Qu’est-ce qui est faux pour les interfaces ?
(a) Une I. peut être le type d’une référence
(b) Une I. déclare des méthodes sans les implémenter
(c) Une I. peut être implémentée
(d) Une I. peut être instanciée
L’instanciation est impossible pour les interfaces, tout le reste est autorisé.

1
Section 2. Questions spécifiques bonne réponse=3pt ; mauvaise réponse=-1pt ; pas de réponse=0pt

1. Pour les classes A et D définies comme suit :


class A { class D extends A {
public static int f(int x) {return(x+5) ; } ; public static int f(int x) {return(x+4) ; } ;
public int g(int x) {return (3) ; } public int g( int x) {return (x+8) ; }
} }
qu’affichera le code suivant ?
D d=new D() ; A a =d ;
[Link](a.f(2)*a.g(3)) ;

(a) 18
(b) 21
(c) 66
(d) 77
La méthode f() est statique, la variante utilisée est déterminée par la classe de la
référence x (c’est à dire A), donc a.f(2)= 2+5. La méthode g() est dynamique, la
variante utilisée est déterminée par la vraie classe de l’objet référé par x (dans notre
cas D), donc a.g(3)=3+8. D’où la réponse 77.
2. On définit la méthode permuter
public static void permuter (String s1, String s2, int x1, int x2){
String tmp1=s1 ; s1=s2 ; s2=tmp1 ;
int tmp2=x1 ; x1=x2 ; x2=tmp2 ; }
On l’applique dans le contexte suivant :
String a=”bon” ; String b=”jour” ; int c=3 ; int d =4 ;
permuter(a,b,c,d) ;
Quelles seront les valeurs de a,b,c,d après l’exécution de ce code ?
(a) ”bon”, ”jour”, 3, 4
(b) ”jour”, ”bon”, 3, 4
(c) ”bon”, ”jour”, 4, 3
(d) ”jour”, ”bon”, 4, 3
Avec le passage de paramètres par valeur cette méthode ne change rien.
3. Pour la classe D définie comme suit :
class D {
public int x ;
public D() {x=3 ; } ;
public D( int a){this() ; x=x+a ;} ;
public D( int a, int b){this(b) ; x= x-a ;}}
qu’affichera le code suivant ?
D a=new D(5,6) ;
[Link](a.x) ;

(a) 1
(b) 2
(c) 3
(d) 4
Il suffit de comprendre que l’appel de constructeur D(5,6) commence par appeler
D(6) qui appelle à son tour D().

2
4. Étant donné que la classe Triangle étend la classe Figure, trouvez une ligne correcte parmi
les suivantes
(a) Triangle x= new Triangle() ; Object y = (Object)x ; Triangle z=y ;
La troisième instruction est un downcasting implicite qui mène à une erreur de
compilation.
(b) Figure y =new Figure() ; Triangle x= (Triangle)y ; Figure z=x ;
La compilation se fait sans erreurs, mais à l’exécution le downcasting explicite de
la deuxième instruction produit une ClassCastException, comme une simple Figure
référée par y n’est pas un Triangle.
(c) Triangle x= new Triangle() ; Figure y = x ; Triangle z=(Triangle)y ;
Ici tout va bien : l’objet construit par la première instruction est un Triangle, la
deuxième instruction est un upcasting implicite, la troisième instruction est un down-
casting explicite qui se déroule bien.
(d) Figure y =new Figure() ; Triangle x= (Triangle)y ; Figure z=(Figure)x ;
La compilation se fait sans erreurs, mais à l’exécution le downcasting explicite de
la deuxième instruction produit une ClassCastException, comme une simple Figure
référée par y n’est pas un Triangle.
5. Pour la classe définie comme suit :
public class Bidon {int x ;} ;
lequel des programmes est faux ?
(a) Bidon a=new Bidon(3) ;
(b) Bidon a=new Bidon() ; String s=[Link]() ;
(c) Bidon a=new Bidon() ; boolean b= [Link](”bonjour”) ;
(d) Bidon a=new Bidon() ; boolean b= [Link](a) ;
new Bidon(3) fait appel à un constructeur inexistant. Toutes les autres lignes utilisent
des méthodes héritées de la classe Object ce qui est toujours possible.

3
Université Paris-Diderot – L3 Informatique – L3 Math-info – M1 linguistique informatique

Nom:
Programmation Orientée Objet
qcm2, Version: A Carte d’étudiant:

Remplissez la table avec les lettres correspondant à vos réponses.

Questions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Réponse(s)

Bonne réponse=2pt; mauvaise réponse ou réponse incomplète =-1pt; pas de réponse=0pt

1. On considère le code:
class A1 {void f(){[Link](i);}int i=0;}
class B1 extends A1{public void f(){[Link](i);}int i=1;}
class B2 extends A1{public void f(){[Link](i);}int i=2;}
Le code suivant: “A1 a1= new B1(); B2 b2=(B2)a1; b2.f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 1
(d) affiche 2
(e) affiche 0
2. Pour la classe D définie comme suit:
class D {
public int x;
public D() {x=3; };
public D( int a){this(); x=x+a;};
public D( int a, int b){this(b); x= x-a;}}
qu’affichera le code suivant?
D a=new D(5,6);
[Link](a.x);

(a) 1
(b) 2
(c) 3
(d) 4

1
3. On considère le code:
class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();}catch (Exception e) {}
return tmp; }
}
Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
4. On considère le code:
class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}

Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
5. On considère le code suivant:

class A{ class B extends A{


String s="A"; String s="B";
void f(String s1){[Link](s+" "+s1);} void f(String s1){super.f(s+" "+s1);}
} }
class C extends B{
String s="C";
void f(String s1){super.f(s+" "+s1);}
}
le code A a=new C();((A)a).f("X");
(a) Provoque une erreur à la compilation
(b) Affiche C C C X
(c) Affiche A B C X
(d) Affiche A X

2
6. Soit:
class P implements Cloneable{
public int i=10;
P(int i){this.i=i;}
public Object clone(){
try{
return [Link]();
}catch(Exception e){;};
return null;
}
}

On considère les instructions:


P p=new P(3); P q=(P)[Link](); p.i=8; [Link](q.i);
Trouver la ou les bonnes réponses:
(a) Il provoque une exception à l’exécution
(b) Il affichera: 3
(c) Il affichera: 10
(d) Il affichera: 8
(e) Cloneable est une interface contenant la méthode clone
7. On considère les déclarations et définitions:
interface I{}
class C implements I{}

Parmi les morceaux de codes suivants lesquels sont syntaxiquement corrects (ne provoquent pas d’erreur
à la compilation):
(a) I i=new I();
(b) I ic=new C();
(c) C c=new I();
(d) I ic= new C(); C c= ic;
8. On considère le code:
class A1 {void f(){[Link](i);}int i=0;}
class B1 extends A1{public void f(){[Link](i);}int i=1;}
class B2 extends A1{public void f(){[Link](i);}int i=2;}
Le code suivant: “A1 a1= new B1(); B2 b2=(B2)a1;b2.f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 1
(d) affiche 2
(e) affiche 0

3
9. On considère le code suivant:
interface I{ interface J extends I{
void f(); void f(double d);
int f(int i); void f();
} }

class A implements J{
public void f(){;}
public int f(int i){return 0;}
public void f(double d){;}
void f(char c){;}
}
Trouver la ou les bonnes réponses:
(a) ce code ne peut pas être compilé
(b) le code suivant est correct (pas d’erreur ni à la compilation ni à l’exécution):
I i=new A(); J j=(J)i; j.f(3.2);
(c) le code suivant est correct (pas d’erreur ni à la compilation ni à l’exécution):
I ii= new J(); ii.f();
10. On considère le code suivant:
class F { class Fbis extends F{
void f(){[Link]("F.f() ");this.g();} void f(){[Link]("Fbis.f() ");this.g();}
void g(){[Link]("F.g() ");} void g(){[Link]("Fbis.g() "); super.f();}
} }

class Main{
public static void main(String[] args){F f=new Fbis(); ((F)f).f(); }
}
Trouver la bonne réponse:
(a) il ne peut pas être compilé
(b) il boucle à l’exécution
(c) sa sortie sera: F.f() F.g()
(d) sa sortie sera: Fbis.f() Fbis.g() F.f() F.g()

4
11. On considère le code:
class X {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}
Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
12. On considère le code:
interface I{void f();}
class A implements I{public void f(){[Link]("A");}}
class B implements I{public void f(){[Link]("B");}}

Le code suivant: “I[] tabI=new I[2]; tabI[0]= new A();tabI[1]= new B(); tabI[0].f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche A
13. Soit:
class T{ class U extends T{
public int i=1;int j=2; public int i=10;
} }
On considère les instructions suivantes: T x=new U();
[Link]("x.i="+x.i+" ((T)x).i="+((T)x).i+" ((U)x).i)="+((U)x).i);
Trouver la ou les bonnes réponses:
(a) ces instructions ne passeront pas à la compilation
(b) ces instructions provoqueront une erreur à l’exécution
(c) ces instructions provoqueront l’affichage: x.i=1 ((T)x).i=1 ((U)x).i)=10
(d) ces instructions provoqueront l’affichage: x.i=10 ((T)x).i=1 ((U)x).i)=10
(e) ces instructions provoqueront l’affichage: x.i=10 ((T)x).i=10 ((U)x).i)=10
14. (Trouver la ou les bonnes réponses) On considère la classe: class X{static int i=0; int j=2; /*...*/}
(a) On peut ajouter à cette classe: void f(){i=i+j;}
(b) On peut ajouter à cette classe: static void g(){i=j+i;}
(c) On peut ajouter à cette classe: static void h(){i=X.j+i;}
(d) On peut ajouter à cette classe: static void i(){this.i=this.i+this.j;}

5
15. On considère le code:
interface I{void f();}
class A implements I{public void f(){[Link]("A");}}
class B implements I{public void f(){[Link]("B");}}

Le code suivant: “I[] tabI=new A[2]; tabI[0]= new A();tabI[1]= new B(); tabI[0].f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche A

6
Answer Key for Exam A
Bonne réponse=2pt; mauvaise réponse ou réponse incomplète =-1pt; pas de réponse=0pt

1. On considère le code:
class A1 {void f(){[Link](i);}int i=0;}
class B1 extends A1{public void f(){[Link](i);}int i=1;}
class B2 extends A1{public void f(){[Link](i);}int i=2;}
Le code suivant: “A1 a1= new B1(); B2 b2=(B2)a1; b2.f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 1
(d) affiche 2
(e) affiche 0
2. Pour la classe D définie comme suit:
class D {
public int x;
public D() {x=3; };
public D( int a){this(); x=x+a;};
public D( int a, int b){this(b); x= x-a;}}
qu’affichera le code suivant?

D a=new D(5,6);
[Link](a.x);
(a) 1
(b) 2
(c) 3
(d) 4

1
3. On considère le code:
class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();}catch (Exception e) {}
return tmp; }
}
Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
4. On considère le code:
class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}
Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
5. On considère le code suivant:
class A{ class B extends A{
String s="A"; String s="B";
void f(String s1){[Link](s+" "+s1);} void f(String s1){super.f(s+" "+s1);}
} }
class C extends B{
String s="C";
void f(String s1){super.f(s+" "+s1);}
}
le code A a=new C();((A)a).f("X");
(a) Provoque une erreur à la compilation
(b) Affiche C C C X
(c) Affiche A B C X
(d) Affiche A X

2
6. Soit:
class P implements Cloneable{
public int i=10;
P(int i){this.i=i;}
public Object clone(){
try{
return [Link]();
}catch(Exception e){;};
return null;
}
}

On considère les instructions:


P p=new P(3); P q=(P)[Link](); p.i=8; [Link](q.i);
Trouver la ou les bonnes réponses:
(a) Il provoque une exception à l’exécution
(b) Il affichera: 3
(c) Il affichera: 10
(d) Il affichera: 8
(e) Cloneable est une interface contenant la méthode clone
7. On considère les déclarations et définitions:
interface I{}
class C implements I{}
Parmi les morceaux de codes suivants lesquels sont syntaxiquement corrects (ne provoquent pas d’erreur
à la compilation):
(a) I i=new I();
(b) I ic=new C();
(c) C c=new I();
(d) I ic= new C(); C c= ic;
8. On considère le code:

class A1 {void f(){[Link](i);}int i=0;}


class B1 extends A1{public void f(){[Link](i);}int i=1;}
class B2 extends A1{public void f(){[Link](i);}int i=2;}
Le code suivant: “A1 a1= new B1(); B2 b2=(B2)a1;b2.f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 1
(d) affiche 2
(e) affiche 0

3
9. On considère le code suivant:
interface I{ interface J extends I{
void f(); void f(double d);
int f(int i); void f();
} }

class A implements J{
public void f(){;}
public int f(int i){return 0;}
public void f(double d){;}
void f(char c){;}
}
Trouver la ou les bonnes réponses:
(a) ce code ne peut pas être compilé
(b) le code suivant est correct (pas d’erreur ni à la compilation ni à l’exécution):
I i=new A(); J j=(J)i; j.f(3.2);
(c) le code suivant est correct (pas d’erreur ni à la compilation ni à l’exécution):
I ii= new J(); ii.f();
10. On considère le code suivant:
class F { class Fbis extends F{
void f(){[Link]("F.f() ");this.g();} void f(){[Link]("Fbis.f() ");this.g();}
void g(){[Link]("F.g() ");} void g(){[Link]("Fbis.g() "); super.f();}
} }

class Main{
public static void main(String[] args){F f=new Fbis(); ((F)f).f(); }
}
Trouver la bonne réponse:
(a) il ne peut pas être compilé
(b) il boucle à l’exécution
(c) sa sortie sera: F.f() F.g()
(d) sa sortie sera: Fbis.f() Fbis.g() F.f() F.g()

4
11. On considère le code:
class X {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}
Le code suivant: “X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i); ” :
(a) provoque une erreur à la compilation ou à l’exécution
(b) affiche 3 3
(c) affiche 3 8
(d) affiche 1 3
(e) affiche 1 8
12. On considère le code:
interface I{void f();}
class A implements I{public void f(){[Link]("A");}}
class B implements I{public void f(){[Link]("B");}}

Le code suivant: “I[] tabI=new I[2]; tabI[0]= new A();tabI[1]= new B(); tabI[0].f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche A
13. Soit:
class T{ class U extends T{
public int i=1;int j=2; public int i=10;
} }
On considère les instructions suivantes: T x=new U();
[Link]("x.i="+x.i+" ((T)x).i="+((T)x).i+" ((U)x).i)="+((U)x).i);
Trouver la ou les bonnes réponses:
(a) ces instructions ne passeront pas à la compilation
(b) ces instructions provoqueront une erreur à l’exécution
(c) ces instructions provoqueront l’affichage: x.i=1 ((T)x).i=1 ((U)x).i)=10
(d) ces instructions provoqueront l’affichage: x.i=10 ((T)x).i=1 ((U)x).i)=10
(e) ces instructions provoqueront l’affichage: x.i=10 ((T)x).i=10 ((U)x).i)=10
14. (Trouver la ou les bonnes réponses) On considère la classe: class X{static int i=0; int j=2; /*...*/}
(a) On peut ajouter à cette classe: void f(){i=i+j;}
(b) On peut ajouter à cette classe: static void g(){i=j+i;}
(c) On peut ajouter à cette classe: static void h(){i=X.j+i;}
(d) On peut ajouter à cette classe: static void i(){this.i=this.i+this.j;}

5
15. On considère le code:
interface I{void f();}
class A implements I{public void f(){[Link]("A");}}
class B implements I{public void f(){[Link]("B");}}

Le code suivant: “I[] tabI=new A[2]; tabI[0]= new A();tabI[1]= new B(); tabI[0].f(); ”
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche A

6
Université Paris 7 – Licence d’informatique, math-info, linguistique et informatique,
21 octobre 2010
tous les documents sont interdits

Nom:
POO L3
QCM 1, Version: A Carte d’étudiant:

Remplissez la table avec les lettres correspondant à vos réponses.

Questions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Réponse(s)

1
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-0,5pt; pas de réponse=0pt.
1. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;((A)o).i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
2. On considère la classe définie par : class A {int i; static void print(){[Link](i); }}. L’exécution
de:
A a=new A(); A b=a; a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
3. On considère la classe définie par : class A {static int i; }. L’exécution de:
A a=new A(); A b=new A(); a.i=10; b.i=5; [Link](a.i);
(a) affiche 5
(b) affiche 10
(c) provoque une erreur
4. On considère la classe définie par : class A {int i; }. L’exécution de:
A a=new A(); A b=new A(); a.i=10; b.i=10;
if(a==b)[Link]("EGAL"); else [Link]("PAS EGAL");
(a) affiche EGAL
(b) affiche PAS EGAL
(c) provoque une erreur
5. On définit la méthode permuter:
public static void permuter (String s1, String s2, int x1, int x2){
String tmp1=s1; s1=s2; s2=tmp1; int tmp2=x1; x1=x2; x2=tmp2;
}

Considérons: String a="bon"; String b="jour"; int c=3; int d =4; permuter(a,b,c,d);
Quelles seront les valeurs de a,b,c,d après l’exécution de ce code?
(a) "bon", "jour", 3, 4
(b) "jour", "bon", 3, 4
(c) "bon", "jour", 4, 3
(d) "jour", "bon", 4, 3
6. On considère la classe définie par : class A {int i; void print(){[Link](i); }}
L’exécution de A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
7. On considère la classe définie par : class A {int i; }. L’exécution de:
A a=new A();A b=new A(); a.i=10; b=a; b.i=5;
if(a==b)[Link]("EGAL"); else [Link]("PAS EGAL");
(a) affiche EGAL
(b) affiche PAS EGAL
(c) provoque une erreur
2
8. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;o.i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
9. On considère la classe définie par : class A {static int i; static void print(){[Link](i); }}.
L’exécution de:
A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
10. On considère la classe définie par : class A {static int i; void print(){[Link](i); }}
L’exécution de A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
11. Quel est le résultat du morceau de code : int i,j; i=10; j=i; j=5; [Link](i);
(a) il affiche 5
(b) il affiche 10
(c) il provoque une erreur
12. Pour la classe définie comme suit:
public class Bidon {int x=5;};
Parmi les programmes suivants le(s)quel(s) provoque(nt) une erreur?
(a) Bidon a=new Bidon(3);
(b) Bidon a=new Bidon(); String s="bidon"+a;

13. On considère la classe définie par : class A {int i=0; B b; }, la classe: B {int j=0;} et le code A a1=new
A(); A a2=new A(); B b=new B();
Quelle(s) expression(s) a (ont) la valeur true:
(a) (a1.i != b.j)
(b) (a1.b == a2.b)
(c) (a1 == a2)

3
14. Pour la classe D définie comme suit:
classD {
public int x;
public D() {x=3; };
public D( int a){this(); x=x+a;};
public D( int a, int b){this(b); x= x-a;}
}
qu’affichera le code suivant?

D a=new D(5,6);
[Link](a.x);
(a) 1
(b) 2
(c) 3
(d) 4
15. On considère la classe définie par : class A {int i; }
L’exécution de: A a=new A(); A b=new A(); a.i=8; b=a; b.i=5; [Link](a.i);
(a) affiche 5
(b) affiche 8
(c) provoque une erreur
16. On considère la classe définie par : class A {int i=0; }. L’exécution de:
A a,b; a.i=10; b=a; b.i=5; [Link](a.i);
(a) affiche 10
(b) affiche 5
(c) provoque une erreur

4
Answer Key for Exam A
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-0,5pt; pas de réponse=0pt.

1. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;((A)o).i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
2. On considère la classe définie par : class A {int i; static void print(){[Link](i); }}. L’exécution
de:
A a=new A(); A b=a; a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
3. On considère la classe définie par : class A {static int i; }. L’exécution de:
A a=new A(); A b=new A(); a.i=10; b.i=5; [Link](a.i);
(a) affiche 5
(b) affiche 10
(c) provoque une erreur
4. On considère la classe définie par : class A {int i; }. L’exécution de:
A a=new A(); A b=new A(); a.i=10; b.i=10;
if(a==b)[Link]("EGAL"); else [Link]("PAS EGAL");
(a) affiche EGAL
(b) affiche PAS EGAL
(c) provoque une erreur
5. On définit la méthode permuter:
public static void permuter (String s1, String s2, int x1, int x2){
String tmp1=s1; s1=s2; s2=tmp1; int tmp2=x1; x1=x2; x2=tmp2;
}

Considérons: String a="bon"; String b="jour"; int c=3; int d =4; permuter(a,b,c,d);
Quelles seront les valeurs de a,b,c,d après l’exécution de ce code?
(a) "bon", "jour", 3, 4
(b) "jour", "bon", 3, 4
(c) "bon", "jour", 4, 3
(d) "jour", "bon", 4, 3
6. On considère la classe définie par : class A {int i; void print(){[Link](i); }}
L’exécution de A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée

1
7. On considère la classe définie par : class A {int i; }. L’exécution de:
A a=new A();A b=new A(); a.i=10; b=a; b.i=5;
if(a==b)[Link]("EGAL"); else [Link]("PAS EGAL");
(a) affiche EGAL
(b) affiche PAS EGAL
(c) provoque une erreur
8. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;o.i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
9. On considère la classe définie par : class A {static int i; static void print(){[Link](i); }}.
L’exécution de:
A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
10. On considère la classe définie par : class A {static int i; void print(){[Link](i); }}
L’exécution de A a=new A(); A b=new A(); a.i=5; b.i=10; [Link]();
(a) affiche 5
(b) affiche 10
(c) la classe A ne peut pas être compilée
11. Quel est le résultat du morceau de code : int i,j; i=10; j=i; j=5; [Link](i);
(a) il affiche 5
(b) il affiche 10
(c) il provoque une erreur
12. Pour la classe définie comme suit:

public class Bidon {int x=5;};


Parmi les programmes suivants le(s)quel(s) provoque(nt) une erreur?
(a) Bidon a=new Bidon(3);
(b) Bidon a=new Bidon(); String s="bidon"+a;

13. On considère la classe définie par : class A {int i=0; B b; }, la classe: B {int j=0;} et le code A a1=new
A(); A a2=new A(); B b=new B();
Quelle(s) expression(s) a (ont) la valeur true:
(a) (a1.i != b.j)
(b) (a1.b == a2.b)
(c) (a1 == a2)

2
14. Pour la classe D définie comme suit:
classD {
public int x;
public D() {x=3; };
public D( int a){this(); x=x+a;};
public D( int a, int b){this(b); x= x-a;}
}
qu’affichera le code suivant?

D a=new D(5,6);
[Link](a.x);
(a) 1
(b) 2
(c) 3
(d) 4
15. On considère la classe définie par : class A {int i; }
L’exécution de: A a=new A(); A b=new A(); a.i=8; b=a; b.i=5; [Link](a.i);
(a) affiche 5
(b) affiche 8
(c) provoque une erreur
16. On considère la classe définie par : class A {int i=0; }. L’exécution de:
A a,b; a.i=10; b=a; b.i=5; [Link](a.i);
(a) affiche 10
(b) affiche 5
(c) provoque une erreur

3
Université Paris-Diderot –licence info. et math-info ,EIDD , master LI
9 janvier 2015
durée 3 heures; tous les documents sont interdits

Nom:
POO L2-L3 EIDD, LI Carte d’étudiant:
Examen, Version: A Cursus:

Feuille de réponse

Réponses pour la section 1: Questions fondamentales références


Questions 1 2 3 4 5 6
Réponse(s)

Réponses pour la section 2: Questions fondamentales héritage


Questions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Réponse(s)

Réponse pour la section 3: Programmation


Question 1

1
Question 2:

Question 3:

Réponses pour la section 4: Questions diverses


Questions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Réponse(s)

Questions 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
Réponse(s)

2
Les réponses sont à reporter sur la première feuille “Feuille de réponse” qui seule doit être rendue. La
partie texte est sensée être de taille suffisante pour les réponses qui doivent être concises. Dans le cas où vous
n’auriez pas la place de mettre vos réponses dans les cadres correspondants, vous pouvez, à titre exceptionnel
rendre une copie d’examen (avec votre nom et votre numéro d’étudiant).
Le barème qui suit est donné à titre indicatif. L’examen comporte 4 sections. Les deux premières sont des
questions à choix multiples pour lesquelles la réponse est obligatoire. Ces deux sections sont notées sur 26
points. La section 3 contient un exercice de programmation qui sera noté sur 10. La section 4 contient 32 ques-
tions à choix multiples qui seront ramenées à une note sur 10.
Section 1. Questions fondamentales: références
Bonne réponse = 1pt; mauvaise réponse ou réponse incomplète =-1pt;
Reportez vos réponses dans les cases du tableau de la page des réponses pour cette section. Dans le cas
où aucune réponse ne vous semble correcte, vous pouvez laisser la case du tableau vide.
Dans toutes les questions suivantes, on suppose que la définition de la classe ci-dessous est dans la portée
et dans le même paquetage que les divers codes proposés,
Pour toutes les questions de cette section on considère la classe suivante:
class A implements Cloneable {
int i = 0;
A a;
A(int j) {
i = j;
}
boolean equals(A x) {
return (i == x.i && a == x.a);
}
public A clone() {
Object o = null;
try {
o = [Link]();
}catch (CloneNotSupportedException e) {}
return (A) o;
}
}

1. Le code:
A u1=new A(4); A u2; u1.a= u2;
[Link]("u1.a.i"+u1.a.i);
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de 0
2. Le code:
A y1=new A(1); A y2 = new A(1);
if ([Link](y2)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non

3
3. Le code:
A z1 = new A(2); A z2 = [Link]();
if ([Link](z1)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non
4. Le code:
A x1=new A(1); A x2=x1; x2.a=x1; x2.i=2; [Link](x1.i+" "+x2.i);
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de 1 2
(c) L’affichage de 2 2
5. Le code:
A y1=new A(1); A y2 = new A(1);
if (y1 == y2) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non
6. Le code:
A t1 = new A(4); A t2 = [Link](); A t3 = new A(1); t1.a = t3; A t4 = [Link](); t2.a = t4;
if ([Link](t2)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non

4
Section 2. Questions fondamentales: héritage
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-1pt;
Reportez vos réponses dans les cases du tableau de la page des réponses pour cette section. Dans le cas où
aucune réponse ne vous semble correcte, vous pouvez laisser la case du tableau vide.
Dans toutes les questions suivantes, on suppose que les définitions de classes ci-dessous sont dans la portée
et dans le même paquetage que les codes proposés.

interface HI {
String tout();
}
class HA implements HI {
String s1;
String s2;
HA(String s1, String s2) {
this.s1 = "HA:s1=" + s1;
this.s2 = "HA:s2=" + s2;
}
HA() {
this("un", "deux");
}
void g() {
[Link]("HA:g " + tout());
}
public String tout() {
return ("(" + s1 + " " + s2 + ")");
}
}
class HB extends HA {
String s1;
String s3;
HB(String s, String t, String u, String v) {
super(s, t);
this.s1 = "HB:s1=" + u;
this.s2 = "HB:s2=" + t;
this.s3 = "HB:s3=" + v;
}
HB() {
this("un", "deux", "trois", "quatre");
}
String f() {
return ("(" + s1 + " " + s3 + ")");
}
public String tout() {
return ("(" + [Link]() + f() + ")");
}
void g() {
[Link](tout());
}
}

5
1. Le code: HB b1= new HB(); [Link]("b1.s1: "+b1.s1);
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: b1.s1: HA:s1=un
(c) Affiche: b1.s1: HB:s1=trois
2. Le code: HI i2=new HA(); ((HA) i2).g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
3. Le code: HA a7=new HA(); a7.g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche HA:g (HA:s1=un HA:s2=deux)
(e) Affiche HA:g (HA:s1=un HB:s2=deux)
4. Pour cette question on rajoute dans la classe HB le code suivant:
public void g(String st){[Link](st);g();}
(a) Cet ajout provoque une erreur à la compilation
(b) Cet ajout ne provoque pas d’erreur à la compilation et le code
HA a8=new HB(); a8.g("bonjour"); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code
HA a8=new HB(); a8.g("bonjour"); affiche
bonjour((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre)))
5. Le code: HB b5=new HB(); [Link]("b5.s1: " + ((HA) b5).s1);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b5.s1: HA:s1=un
(d) Affiche: b5.s1: HB:s1=trois

6
6. On suppose que l’on ajoute une classe X:
class X {
public static void afficher(HI i) {
[Link]([Link]());
}
public static HI creerI(String ch) {
return new HI() {
public String tout() {return ch; }
};
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link]("bonjour"));
provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link]("bonjour"));
affichera: bonjour
7. Le code: HA a4 = new HA(); HB b4 = (HB) a4; [Link]("b4.s2: " + b4.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b4.s2: HA:s2=deux
(d) Affiche: b4.s2: HB:s2=deux
8. Pour cette question on rajoute dans la classe HB le code suivant:
public void g(String st){[Link](st);g();}
(a) Cet ajout une erreur à la compilation
(b) Cet ajout ne provoque pas d’erreur à la compilation et le code
HB b8 = new HB(); b8.g("bonjour"); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code
HB b8 = new HB(); b8.g("bonjour"); affiche
bonjour((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre)))
9. Le code: HA a3= new HB(); HB b2=a3; [Link]("b2.s2: "+b2.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b2.s2: HA:s2=deux
(d) Affiche: b2.s2: HB:s2=deux
10. Le code: HA a6=new HB(); ((HA)a6).g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche HA:g (HA:s1=un HA:s2=deux)
(e) Affiche HA:g (HA:s1=un HB:s2=deux)

7
11. On suppose que l’on ajoute une classe X:
class X {
public static void afficher(HI i) {
[Link]([Link]());
}
public static HI creerI(String ch) {
return new HI() {
public String tout() {return ch; }
};
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link](new
HB().tout())); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link](new
HB().tout())); affichera: ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
12. Le code: HA a3= new HB(); HB b3=(HB)a3; [Link]("b3.s2: "+b3.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b3.s2: HA:s2=deux
(d) Affiche: b3.s2: HB:s2=deux
13. Le code: HA a5=new HB();a5.g();
(a) Provoque une erreur à la compilation
(b) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
(d) Affiche HA:g (HA:s1=un HB:s2=deux)
14. Le code: HI i1= new HB(); [Link]([Link]());
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: (HA:s1=un HA:s2=deux)
(c) Affiche: ((HA:s1=un HA:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche: ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
15. Le code: HA a2= new HB(); [Link]("a2.s3: "+a2.s3);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: a2.s3: HA:s1=trois
16. Le code:HI i=new HA("x","y"); [Link]([Link]());
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: (HA:s1=x HA:s2=y)
(c) Affiche: (HA:s1=un HA:s2=deux)

8
17. Le code: HI i2=new HA(); i2.g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
18. On suppose que l’on ajoute une classe X:

class X {
public static void afficher(HI i) {
[Link]([Link]());
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link](new HA()); provoque
une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link](new HA()); affichera
(HA:s1=un HA:s2=deux)
19. Peut-on ajouter à la classe HB le méthode définie par:
void g() {[Link]("(" + s1 + " " + s3 + ")");}
(a) oui
(b) non
20. Le code: HA a1=new HB(); [Link]("a1.s1: "+a1.s1);
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: a1.s1: HA:s1=un
(c) Affiche: a1.s1: HB:s1=trois

9
Section 3. Programmation
L’interface Iterator<E> contient les méthodes boolean hasNext() et E next() (les autres méthodes peuvent
ne pas être implémentées). De même on rappelle que l’interface Iterable<T> contient une seule méthode
Iterator<T> iterator() qui doit être implémentée.
On considère l’interface suivante:
interface PileFile<E> extends Iterable<E> {
void mettre(E elem);
E prendre();
boolean estVide();
boolean estPlein();
Iterator<E> iterator();
}
Cette interface doit servir à la réalisation de piles et de files. On rappelle qu’une pile ou une file construite
sur le type E est une structure de données contenant des objets de type E. Pour une pile l’opération, prendre
retournera l’objet qui a été mis le plus récemment dans cette pile par une opération mettre, pour une file
prendre retournera l’objet qui a été mis le plus anciennement dans cette file par une opération mettre.
La méthode estVide teste si la structure de données ne contient aucun élément. De même dans le cas où
la structure de données ne peut contenir qu’un nombre borné d’éléments, la méthode estPlein teste si de
nouveaux éléments peuvent être ajoutés à la structure de données.
Ici, un itérateur sur une pile ou une file ne doit pas modifier le contenu de la pile ou de la file; la méthode
next retournera successivement les références sur les objets de la structure de données dans l’ordre du plus
ancien au plus récent pour une file et du plus récent au plus ancien pour une pile.
1. Donner une implémentation PileTab<E> d’une pile de PileFile<E> avec un tableau de taille fixe donnée
par une variable d’instance taille qui sera initialisée par le constructeur avec une valeur par défaut égale
à 100. En cas d’opérations impossibles (mettre sur une pile pleine ou prendre sur une pile vide) on
pourra lancer des exceptions Plein ou Vide que l’on définira.
On fera attention à ce que l’implémentation proposée soit efficace (les opérations mettre et prendre
doivent se faire en temps constant).
2. Donner une implémentation FileListe<E> d’une file de PileFile<E> utilisant un chainage défini par une
classe qui sera interne à FileListe<E>:

class Item {
E val;
Item next;
Item(E v, Item n) {
val = v;
next = n;
}
}
On fera attention à ce que l’implémentation proposée soit efficace (les opérations mettre et prendre
doivent se faire en temps constant).
3. Définir une méthode statique ayant deux arguments le premier un Iterator et le deuxième une PileFile
qui ajoute à la PileFile tous les éléments de la structure de données implémentant l’Iterator.
Utiliser cette méthode pour définir une méthode statique permettant de copier le contenu d’une file
pour en faire une pile.

10
Section 4. Questions diverses
Dans toutes les questions suivantes, on suppose que les définitions de classes ci-dessous sont dans la portée
des divers codes proposés, on suppose aussi que ces codes sont dans le même paquetage que ces définitions
de classes.
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-0,5pt; absence de réponse =0pt
1. En java:
(a) le type d’une expression est toujours déterminé à la compilation
(b) le type d’une expression peut changer au cours de l’exécution
2. class A1 {
int a = 5;
B1 b=new B1(10);
void f() {[Link]("A1 " + a); b.f();}
class B1 {
B1(int i){a=i;}
void f() {[Link]("B1 " + a); }
}
}

Et le code (new A1()).f();


(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent A1 5 et B1 10
(c) affichent A1 10 et B1 10
3. Le code:
Integer m=new Integer(2);
if (m==2) [Link]("égal"); else [Link]("non égal");
(a) affichera égal
(b) affichera non égal
4. class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}

et le code:
X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i);
(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent 3 3
(c) affichent 3 8
(d) affichent 1 3
(e) affichent 1 8

11
5. class E1 extends Exception{}
class E2 extends E1{}
class ZZ {void f() throws E2{}}
class TT extends ZZ{void f(){}}
(a) Ces classes peuvent être compilées
(b) Ces classes ne peuvent pas être compilées
6. En supposant que a et b sont des variables correctement déclarées “a=b+1” est:
(a) une expression
(b) une instruction
7. Le code:
Number t[]=new Integer[10];t[0]=1;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
8. class D {public int val; public D(int i){val=i;}}
class E extends D{public E(int i){super(i);}}
avec le code :
D[] t1= new E[4]; t1[0]=new D(1); t1[1]=new E(3); [Link](t1[0].val+" "+t1[1].val);

(a) provoquent une erreur à la compilation


(b) affichent 1 3
(c) provoquent une erreur à l’exécution
9. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;((A)o).i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
10. class A{
static int i=0;int j=10;
void f(){[Link]("i="+i);[Link](" j="+j);}
static void g(){this.f();}
}

et le code: (new A()).g();


(a) provoquent une erreur à la compilation
(b) affichent i=0 j=10
(c) provoquent une erreur à l’exécution

12
11. class A2 {
int a = 5;
B2 b=new B2(10);
void f() {[Link]("A2 " + a); b.f();}
class B2 {
int a;
B2(int i){a=i;}
void f() {[Link]("B2 " + this.a); [Link]("B2 " + [Link].a); }
}
}

Et le code (new A2()).f();


(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent A2 5 B2 10 et B2 10
(c) affichent A2 5 B2 5 et B2 5
(d) affichent A2 5 B2 10 et B2 5
12. Avec la méthode: “static void perm(Integer i,Integer j){Integer tmp; tmp=j; j=i; i=tmp;}” le morceau de
code:
int i1=10,i2=5; perm(i1,i2); [Link](i1);
(a) affichera 10
(b) affichera 5
(c) provoquera une erreur à la compilation ou à l’exécution
13. Le code:
List<Number> ln=new ArrayList<Number>();
[Link](10); [Link](2.3);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
14. class A{static void f(){[Link]("A.f");}}
class B extends A{void f(){[Link]("B.f");}} et le code A a=new B(); a.f();
(a) provoquent une erreur à la compilation
(b) affichent A.f
(c) affichent B.f
15. Avec la méthode: “ static Integer f(int i){Integer n=i; return n;}” le morceau de code:
“Integer n1=2; if (2==f(n1))[Link]("égal"); else [Link]("non égal"); ”
(a) affichera égal
(b) affichera non égal
(c) provoquera une erreur à la compilation ou à l’exécution

13
16. public static void permuter (String s1, String s2, int x1, int x2){
String tmp1=s1; s1=s2; s2=tmp1; int tmp2=x1; x1=x2; x2=tmp2;
}

Considérons: String a="bon"; String b="jour"; int c=3; int d =4; permuter(a,b,c,d);
Quelles seront les valeurs de a,b,c,d après l’exécution de ce code?
(a) "bon", "jour", 3, 4
(b) "jour", "bon", 3, 4
(c) "bon", "jour", 4, 3
(d) "jour", "bon", 4, 3
17. Le code:
List<Integer> li1=new ArrayList<Integer>();
List<? super Integer> lb=li1;
[Link](4); [Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 4
18. Le code:
List<Number> ln=new ArrayList<Number>();
[Link](10); [Link]((Double)2.3);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
19. class E1 extends Exception{}
class E2 extends E1{}
et l’appel de la fonction f définie ci-dessous

void f(){
try{throw new E1(); }
catch (E2 e){[Link]("E2");}
finally {[Link]("Fin");}
}

(a) affichent E2
(b) affichent Fin
(c) affichent E2 et Fin
(d) provoquent une erreur à la compilation
20. Le code:
List<Integer> li=new ArrayList<Integer>();
[Link](3); List<?> lqm1= li;
[Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 3

14
21. class XX {void f(){}; }
class YY extends XX{void f() throws Exception{throw new Exception();}}
(a) Ces classes peuvent être compilées
(b) Ces classes ne peuvent pas être compilées
22. Le code:
List<Number> ln1=new ArrayList<Number>();
List<? super Integer> lnb=ln1;
[Link](5); [Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 5
23. public static Number somme1(List<Number> L){
double tmp=0.0;
for(Number n:L)tmp = tmp+ [Link]();
return tmp;
}

Et le code:
List<Number> lnum=new ArrayList<Number>();
for(int i=0;i<10;i++)[Link](i);
[Link](somme1(lnum));
(a) provoquent une erreur à la compilation
(b) provoquent une erreur à l’exécution
(c) affichent 45.0
24. Le code:
List<Number> ln=new ArrayList<Integer>();[Link](10) ;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
25. public static Number somme1(List<Number> L){
double tmp=0.0;
for(Number n:L)tmp = tmp+ [Link]();
return tmp;
}

Et le code:
List<Integer> lint=new ArrayList<Integer>();
for(int i=0;i<10;i++)[Link](i);
[Link](somme1(lint));
(a) provoquent une erreur à la compilation
(b) provoquent une erreur à l’exécution
(c) affichent 45.0
26. En java:
(a) toute instruction a un type
(b) toute expression a une valeur

15
27. Le code:
List<?> lqm=new ArrayList<Integer>(); [Link](2);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
28. Après les déclarations int i,j=0,k,l; le morceau de code “l=1+(k=i=j+2)” est:
(a) est une instruction qui modifie les variables i, k et l
(b) est une expression de type int, qui vaut 3
(c) n’est syntaxiquement pas correct
29. Avec la classe: “class B{int i;B(int i){this.i=i;}}” et la méthode:
“ static void permute(B a,B b){B tmp=a;a=b;b=tmp; }”
le morceau de code:
B a=new B(3); B b=new B(0); permute(a,b);[Link](a.i);
(a) affichera 3
(b) affichera 0
(c) provoquera une erreur à la compilation ou à l’exécution
30. Le code:
Number t[]=new Integer[10];t[0]=3.2;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
31. En supposant que f est une méthode ayant un int en paramètre “f(1);” est:
(a) une expression
(b) une instruction
32. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;o.i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)

16
Answer Key for Exam A
Section 1. Questions fondamentales: références
Bonne réponse = 1pt; mauvaise réponse ou réponse incomplète =-1pt;
Reportez vos réponses dans les cases du tableau de la page des réponses pour cette section. Dans le cas
où aucune réponse ne vous semble correcte, vous pouvez laisser la case du tableau vide.
Dans toutes les questions suivantes, on suppose que la définition de la classe ci-dessous est dans la portée
et dans le même paquetage que les divers codes proposés,
Pour toutes les questions de cette section on considère la classe suivante:
class A implements Cloneable {
int i = 0;
A a;
A(int j) {
i = j;
}
boolean equals(A x) {
return (i == x.i && a == x.a);
}
public A clone() {
Object o = null;
try {
o = [Link]();
}catch (CloneNotSupportedException e) {}
return (A) o;
}
}

1. Le code:
A u1=new A(4); A u2; u1.a= u2;
[Link]("u1.a.i"+u1.a.i);
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de 0
2. Le code:
A y1=new A(1); A y2 = new A(1);
if ([Link](y2)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non
3. Le code:
A z1 = new A(2); A z2 = [Link]();
if ([Link](z1)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non
1
4. Le code:
A x1=new A(1); A x2=x1; x2.a=x1; x2.i=2; [Link](x1.i+" "+x2.i);
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de 1 2
(c) L’affichage de 2 2
5. Le code:
A y1=new A(1); A y2 = new A(1);
if (y1 == y2) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non
6. Le code:
A t1 = new A(4); A t2 = [Link](); A t3 = new A(1); t1.a = t3; A t4 = [Link](); t2.a = t4;
if ([Link](t2)) [Link]("oui"); else [Link]("non");
Provoque:
(a) Une erreur à la compilation ou à l’exécution
(b) L’affichage de oui
(c) L’affichage de non

2
Section 2. Questions fondamentales: héritage
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-1pt;
Reportez vos réponses dans les cases du tableau de la page des réponses pour cette section. Dans le cas où
aucune réponse ne vous semble correcte, vous pouvez laisser la case du tableau vide.
Dans toutes les questions suivantes, on suppose que les définitions de classes ci-dessous sont dans la portée
et dans le même paquetage que les codes proposés.

interface HI {
String tout();
}
class HA implements HI {
String s1;
String s2;
HA(String s1, String s2) {
this.s1 = "HA:s1=" + s1;
this.s2 = "HA:s2=" + s2;
}
HA() {
this("un", "deux");
}
void g() {
[Link]("HA:g " + tout());
}
public String tout() {
return ("(" + s1 + " " + s2 + ")");
}
}
class HB extends HA {
String s1;
String s3;
HB(String s, String t, String u, String v) {
super(s, t);
this.s1 = "HB:s1=" + u;
this.s2 = "HB:s2=" + t;
this.s3 = "HB:s3=" + v;
}
HB() {
this("un", "deux", "trois", "quatre");
}
String f() {
return ("(" + s1 + " " + s3 + ")");
}
public String tout() {
return ("(" + [Link]() + f() + ")");
}
void g() {
[Link](tout());
}
}

3
1. Le code: HB b1= new HB(); [Link]("b1.s1: "+b1.s1);
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: b1.s1: HA:s1=un
(c) Affiche: b1.s1: HB:s1=trois
2. Le code: HI i2=new HA(); ((HA) i2).g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
3. Le code: HA a7=new HA(); a7.g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche HA:g (HA:s1=un HA:s2=deux)
(e) Affiche HA:g (HA:s1=un HB:s2=deux)
4. Pour cette question on rajoute dans la classe HB le code suivant:
public void g(String st){[Link](st);g();}
(a) Cet ajout provoque une erreur à la compilation
(b) Cet ajout ne provoque pas d’erreur à la compilation et le code
HA a8=new HB(); a8.g("bonjour"); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code
HA a8=new HB(); a8.g("bonjour"); affiche
bonjour((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre)))
5. Le code: HB b5=new HB(); [Link]("b5.s1: " + ((HA) b5).s1);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b5.s1: HA:s1=un
(d) Affiche: b5.s1: HB:s1=trois
6. On suppose que l’on ajoute une classe X:

class X {
public static void afficher(HI i) {
[Link]([Link]());
}
public static HI creerI(String ch) {
return new HI() {
public String tout() {return ch; }
};
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link]("bonjour"));
provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link]("bonjour"));
affichera: bonjour
4
7. Le code: HA a4 = new HA(); HB b4 = (HB) a4; [Link]("b4.s2: " + b4.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b4.s2: HA:s2=deux
(d) Affiche: b4.s2: HB:s2=deux
8. Pour cette question on rajoute dans la classe HB le code suivant:
public void g(String st){[Link](st);g();}
(a) Cet ajout une erreur à la compilation
(b) Cet ajout ne provoque pas d’erreur à la compilation et le code
HB b8 = new HB(); b8.g("bonjour"); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code
HB b8 = new HB(); b8.g("bonjour"); affiche
bonjour((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre)))
9. Le code: HA a3= new HB(); HB b2=a3; [Link]("b2.s2: "+b2.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b2.s2: HA:s2=deux
(d) Affiche: b2.s2: HB:s2=deux
10. Le code: HA a6=new HB(); ((HA)a6).g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche HA:g (HA:s1=un HA:s2=deux)
(e) Affiche HA:g (HA:s1=un HB:s2=deux)
11. On suppose que l’on ajoute une classe X:
class X {
public static void afficher(HI i) {
[Link]([Link]());
}
public static HI creerI(String ch) {
return new HI() {
public String tout() {return ch; }
};
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link](new
HB().tout())); provoque une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link]([Link](new
HB().tout())); affichera: ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))

5
12. Le code: HA a3= new HB(); HB b3=(HB)a3; [Link]("b3.s2: "+b3.s2);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: b3.s2: HA:s2=deux
(d) Affiche: b3.s2: HB:s2=deux
13. Le code: HA a5=new HB();a5.g();
(a) Provoque une erreur à la compilation
(b) Affiche ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
(d) Affiche HA:g (HA:s1=un HB:s2=deux)
14. Le code: HI i1= new HB(); [Link]([Link]());
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: (HA:s1=un HA:s2=deux)
(c) Affiche: ((HA:s1=un HA:s2=deux)(HB:s1=trois HB:s3=quatre))
(d) Affiche: ((HA:s1=un HB:s2=deux)(HB:s1=trois HB:s3=quatre))
15. Le code: HA a2= new HB(); [Link]("a2.s3: "+a2.s3);
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche: a2.s3: HA:s1=trois
16. Le code:HI i=new HA("x","y"); [Link]([Link]());
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: (HA:s1=x HA:s2=y)
(c) Affiche: (HA:s1=un HA:s2=deux)
17. Le code: HI i2=new HA(); i2.g();
(a) Provoque une erreur à la compilation
(b) Provoque une erreur à l’exécution
(c) Affiche HA:g (HA:s1=un HA:s2=deux)
18. On suppose que l’on ajoute une classe X:
class X {
public static void afficher(HI i) {
[Link]([Link]());
}
}

(a) Cet ajout provoque une erreur à la compilation


(b) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link](new HA()); provoque
une erreur à la compilation
(c) Cet ajout ne provoque pas d’erreur à la compilation et le code [Link](new HA()); affichera
(HA:s1=un HA:s2=deux)

6
19. Peut-on ajouter à la classe HB le méthode définie par:
void g() {[Link]("(" + s1 + " " + s3 + ")");}
(a) oui
(b) non
20. Le code: HA a1=new HB(); [Link]("a1.s1: "+a1.s1);
(a) Provoque une erreur à la compilation ou à l’exécution
(b) Affiche: a1.s1: HA:s1=un
(c) Affiche: a1.s1: HB:s1=trois

7
Section 3. Programmation
L’interface Iterator<E> contient les méthodes boolean hasNext() et E next() (les autres méthodes peuvent
ne pas être implémentées). De même on rappelle que l’interface Iterable<T> contient une seule méthode
Iterator<T> iterator() qui doit être implémentée.
On considère l’interface suivante:
interface PileFile<E> extends Iterable<E> {
void mettre(E elem);
E prendre();
boolean estVide();
boolean estPlein();
Iterator<E> iterator();
}
Cette interface doit servir à la réalisation de piles et de files. On rappelle qu’une pile ou une file construite
sur le type E est une structure de données contenant des objets de type E. Pour une pile l’opération, prendre
retournera l’objet qui a été mis le plus récemment dans cette pile par une opération mettre, pour une file
prendre retournera l’objet qui a été mis le plus anciennement dans cette file par une opération mettre.
La méthode estVide teste si la structure de données ne contient aucun élément. De même dans le cas où
la structure de données ne peut contenir qu’un nombre borné d’éléments, la méthode estPlein teste si de
nouveaux éléments peuvent être ajoutés à la structure de données.
Ici, un itérateur sur une pile ou une file ne doit pas modifier le contenu de la pile ou de la file; la méthode
next retournera successivement les références sur les objets de la structure de données dans l’ordre du plus
ancien au plus récent pour une file et du plus récent au plus ancien pour une pile.
1. Donner une implémentation PileTab<E> d’une pile de PileFile<E> avec un tableau de taille fixe donnée
par une variable d’instance taille qui sera initialisée par le constructeur avec une valeur par défaut égale
à 100. En cas d’opérations impossibles (mettre sur une pile pleine ou prendre sur une pile vide) on
pourra lancer des exceptions Plein ou Vide que l’on définira.
On fera attention à ce que l’implémentation proposée soit efficace (les opérations mettre et prendre
doivent se faire en temps constant).
2. Donner une implémentation FileListe<E> d’une file de PileFile<E> utilisant un chainage défini par une
classe qui sera interne à FileListe<E>:

class Item {
E val;
Item next;
Item(E v, Item n) {
val = v;
next = n;
}
}
On fera attention à ce que l’implémentation proposée soit efficace (les opérations mettre et prendre
doivent se faire en temps constant).
3. Définir une méthode statique ayant deux arguments le premier un Iterator et le deuxième une PileFile
qui ajoute à la PileFile tous les éléments de la structure de données implémentant l’Iterator.
Utiliser cette méthode pour définir une méthode statique permettant de copier le contenu d’une file
pour en faire une pile.

8
Section 4. Questions diverses
Dans toutes les questions suivantes, on suppose que les définitions de classes ci-dessous sont dans la portée
des divers codes proposés, on suppose aussi que ces codes sont dans le même paquetage que ces définitions
de classes.
Bonne réponse=1pt; mauvaise réponse ou réponse incomplète =-0,5pt; absence de réponse =0pt
1. En java:
(a) le type d’une expression est toujours déterminé à la compilation
(b) le type d’une expression peut changer au cours de l’exécution
2. class A1 {
int a = 5;
B1 b=new B1(10);
void f() {[Link]("A1 " + a); b.f();}
class B1 {
B1(int i){a=i;}
void f() {[Link]("B1 " + a); }
}
}

Et le code (new A1()).f();


(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent A1 5 et B1 10
(c) affichent A1 10 et B1 10
3. Le code:
Integer m=new Integer(2);
if (m==2) [Link]("égal"); else [Link]("non égal");
(a) affichera égal
(b) affichera non égal
4. class X implements Cloneable {
public int i = 8; public int[] ti = new int[3];
public Object clone() {X tmp = null;
try {tmp = (X) [Link]();[Link] = [Link]();}catch (Exception e) {}
return tmp; }
}

et le code:
X x1= new X(); [Link][0] = 1;X x3 = (X) [Link](); x3.i = 3;[Link][0] = 3;
[Link]([Link][0] + " " + x1.i);
(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent 3 3
(c) affichent 3 8
(d) affichent 1 3
(e) affichent 1 8

9
5. class E1 extends Exception{}
class E2 extends E1{}
class ZZ {void f() throws E2{}}
class TT extends ZZ{void f(){}}
(a) Ces classes peuvent être compilées
(b) Ces classes ne peuvent pas être compilées
6. En supposant que a et b sont des variables correctement déclarées “a=b+1” est:
(a) une expression
(b) une instruction
7. Le code:
Number t[]=new Integer[10];t[0]=1;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
8. class D {public int val; public D(int i){val=i;}}
class E extends D{public E(int i){super(i);}}
avec le code :
D[] t1= new E[4]; t1[0]=new D(1); t1[1]=new E(3); [Link](t1[0].val+" "+t1[1].val);

(a) provoquent une erreur à la compilation


(b) affichent 1 3
(c) provoquent une erreur à l’exécution
9. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;((A)o).i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)
10. class A{
static int i=0;int j=10;
void f(){[Link]("i="+i);[Link](" j="+j);}
static void g(){this.f();}
}

et le code: (new A()).g();


(a) provoquent une erreur à la compilation
(b) affichent i=0 j=10
(c) provoquent une erreur à l’exécution

10
11. class A2 {
int a = 5;
B2 b=new B2(10);
void f() {[Link]("A2 " + a); b.f();}
class B2 {
int a;
B2(int i){a=i;}
void f() {[Link]("B2 " + this.a); [Link]("B2 " + [Link].a); }
}
}

Et le code (new A2()).f();


(a) provoquent une erreur à la compilation ou à l’exécution
(b) affichent A2 5 B2 10 et B2 10
(c) affichent A2 5 B2 5 et B2 5
(d) affichent A2 5 B2 10 et B2 5
12. Avec la méthode: “static void perm(Integer i,Integer j){Integer tmp; tmp=j; j=i; i=tmp;}” le morceau de
code:
int i1=10,i2=5; perm(i1,i2); [Link](i1);
(a) affichera 10
(b) affichera 5
(c) provoquera une erreur à la compilation ou à l’exécution
13. Le code:
List<Number> ln=new ArrayList<Number>();
[Link](10); [Link](2.3);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
14. class A{static void f(){[Link]("A.f");}}
class B extends A{void f(){[Link]("B.f");}} et le code A a=new B(); a.f();
(a) provoquent une erreur à la compilation
(b) affichent A.f
(c) affichent B.f
15. Avec la méthode: “ static Integer f(int i){Integer n=i; return n;}” le morceau de code:
“Integer n1=2; if (2==f(n1))[Link]("égal"); else [Link]("non égal"); ”
(a) affichera égal
(b) affichera non égal
(c) provoquera une erreur à la compilation ou à l’exécution

11
16. public static void permuter (String s1, String s2, int x1, int x2){
String tmp1=s1; s1=s2; s2=tmp1; int tmp2=x1; x1=x2; x2=tmp2;
}

Considérons: String a="bon"; String b="jour"; int c=3; int d =4; permuter(a,b,c,d);
Quelles seront les valeurs de a,b,c,d après l’exécution de ce code?
(a) "bon", "jour", 3, 4
(b) "jour", "bon", 3, 4
(c) "bon", "jour", 4, 3
(d) "jour", "bon", 4, 3
17. Le code:
List<Integer> li1=new ArrayList<Integer>();
List<? super Integer> lb=li1;
[Link](4); [Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 4
18. Le code:
List<Number> ln=new ArrayList<Number>();
[Link](10); [Link]((Double)2.3);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
19. class E1 extends Exception{}
class E2 extends E1{}
et l’appel de la fonction f définie ci-dessous

void f(){
try{throw new E1(); }
catch (E2 e){[Link]("E2");}
finally {[Link]("Fin");}
}

(a) affichent E2
(b) affichent Fin
(c) affichent E2 et Fin
(d) provoquent une erreur à la compilation
20. Le code:
List<Integer> li=new ArrayList<Integer>();
[Link](3); List<?> lqm1= li;
[Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 3

12
21. class XX {void f(){}; }
class YY extends XX{void f() throws Exception{throw new Exception();}}
(a) Ces classes peuvent être compilées
(b) Ces classes ne peuvent pas être compilées
22. Le code:
List<Number> ln1=new ArrayList<Number>();
List<? super Integer> lnb=ln1;
[Link](5); [Link]([Link](0));
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) affiche 5

23. public static Number somme1(List<Number> L){


double tmp=0.0;
for(Number n:L)tmp = tmp+ [Link]();
return tmp;
}

Et le code:
List<Number> lnum=new ArrayList<Number>();
for(int i=0;i<10;i++)[Link](i);
[Link](somme1(lnum));

(a) provoquent une erreur à la compilation


(b) provoquent une erreur à l’exécution
(c) affichent 45.0
24. Le code:
List<Number> ln=new ArrayList<Integer>();[Link](10) ;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
25. public static Number somme1(List<Number> L){
double tmp=0.0;
for(Number n:L)tmp = tmp+ [Link]();
return tmp;
}

Et le code:
List<Integer> lint=new ArrayList<Integer>();
for(int i=0;i<10;i++)[Link](i);
[Link](somme1(lint));
(a) provoquent une erreur à la compilation
(b) provoquent une erreur à l’exécution
(c) affichent 45.0
26. En java:
(a) toute instruction a un type
(b) toute expression a une valeur

13
27. Le code:
List<?> lqm=new ArrayList<Integer>(); [Link](2);
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
28. Après les déclarations int i,j=0,k,l; le morceau de code “l=1+(k=i=j+2)” est:
(a) est une instruction qui modifie les variables i, k et l
(b) est une expression de type int, qui vaut 3
(c) n’est syntaxiquement pas correct
29. Avec la classe: “class B{int i;B(int i){this.i=i;}}” et la méthode:
“ static void permute(B a,B b){B tmp=a;a=b;b=tmp; }”
le morceau de code:
B a=new B(3); B b=new B(0); permute(a,b);[Link](a.i);
(a) affichera 3
(b) affichera 0
(c) provoquera une erreur à la compilation ou à l’exécution
30. Le code:
Number t[]=new Integer[10];t[0]=3.2;
(a) provoque une erreur à la compilation
(b) provoque une erreur à l’exécution
(c) ne provoque ni erreur à l’exécution ni erreur à la compilation
31. En supposant que f est une méthode ayant un int en paramètre “f(1);” est:
(a) une expression
(b) une instruction
32. Soit la classe : class A {public int i; }. Le code suivant A a=new A();Object o=a;o.i=10;:
(a) est correct (il peut être compilé et exécuté)
(b) n’est pas correct (il ne peut pas être compilé et exécuté)

14
QCM 5
Écrire des classes

Question 1  Qu'est-ce-qu'une classe par rapport à un objet


O Un objet est une instance d'une classe
O Une classe est une instance d'un objet
O Il n'y a aucun lien entre classe et objet

Question 2  Les attributs d'une classe d'objet sont représentés par :


O Des variables locales
O Des variables d'instance
O Des méthodes
O Une entité distincte appelée corps de classe

Question 3  Cette déclaration est faite dans une classe Person. Où cette variable ne
sera-t'elle pas visible?
private int age ;

O Dans les méthodes de la classe Person


O Dans le corps de la classe Person
O Dans le code qui utilise un objet de la classe Person
O Nulle part, elle sera visible partout

Question 4  Que manque-t'il pour que cette déclaration de méthode compile?


public somme (int a, int b)
{
return a + b ;
}

O Rien du tout, c'est correct


O Il manque le type de retour
O On ne peut pas renvoyer directement a+b, il faut créer une variable locale, y placer le résultat de
a+b puis la renvoyer
O Il manque le modicateur private

1
UKO Learning Center QCM 5 : Écrire des classes

Question 5  Voici un constructeur de la classe Person, y-a-t'il un quelconque


problème?
public Person (String n)
{
name = n ;

return ;
}

O On ne peut pas utiliser return dans un constructeur puisqu'il ne doit rien renvoyer
O Un constructeur doit renvoyer une instance, il faut donc mettre return new Person (n) ;
O Aucun problème, return permet simplement de quitter la méthode
O Il faut explicitement mettre void si l'on veut pouvoir faire return

Question 6  Peut-on toujours acher un objet à la console en utilisant [Link]


sans devoir ajouter une méthode public String toString() ;
O Oui
O Non

Question 7  Lorsque plusieurs méthodes ont le même nom (surcharge), comment la


machine virtuelle Java sait-elle laquelle on veut invoquer?
O Elle les essaie toute une à une et prend la première qui fonctionne
O Elle ne devine pas, il faut lui spécier lorsqu'on compile le code
O On indique le numéro de la méthode que l'on veut invoquer
O Elle se base sur les types des paramètres

[Link] 2/2
QCM 3
Structures de contrôle de ux

Question 1  Lequel n'a pas sa place dans cette liste?


O if
O do
O switch
O ?:

Question 2  Toute instruction if peut s'écrire comme une instruction switch équiva-
lente :
O vrai
O faux

Question 3  Toute instructions while peut s'écrire comme une instruction for équi-
valente :
O vrai
O faux

Question 4  Que va acher le code à la console?


int x = 5 ;
double y = 3.5 ;

if (x > 5 && y > x || x + 3 < y + 1)


[Link] ("A") ;
else if (x < y + 1 && x + y <= 12)
[Link] ("B") ;
else
[Link] ("C") ;

O A
O B
O C
O Rien du tout, le code ne compile pas !

1
UKO Learning Center QCM 3 : Structures de contrôle de ux

Question 5  Que va acher le code à la console?


int x = 7 ;

switch (x)
{
case 6 :
case 7 :
case 8 :
[Link] ("A") ;

case 9 :
case 10 :
[Link] ("B") ;
break ;

default :
[Link] ("C") ;
}

O A
O B
O C
O Autre chose
O Rien du tout, le code ne compile pas !

Question 6  Laquelle de ces propositions est équivalente au code donné sachant que
les variables x et y sont de type int?
int z ;
if (x > 5 && x < y)
z = 3;
else
z = 45 ;

O int z = x > 5 && x < y ? 45 : 3 ;


O int z = 6 <= x && y >= x + 1 ? 3 : 45 ;
O int z = ! x > 5 && ! x < y ? 45 : 3 ;
O int z = x + 1 >= 6 && x < y ? 3 : 45 ;

Question 7  Une boucle while qui contient une ou plusieurs instructions continue
peut s'écrire sans celles-ci
O Jamais
O Parfois
O Toujours

[Link] 2/3
UKO Learning Center QCM 3 : Structures de contrôle de ux

Question 8  Que va produire le code ci-dessous?


for ( ; ; ){}

O Une erreur de compilation


O Une erreur d'exécution
O Une boucle innie
O Rien du tout, c'est comme-ci on n'avait rien mis

Question 9  Dans laquelle de ces instructions serait-il étrange de voir une instruction
break?
O do
O for
O switch
O if-else

[Link] 3/3
QCM 2
Expressions et opérateurs

Question 1  Lequel n'est pas une expression?


O x+4
O 3 * (Y - 2) + 1 % 1
O (27 + 2 / 3) <= 3 - 1
O (2 == x - 7 * 3) + 1

Question 2  Quelle est la valeur de l'expression x = 3 * a / 2.0F si l'on suppose que


a est une variable de type int qui vaut 7, que x est une variable de type float et que
la valeur de x avant aectation est 12 ?
O 12.0
O 10.5
O Ce n'est pas une expression
O 10.0

Question 3  Quelle est la valeur de l'expression 39 % 7 ?


O 4
O 5
O 5.6
O 6

Question 4  Quelle est la valeur de l'expression 5 * 3 >= 3 + 5 * 2 ?


O false
O true

Question 5  Quelle est la valeur de l'expression 17 >= 8 * 2 && ! (17 / 2 >= 8) ?


O true
O false

1
UKO Learning Center QCM 2 : Expressions et opérateurs

Question 6  Que va acher à la console le programme ci-dessus?


public static void main(String[] args)
{
int x = 0 ;
x = x+++2 ;

[Link] (x) ;
}

O 0
O 1
O 2
O 3

Question 7  Supposons qu'on aie déclaré char c = 'a' ;, que vaudra l'expression (int)
c?

O On ne peut pas le faire, c'est une narrowing conversion !


O On ne peut pas convertir un type caractère en type entier
O 97, le code ASCII de la lettre a
O 0, tous les caractères de type char convertit en int valent 0

Question 8  Pourquoi est-il équivalent d'écrire double x = 2 ; et double x = 2D ; ?


O Ce n'est pas du tout équivalent ! ! !
O Car le litéral 2 est considéré comme un type primitif double
O Car l'opérateur = est également un opérateur de conversion
O Car on a une conversion par aectation et le litéral 2 de type primitif int est convertit en double

Question 9  Que vaut le résultat de l'aectation int x = 1F / 8 ; ?


O 0.125
O 0
O Une erreur de compilation
O Une erreur d'exécution

Question 10  Qu'elle est la valeur de l'expression 2 * 3 + 1 == 5 + 2 && 1 + 3 * 1


<= 8 / 2 ?

O true
O false
[Link] 2/2
Année universitaire 2014-2015
Université A. Belkaïd
2e année licence informatique
Tlemcen Examen final Programmation Objet
Faculté des Sciences de Programmation Objet
Département d'Informatique
Jeudi 15 janvier 2015
Durée : 1h30
Exercice 1 : Documents non autorisés
Question 1 :
A a = (B) b ;

Pour le compilateur Java, cette instruction est correcte si : (donnez la ou les réponses justes)
a) la classe B est une sous-classe de A
b) la classe B est une superclasse de A
c) le type déclaré de b est une sous-classe de B
d) le type déclaré de b est une superclasse de B
Question 2 :
Un attribut statique est aussi appelé : (donnez la ou les réponses justes)
a) variable d'instance c) variable d'interface
b) variable de classe d) variable locale
Question 3 :
Une classe qui implémente une interface... : (donnez la ou les réponses justes)
a) ...est obligatoirement une interface elle aussi
b) ...est obligatoirement une classe concrète
c) ...peut être une classe concrète à condition de définir toutes les méthodes de l'interface
d) ...est obligatoirement une classe concrète si elle définit toutes les méthodes de l'interface
Exercice 2 :
1. public class Exercice
2. {
3. static private String msg = null;
4. static private int n;
5.
6. Exercice(){
7. n = 1;
8. if (msg == null)
9. msg = "Rouge";
10. affiche();
11. }
12.
13. private void affiche(){
14. [Link](n + msg);
15. if (![Link]("Vert")){
16. msg = "Vert";
17. new Exercice();
18. }
19. }
20.
21. public static void main(String[] args){
22. Exercice x = new Exercice();
23. n++;
24. [Link]();
25. Exercice y = new Exercice();
26. n++;
27. [Link]();
28. [Link]();
29. }
30.
31. }

1) Ce programme peut-il être compilé ? Si oui, qu'affiche-t-il ? Si non, pourquoi ?


2) Mêmes questions en enlevant le mot-clé static de la ligne 3
3) Mêmes questions en enlevant le mot-clé static de la ligne 4
Exercice 3 :
La classe Robot modélise l'état et le comportement de robots virtuels. Chaque robot correspond à un objet qui
est une instance de cette classe.
Chaque robot :
• a un nom (attribut nom : chaîne de caractères)
• a une position : donnée par les attributs entiers x et y, sachant que x augmente en allant vers l'Est et y
augmente en allant vers le Nord,
• a une direction : donnée par l'attribut direction qui prend une des valeurs "Nord", "Est", "Sud" ou
"Ouest"
• peut avancer d'un pas en avant : avec la méthode sans paramètre avance()
• peut tourner à droite de 90° pour changer de direction (si sa direction était "Nord" elle devient "Est", si
c'était "Est" elle devient "Sud", etc.) : avec la méthode sans paramètre droite(). Les robots ne
peuvent pas tourner à gauche.
• peut afficher son état en détail (avec de simples [Link]())
Le nom, la position et la direction d'un robot lui sont donnés au moment de sa création. Le nom est obligatoire
mais on peut ne pas spécifier la position et la direction, qui sont définis par défaut à (0,0) et "Est".
1) Écrire les instructions Java qui permettent de définir la classe Robot, en respectant le principe de
l'encapsulation des données.
2) On veut améliorer ces robots en en créant une Nouvelle Génération, les RobotNG qui ne remplacent pas les
anciens robots mais peuvent cohabiter avec eux.
Les RobotNG savent faire la même chose mais aussi :
• avancer de plusieurs pas en une seule fois grâce à une méthode avance() qui prend en paramètre le
nombre de pas
• tourner à gauche de 90° grâce à la méthode gauche()
• faire demi-tour grâce à la méthode demiTour()
Écrire cette nouvelle classe en spécialisant celle de la première question, sans modifier celle-ci :
a) dans un 1er temps, les nouvelles méthodes appellent les anciennes méthodes pour implémenter le
nouveau comportement : avancer de n pas se fait en avançant de 1 pas n fois, « tourner à gauche » se fait
en tournant 3 fois à droite, faire demi-tour se fait en tournant 2 fois
b) donner une 2e solution plus efficace qui change directement l'état de l'objet sans faire appel aux
anciennes méthodes (...mais attention aux droits d'accès !)
3) On veut mettre ensemble dans un tableau des objets de type Robot et de type RobotNG.
a) comment déclarer le tableau ?
b) comment afficher l'état de tous les robots contenus dans le tableau ?
4) Modifier la classe RobotNG pour pouvoir activer un mode « Turbo » et le désactiver. Dans ce mode, chaque
pas est multiplié par 3. L'appel à la méthode afficher() devra indiquer à la fin si le robot est en mode Turbo
ou pas.
Université Hassan 1er
Faculté des Sciences et Techniques
Settat
Département de Physique Appliqué
Licence Sciences et Techniques
Mécanique Electronique Mécatronique

EXAMENS DE FIN DE SEMESTRE

SEMESTRE : S5

Session : janvier 2015

EPREUVE DE : SYSTEMES PNEUMATIQUES ET HYDRAULIQUES

Durée : 2 heures

Recommandations aux candidats:


Le sujet comporte 5 parties indépendantes A, B, C, D et E.
Il est vivement recommandé de lire entièrement l'énoncé avant de commencer la rédaction de la
composition.
Il sera pris en compte dans la correction la qualité de la rédaction, la clarté des
raisonnements et la propreté de la copie. (2 points).

Barème de notation:

A : ETUDE DE LA PRESSE HYDRAULIQUE DE COMPRESSION DE POUDRES (10


points).
B : CALCUL ET DIMENSIONNEMENT DES VERINS (2 points).
C : QUESTIONS DE COURS (2 points).
D : SIGNIFICATION DES DISTRIBUTEURS (2 points).
E : SCHEMAS SYMBOLIQUES DES COMPOSANTS PNEUMATIQUES (2 points).

Professeur responsable : Said ZOUNDRI

FST Settat LST : MEM


Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques
Page 1
FST Settat LST : MEM, 2014–2015 22/12/2015

A- PRESSE HYDRAULIQUE DE COMPRESSION DE POUDRES


I. Présentation : (THEME)

On se propose d'étudier l'automatisation d'une presse destinée à la fabrication de pièces à


partir de poudres comprimées. « Voir figure suivante »

Figure 1 : schéma descriptif du système

1- PARTIE OPERATIVE

La partie opérative représentée ci-dessus très schématiquement se compose :

 d'un poinçon inférieur fixe C


 d'un poinçon supérieur A et d'une matrice B mobiles
 d'un sous-ensemble de mise en place de la matière
 d'un sous-ensemble d'évacuation de la pièce comprimée

2- PARTIE COMMANDE

La partie commande se compose d’un séquenceur pneumatique.

3- FONCTIONNEMENT

Le fonctionnement général de la presse est le suivant :

 La matrice étant en haut de sa course, le poinçon inférieur qui y demeure


engagé, délimite au-dessus de lui un espace suffisant pour recevoir la matière à
comprimer. Le poinçon supérieur est alors dans sa position la plus haute ce qui
dégage la partie supérieure de la matrice et permet l'introduction de la matière.

Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 2


FST Settat LST : MEM, 2014–2015 22/12/2015
 Quand la matière pulvérulente est en place, le poinçon supérieur descend,
comprime la matière en pénétrant dans la matrice puis remonte en position
haute.
 la matrice descend alors jusqu’à ce que le poinçon inférieur affleure, ce qui
libère la pièce qui vient d'être comprimée. Cette pièce peut ensuite être
évacuée.
 enfin la matrice reprend sa position initiale et un nouveau cycle peut alors
commencer. Ces actions ne pourront être obtenues que si la partie commande
émet les ordres convenables au moment voulu. Les moments voulus seront
déterminés d'après les compte rendus ou informations provenant de la partie
opérative.

4- LE CYCLE DE FONCTIONNEMENT

Le cycle de fonctionnement de la presse est décrit par le tableau suivant :

Etapes Actions Transitions Réceptivités


1 Mettre en place de la matière Transition 1-2 matière en place et départ cycle
2 descendre le poinçon Transition 2-3 fin de compression
3 remonter le poinçon Transition 3-4 poinçon en haut
4 descende la matrice Transition 4-5 matrice en bas
5 évacuer la pièce comprimée Transition 5-6 pièce évacuée
6 remonter la matrice Transition 6-1 matrice en haut

Figure 2 : tableau descriptif du fonctionnement du système

5- Choix technologiques des actionneurs et des capteurs :

 cet exemple étant simplifié, la procédure d'arrêt d'urgence, les modes de marche ainsi
que les sécurités ne sont pas traités.
 la mise en place de la matière est assurée manuellement par l'opérateur. Un voyant V
est allumé pendant toute la durée de la mise en place de la poudre à comprimer.
Cette opération terminée, l'opérateur autorise la poursuite des opérations en appuyant
sur un bouton-poussoir d.
 les mouvements du poinçon supérieur et de la matrice sont effectués au moyen de
vérins hydrauliques double-effet noté A et B. Les positions haute et basse du poinçon
et de la matrice sont contrôlées à l'aide de capteurs de fin de course pneumatiques
notés respectivement, a0 et a1, b1 et b0.
 le pilotage des vérins hydrauliques est effectué par des distributeurs hydrauliques 4/2
à commandes pneumatiques notés A+ et A-, B+ et B-.
 l'évacuation de la pièce est obtenue au moyen d'un jet d'air maintenu pendant une
seconde. Ce jet d'air est commandé par un distributeur E (2/2).

Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 3


FST Settat LST : MEM, 2014–2015 22/12/2015
La figure 3, suivante, donne un aperçu général sur les constituants de la partie opérative
du système.

Poudre à comprimer

Figure 3 : schéma des actionneurs, pré-actionneurs et capteurs du système


a. Ordres
 Vers le milieu extérieur et l'opérateur : voyant V "Référence"
 Commande vers les actionneurs
A+ : descendre le poinçon. A- : remonter le poinçon
B+ : remonter la matrice B- : descendre la matrice
E : évacuer la pièce comprimée (maintien de jet d’air pendant 1s)
b. Informations
Fins de course des actionneurs et capteurs
a0 : poinçon en haut (en position initiale) a1 : fin de compression
b0 : matrice en bas b1 : matrice en haut (en position initiale)
Temporisation
t1 /5/1s : fin de temporisation relative à l’étape 5 (temps d’évacuation de la pièce
comprimée)
Autorisation de déroulement du cycle :
d : autorisation de départ cycle (dcy)

Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 4


FST Settat LST : MEM, 2014–2015 22/12/2015
6- Grafcet du point de vue Commande

1 Réf V
a0.b1.d
2 A+
a1
3 A-
a0
4 B-
b0
5 E T1=1s
t1/5/1s

6 B+
b1
Figure 4 : Grafcet de point de vue commande

7- TRAVAIL DEMANDE

 Sur la feuille de rédaction, établir le Grafcet de point de vue système.


 Sur le document page 7, compléter le schéma de l’installation :
o schéma de commande équivalent au Grafcet de point de vue commande en
utilisant le schéma d’usage du séquenceur pneumatique.
o schéma de puissance des vérins A et B, en utilisant des distributeurs
hydrauliques bistables à commande pneumatique.

B- CALCUL ET DIMENSIONNEMENT DES VERINS


L’effort de serrage que doit exercer le vérin de bridage est
de 6500 N. Si le diamètre d’alésage D est de 125 mm,

 Déterminer la pression théorique nécessaire pour


maintenir la pièce serrée.
 Que devient cette pression s’il existe des frottements internes au vérin engendrant
des pertes de 5

C- QUESTIONS DE COURS
Q 1 : Quelles sont les étapes essentielles permettant l’optimisation d’une
production industrielle ?
Q 2 : A quoi sert l’unité FRL dans un circuit d’alimentation des systèmes
pneumatiques ?

Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 5


FST Settat LST : MEM, 2014–2015 22/12/2015
Nom : ……………………..……………Prénom : ……..………..……… N° : …..…..
D- COMPLETER LA SIGNIFICATION DES DISTRIBUTEURS
DU TABLEAU SUIVANT:

E- IDENTIFIER CHACUN DES ELEMENTS DU SCHEMA


SUIVANT :

Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 6


Schéma de commande et de puissance « PRESSE HYDRAULIQUE DE COMPRESSION DE POUDRES »

Poinçon A
Matice B
a0 a1
b0
b1

B+

0.00 Bar

E T1

0.00 Bar

Réf V
RAZ
Module d'entrée
X1 X2 X3 X4 X5 X6

Module de sortie
Modules d'etapes

d t1/5:1s

Manomètre
m/a 0.00 Bar
Filtre

Régulateur de pression Lubrificateur

FST Settat LST : MEM


Examen de fin de semestre S5, épreuve de : systèmes pneumatiques et hydrauliques Page 7
Université Hassan 1er
Faculté des Sciences & Techniques
Settat
Département de Physique Appliquée
Licence Sciences & Techniques : Mécanique
Electronique Mécatronique

EXAMEN DE FIN DE SOUS MODULE :


SYSTEMES PNEUMATIQUES ET
HYDRAULIQUES
Session : Avril 2014

Semestre : S6

Durée : 2 heures

Recommandations aux candidats:


Il sera pris en compte dans la correction la qualité de la rédaction, la clarté des
raisonnements et la propreté de la copie.
Il est vivement recommandé de lire entièrement l'énoncé avant de commencer la rédaction de la
composition.
Barème de notation:
Partie A : Grafcet de point de vue système (2 points)
Partie B : schéma de commande et de puissance (9 points)
B.1 ……………...…..5 points
B.2 ……………...…..4 points
Partie C : calcul et dimensionnement des vérins (9 points)
C.1…………………..4 points
C.2……………….…..2 points
C.3…………….....…..3 points

Professeur responsable : Said ZOUNDRI

FST Settat LST : MEM 2013–2014


FST Settat LST : MEM, 2013–2014 10/04/2014

REMPLISSAGE AUTOMATIQUE DE CARTOUCHES DE GAZ

I. Présentation : (THEME)

Remplissage automatique de cartouches de gaz ; avec deux amenées


automatiques de cartouches, l’une à l’entrée l’autre à la sortie, à l’aide de deux
convoyeurs « voir figure suivante »

1- PARTIE OPERATIVE

L’installation comprend :
Un ensemble A qui assure la mise en place d’une cartouche vide sur le poste de
travail.
Un ensemble B qui assure le serrage de la cartouche sous le poste de remplissage.
Un ensemble D qui assure le remplissage de la cartouche.

2- FONCTIONNEMENT

Les convoyeurs T1 et T2 fonctionnent en permanence (à ne pas étudier).

Le cycle de fonctionnement ne pourra s’effectuer que si les 3 conditions


suivantes sont vraies :
 Les ensembles A, B et D sont en position recule.
 Le détecteur p sollicité signale la présence d’une cartouche.
 Impulsion sur le bouton départ cycle.

Le remplissage se fait seul lorsque la vanne V est en contact avec la cartouche


(bouteille de gaz).
Lorsque la cartouche est remplie et desserrée, elle est poussée par la
cartouche suivante sur le convoyeur T2 en direction du poste suivant.

Examen de fin de sous module : Systèmes pneumatiques et hydrauliques Page 2


FST Settat LST : MEM, 2013–2014 10/04/2014

II. LE CYCLE DE FONCTIONNEMENT

11-- Amener une cartouche sous le poste de remplissage.


22-- Serrer la cartouche et reculer l’unité d’amenée.
33-- Descendre l’unité de remplissage.
44-- Remplir la cartouche (le temps de remplissage T=10 s)
55-- Remonter l’unité de remplissage.
66-- Desserrer la cartouche.

III. Choix technologiques des actionneurs et des capteurs :

1- Ordres

Vers le milieu extérieur et l'opérateur


Réf : voyant "Référence"
Commande vers les actionneurs
A+ : amener une cartouche vide sur le poste de travail.
A- : reculer l’unité d’amenée
B+ : Serrer la cartouche
B- : Desserrer la cartouche
D+ : Descendre l’unité de remplissage
D- : monter l’unité de remplissage
T1 : lancer le temporisateur T1

2- Informations

Fins de course des actionneurs et capteurs


p : Présence d’une cartouche devant l’unité d’amenée
a0 : l’unité d’amenée en position recule
a1 : cartouche sous le poste de remplissage
b0 : cartouche desserrée
b1 : cartouche serrée
d0 : l’unité de remplissage en position recule
d1 : l’unité de remplissage en position de remplissage.

Temporisation
t1 /3/10s : fin de temporisation relative à l’étape 3 (temps de remplissage des
cartouches de gaz)

Autorisation de déroulement du cycle


dcy : autorisation de départ cycle

Examen de fin de sous module : Systèmes pneumatiques et hydrauliques Page 3


FST Settat LST : MEM, 2013–2014 10/04/2014

[Link]éma synoptique des entrées / sorties

p
A+

a0 A-

a1 B+

B-

Sorties
Entrées

b0
D+
b1
PC
D-

d0
T1

d1

dcy

t1/3/10s

V. Grafcet du point de vue Commande

0 Réf
[Link]
1 A+
a1
2 A- B+
a0.b1 d1

3 D+ T1=10s
t1/3/10s
4 D-
d0
5 B-
b0

Remplissage automatique de cartouches de gaz


Grafcet de point de vue commande

Examen de fin de sous module : Systèmes pneumatiques et hydrauliques Page 4


FST Settat LST : MEM, 2013–2014 10/04/2014

[Link] DEMANDE

A- Etablir le Grafcet de point de vue système. (2 points).

B- Schéma de commande et de puissance (Document ½.)

1. Compléter le schéma de commande équivalent au Grafcet de point de vue


commande en utilisant le schéma d’usage du séquenceur pneumatique à
modules d’étapes TELEMECANIQUE. (5 points) ;
2. Sur le même Document ½, Compléter le schéma de puissance du vérin D (unité de
remplissage), en utilisant un distributeur bistable à commande pneumatique et
deux réducteurs de débit unidirectionnel pour le réglage de la vitesse de
déplacements de la tige du vérin D. (4 points).

C- Calcul et dimensionnement des vérins

1. Calculer les efforts théoriquement développables, en poussant et en tirant, d’un


vérin (D = 100 mm et d = 25 mm) si la pression d’utilisation est de 500 kPa (5 bars).
Refaire la question si les pertes par frottements sont de 12 %. (4 points).

2. La masse de la charge à soulever est de 700 kg (avec


l’accélération de la pesanteur g = 9,81 m/s²). Les pertes par
frottements internes sont estimées à 12%, la pression
d’alimentation en air est de 600 kPa (6 bars). Si les forces
d’inertie et la contre-pression sont négligées, déterminer le
diamètre du piston, déterminer les diamètres normalisés D et
d.. (2 points).

3. Déterminer le diamètre D d’un vérin capable de soulever une


charge de 1000 N lorsque la pression d’air utilisée est de 700
kPa (7 bars) et le taux de charge de 0,7. Choisir les diamètres normalisés D et d.
(3 points).

Examen de fin de sous module : Systèmes pneumatiques et hydrauliques Page 5


Université Hassan 1er
Faculté des Sciences & Techniques Nom : …………………………………
Settat
Département de Physique Appliquée
Licence Sciences & Techniques : Mécanique Prénom : …………………………..
Electronique Mécatronique

Examen de fin de sous module :


Systèmes pneumatiques et hydrauliques
Schéma de commande et de puissance :
Poste de remplissage automatique de cartouches de gaz
FST Settat LST : MEM 2013–2014 Document ½
FST Settat LST : MEM, 2013–2014 10/04/2014 ANNEXE : Document 2/2

Abaques du constructeur donnant le diamètre du piston du vérin en fonction des efforts dynamiques développés par le vérin et de la pression.

D Piston
du Vérin 8 10 12 16 20 25 32 40 50 63 80 100 125 160 200 250 320
(mm)
d Tige
du Vérin 4 4 6 6 10 12 12 18 18 22 22 30 30 40 40 50 50
(mm)

Diamètres normalisés des vérins

Examen de fin de sous module : Systèmes pneumatiques et hydrauliques Page 7


Commande de porte de BUS
Classique
Description :
- Commande d'un vérin double effets pour assurer l'ouverture et la fermeture de la porte de bus.
- On note le vérin "T", commandé par un distributeur 5/2 bistable avec pilotes T+ et T- .
Fonctionnement :
- La tige du vérin doit sortir lorsque la commande du BP Fermeture "f"est actionnée.
- Elle doit rentrée lorsque la commande du BP Ouverture "o"est actionnée.
Remarque :
Les mouvements de la tige du vérin doivent être reglables pour éviter tout bruit nuisible aux
usagers.

cycle v as et v ient Equations : T0 = o T1 = f

T0
o
Vérin double effet T
f
T1

réducteur de débit 1 réducteur de débit 2

PB Sortie (frmeture) f
PB rentrée (ouverture) o

Bouton M/A
0.00 Bar

tête de ligne FRL

Vérin double effet T Vérin double effet T


o

réducteur de débit 1 réducteur de débit 2

réducteur de débit 1 réducteur de débit 2


1-1V2SOL1 1-1V2SOL2
Bouto n M/A

PB Sortie (frmeture) f
PB rentrée (ouverture) o
1-1BPNO1

Bouton M/A 1-1V2SOL1


Bouto n Pou s Ouvertu re
0.00 Bar 0.00 Bar

1-1BPNO2

Manomètre 2 Bouto n Pou s F ermeture


Manomètre 1
Lubrificateur 1
Filtre1 Régulateur 1
Régulateur 2
1-1V2SOL2

Vous aimerez peut-être aussi