QCM de Programmation Java 2004
QCM de Programmation Java 2004
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.
1
Section 2. Questions spécifiques bonne réponse=3pt ; mauvaise réponse=-1pt ; pas de réponse=0pt
(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);};
}
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; }
}
(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- -; }
}
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); }
} }
(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.
1
Section 2. Questions spécifiques bonne réponse=3pt ; mauvaise réponse=-1pt ; pas de réponse=0pt
(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:
Questions 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Réponse(s)
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:
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;
}
}
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;
}
}
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:
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:
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
1
Question 2:
Question 3:
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; }
};
}
}
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; }
};
}
}
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]());
}
}
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:
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);
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); }
}
}
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; }
};
}
}
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]());
}
}
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:
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);
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); }
}
}
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
Et le code:
List<Number> lnum=new ArrayList<Number>();
for(int i=0;i<10;i++)[Link](i);
[Link](somme1(lnum));
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 3 Cette déclaration est faite dans une classe Person. Où cette variable ne
sera-t'elle pas visible?
private int age ;
1
UKO Learning Center QCM 5 : Écrire des classes
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
[Link] 2/2
QCM 3
Structures de contrôle de ux
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
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
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 ;
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 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
1
UKO Learning Center QCM 2 : Expressions et opérateurs
[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 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 (){
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. }
SEMESTRE : S5
Durée : 2 heures
Barème de notation:
1- PARTIE OPERATIVE
2- PARTIE COMMANDE
3- FONCTIONNEMENT
4- LE CYCLE DE FONCTIONNEMENT
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).
Poudre à comprimer
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
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 ?
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
Semestre : S6
Durée : 2 heures
I. Présentation : (THEME)
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
1- Ordres
2- Informations
Temporisation
t1 /3/10s : fin de temporisation relative à l’étape 3 (temps de remplissage des
cartouches de gaz)
p
A+
a0 A-
a1 B+
B-
Sorties
Entrées
b0
D+
b1
PC
D-
d0
T1
d1
dcy
t1/3/10s
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
[Link] DEMANDE
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)
T0
o
Vérin double effet T
f
T1
PB Sortie (frmeture) f
PB rentrée (ouverture) o
Bouton M/A
0.00 Bar
PB Sortie (frmeture) f
PB rentrée (ouverture) o
1-1BPNO1
1-1BPNO2