0% ont trouvé ce document utile (0 vote)
4 vues5 pages

Correction Consolidations POO 2010-2011

un document concours

Transféré par

salifkorogo510
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)
4 vues5 pages

Correction Consolidations POO 2010-2011

un document concours

Transféré par

salifkorogo510
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

Consolidations 2010-2011 - Durée : 2h

POO : Programmation Orientée Objet


Première année

Nom : Prénom :

N
. Question 1. (5 pt)
Indiquer si l’affirmation est correcte ou non :

O
Vrai Faux

I
  Deux classes peuvent hériter de la même classe mère.
  En Java, la méthode qui sera appelée est toujours déterminée à la compilation.







C T
En Java, seul le type dynamique d’une référence est utilisée pour déterminer la méthode à appeler.
Une classe abstraite (abstract) peut être déclarée (final).
L’opérateur de transtypage (cast) permet uniquement de changer le type statique d’une référence.

E
  Une classe peut implémenter deux interfaces définissant la même méthode.
  En Java, l’encapsulation est une encapsulation de classe.







R R
Le receveur d’un appel de méthode peut être de type primitif.
La classe Object est une sous-classe de toutes les classes que l’on peut définir.
Une classe dont tous les champs sont déclarés private ne peut pas être déclarée public.

O
. Question 2. (2 pt)
Parmi les déclarations de classe et d’interface suivantes, indiquer lesquelles sont valides (certaines déclarations seront
ré-utilisées par les déclarations qui les suivent) :

C
(a)  class Foo { } (h)  interface Zoo extends Foo { }
(b)  class Bar implements Foo { } (i)  interface Boo extends Fi { }
(c)  interface Baz { } (j)  class Zoom implements Fi, Baz { }
(d)  interface Fi { } (k)  class Toon extends Foo, Zoom { }
(e)  interface Fee implements Baz { } (l)  interface Vroom extends Fi, Baz { }

N
(f)  interface Zee implements Foo { } (m)  class Yow extends Foo implements Fi { }
. Question 3. (1 pt)

O
Considérer la classe suivante et indiquer la/les réponses correcte(s) si l’instruction proposée est insérée en ligne

I
30. Si il n’y a pas d’erreur, préciser l’affichage.
[Link]
1 class Animal {

T
2 protected long uniqueId;
3
4 public Animal(long myid) {
5 [Link] = myid;

C
6 }
7 public boolean equals(Animal a) {
8 return ([Link] == [Link]);
9 }

E
10 }
11 Erreur Ok Affichage
12 class Duck extends Animal {
13 private String name;

R
14 public Duck(long myid, String name) { flag = [Link](donald);   true
15 super(myid);
16 [Link] = name;
17 } flag = [Link](cloneB);   true

R
18 public boolean equals(Duck d) {
19 return ([Link] == [Link]
20 && [Link]([Link])); flag = [Link](donald);   false
21 }

O
22 }
23 flag = [Link](cloneA);   false
24 class Main {
25 public static void main(String args[]) {

C
26 boolean flag = false;
27 Duck donald = new Duck(1L, "Donald");
28 Duck cloneA = new Duck(1L, "CloneA");
29 Animal cloneB = new Duck(1L, "CloneB");
30 // instruction a inserer
31 [Link](flag);
32 }
33 }
Consolidations 2010-2011 - Durée : 2h

. Question 4. (1 pt)
Considérer la classe suivante et indiquer quelle est/sont la ou les erreur(s) qui empêche(nt) la compilation :
1 class Donut {
2 }

N
3
4 class DonutFactory { Raison(s) de ou des erreur(s) :
5 int donutCount = 0;
6 public DonutFactory() { [Link][Link] non-static variable donutCount cannot be referenced

O
7 }
8 from a static context

I
9 public static Donut cookDonut() {
10 donutCount = donutCount + 1; donutCount = donutCount + 1;
11 return new Donut(); [Link][Link] non-static variable donutCount cannot be referenced
12 }
from a static context

T
13
14 public static int getDonutCount() {
15 return donutCount; donutCount = donutCount + 1;
16 } [Link][Link] non-static variable donutCount cannot be referenced

C
17
18 public static void main(String[] args){ from a static context
19 Donut d1 = [Link]();
20 Donut d2 = [Link](); return donutCount;

E
21 [Link]("count = " + 3 errors
22 [Link]());
23 }
24 }

1
. Question 5. (2 pt)

R
Considérer la classe suivante et indiquer la/les réponses correcte(s) si l’instruction proposée est insérée en ligne

R
25. Si il n’y a pas d’erreur, préciser l’affichage.
class Bidule {
[Link]

O
2 void bipbip(Bidule x) {
3 [Link]("bipbip de Bidule");
4 }
5 void coincoin(Bidule x) {

C
6 [Link]("coincoin de Bidule");
7 }
8 }
9
10 class Machin extends Bidule {
11 void bipbip(Bidule x) {
12 [Link]("bipbip de Machin");
13 }
14 void coincoin(Machin x) {
15 [Link]("coincoin de Machin");
16 }
17 }
18
19 class Test {
20 public static void main(String[] argv) {
21 Bidule x = new Machin();
22 Machin y = new Machin();
23 Bidule z = new Bidule();

N
24
25 // replace here
26 }
27 }

Erreur
(compilation)
Erreur
(exécution)

IO
Ok Affichage

T
[Link](y);    bipbip de Machin

C
[Link](y);    bipbip de Machin

[Link](z);    bipbip de Machin

[Link](y);

[Link](z);

R E








bipbip de Bidule

coincoin de Bidule

R
[Link](y);    coincoin de Bidule

  

O
[Link](y); coincoin de Machin

[Link](y);    coincoin de Bidule

C
2
Consolidations 2010-2011 - Durée: 2h

. Question 6. (1 pt)
Indiquez les concepts mis en œuvre dans le sujet de TP portant sur la course (Race, Team, Racer, etc.)

Vrai


Faux


l’encapsulation.
l’héritage.

O N






le polymorphisme.
la délégation.
la généricité.

TI
. Question 7. (2 pt)

et la liaison dynamique.

E [Link] C
Le programme suivant est constitué d’une seule classe. Récrivez ce programme en utilisant l’héritage, le polymorphisme

R
1 import [Link];
2 import [Link];
3
4 class FormeGeometrique {
public static final int NON_DEFINI = 0;

R
5
6 public static final int RECTANGLE = 1;
7 public static final int CERCLE = 2;
8 public static final int TRIANGLE = 3;
9 public static final int COMPOSEE = 4;

O
10
11 private int type = NON_DEFINI;
12
13 private double a;

C
14 private double b;
15 private double c;
16
17 private List<FormeGeometrique> formes;
18
19 public FormeGeometrique() {
20 [Link] = COMPOSEE;
21 [Link] = new ArrayList<FormeGeometrique>();
22 }
23
24 public FormeGeometrique(double r) {
25 [Link] = CERCLE;
26 this.a = r;
27 }
28
29 public FormeGeometrique(double l, double ll) {
30 [Link] = RECTANGLE;
31 this.a = l;
32 this.b = ll;

N
33 }
34
35 public FormeGeometrique(double c1, double c2, double c3) {
36 [Link] = TRIANGLE;
37 this.a = c1;

O
38 this.b = c2;
39 this.c = c3;

I
40 }
41
42 public void add(FormeGeometrique f) {
43 [Link](f);

T
44 }
45
46 public double calculerPerimetre() {
47 switch ([Link]) {

C
48 case RECTANGLE:
49 return 2.*a+2.*b;
50 case CERCLE:
51 return 2.*[Link]*a;

E
52 case TRIANGLE:
53 return a+b+c;
54 case COMPOSEE:
55 double s = 0.;

R
56 for (FormeGeometrique f : formes)
57 s += [Link]();
58 return s;
59 default:

R
60 return 0.;
61 }
62 }
63
public double calculerAire() {

O
64
65 switch ([Link]) {
66 case RECTANGLE:
67 return a*b;
case CERCLE:

C
68
69 return [Link]*a*a;
70 case TRIANGLE:
71 return 1./4.*[Link]((a+b+c)*(-a+b+c)*(a-b+c)*(a+b-c));
72 case COMPOSEE:
73 double s = 0.;
74 for (FormeGeometrique f : formes)
75 s += [Link]();
76 return s;
77 default:
78 return 0.;
79 }
80 }
81 }
Consolidations 2010-2011 - Durée : 2h

82
83 class DirtyProgram {
84 public static void main(String args[]) {

N
85 FormeGeometrique f1 = new FormeGeometrique(10,10);
86 FormeGeometrique f2 = new FormeGeometrique(10,15,17);
87 FormeGeometrique f3 = new FormeGeometrique();
88 [Link](f1);

O
89 [Link](f2);
90 [Link]("perimetre = "+[Link]());

I
91 }
92 }

T
. Question 8. (1 pt)
Quel est l’intérêt de réaliser une telle transformation. Justifiez votre réponse.

. Question 9. (1 pt)

E C
Il est plus facile de maintenir le programme (rajouter des types d’objets, corriger des erreurs, etc.). On pourrait
factoriser des comportements

Quelle est la différence conceptuelle entre une interface et une classe abstraite ?

R R
L’interface définit un contrat (permet d’avoir différente implémentation). La classe abstraite sert à factoriser du code
tout en interdisant l’instanciation (usage typique dans le cadre d’un patron template method).

. Question 10. (1 pt)

O
Pourquoi Java autorise-t-il la réalisation multiple d’interface et non pas l’héritage multiple ?

Il n’y a pas de problème de conflit dans les interfaces alors que ce n’est pas le cas avec des classes (quelles méthodes

C
appelées en cas de conflit ?)

O N
TI
E C
R R
C O
Consolidations 2010-2011 - Durée : 2h

. Question 11. (3 pt)


Considérer la classe suivante et indiquer la réponse correcte si l’instructions proposée est insérée en ligne 11.

N
[Link]
1 class Machin {} Erreur Erreur Ok
2
3 class Bidule {} (compilation) (exécution)
4

O
5 class Truc extends Machin {} Truc t = (Truc) o;   
6

I
7 class Chose { Machin m = (Machin) o;   
8 public static void main(String args[]) {
9 Object o = new Truc(); Bidule b = (Bidule) o;   
Machin a = new Machin();   

T
10 Truc tr = (Truc) a;
11 // instruction a inserer
12 } Machin m2 = (Machin) a;   
13 } Bidule b2 = (Bidule) a;   

E C
R R
CO

O N
TI
E C
R R
C O

Vous aimerez peut-être aussi