Examen 2012-2013 - Dur´ee : 1h30
POO : Programmation Orient´ee Objet
Premi`ere ann´ee
Pr´enom :
Nom :
(cid:2)
(cid:3)
(cid:2)
(cid:3)
(cid:3)
(cid:3)
(cid:2)
(cid:2)
(cid:2)
(cid:3)
(cid:3)
(cid:2)
(cid:2)
(cid:3)
(cid:2)
(cid:3)
(cid:2)
(cid:3)
(cid:3)
(cid:3)
(cid:2)
(cid:2)
(cid:3)
(cid:2)
Vrai Faux
Une classe peut impl´ementer plusieurs interfaces.
Il est impossible d’instancier une classe abstraite.
Il est interdit de d´efinir un constructeur dans une classe abstraite.
Il est toujours possible de d´efinir une sous-classe d’une classe existante.
L’instruction (new Float(1.)).equals(new Float(1.)) est ´evalu´ee `a vraie.
L’instruction (new Integer(10)) == (new Integer(10)) est ´evalu´ee `a vraie.
En Java, toutes les classes de base et les autres classes h´eritent de la classe Object
Une variable d’instance d´eclar´ee private n’est accessible directement que par cette instance.
(cid:46) Question 1. (3 pt)
Indiquer si chaque affirmation est correcte ou non :
Pour rendre le code source d’un programme plus facile a maintenir, on cherche toujours a maximiser
le couplage entre les classes.
Dans une classe, on ne peut d´efinir qu’au plus 64 m´ethodes a deux parametres de types primitifs
portant le mˆeme nom.
Une m´ethode marqu´ee comme private est accessible depuis toutes les autres classes du mˆeme
paquetage.
On ne peut modifier la valeur d’un objet de type Integer dont la r´ef´erence est stock´ee dans une
variable d’instance d´eclar´ee comme final.
CORRECTION
CORRECTION
(cid:3) sub - MethodA , sub - MethodB.
(cid:3) base - MethodA , sub - MethodB.
(cid:3) Une erreur `a la compilation est d´etect´ee ligne 17.
(cid:3) Une erreur `a la compilation est d´etect´ee ligne 18.
(cid:2) Une erreur `a la compilation est d´etect´ee ligne 19.
(cid:46) Question 2. (1 pt)
Consid´erer l’extrait de code Java suivant. Que se passe-t-il si test2() est ´evalu´ee `a la valeur false ?
(cid:46) Question 3. (1 pt)
Consid´erer l’extrait de code Java suivant. Quel sera l’affichage produit par l’ex´ecution de ce code ?
(cid:3) test3() est ´evalu´ee, puis le corps du bloc if est ex´ecut´e.
(cid:3) test3() est ´evalu´ee, puis le corps du bloc if n’est pas ex´ecut´e
(cid:2) test3() n’est pas ´evalu´ee, puis le corps du bloc if n’est pas ex´ecut´e
4
5 }
6
7 class Sub extends Base {
8
1 if (test1() && test2() && test3()) {
2
3 }
comme si l’expression compl`ete ´etait fausse.
comme si l’expression compl`ete ´etait fausse.
Base b = new Sub();
b.methodA();
b.methodB();
public static void main(String args[]) {
System.out.println("base - MethodA");
System.out.println("sub - MethodB");
System.out.println("sub - MethodA");
1 class Base {
2
public void methodA() {
public void methodB() {
/ corps du bloc if /
void methodA() {
}
}
}
}
3
9
10
11
12
13
14
15
16
17
18
19
20
21 }
Examen 2012-2013 - Dur´ee : 1h30
(cid:46) Question 4. (1 pt)
Consid´erer l’extrait de code Java suivant :
4
3
}
}
}
17
19
16
18
8
9
(cid:2)
(cid:3)
Vrai Faux
public int i = 3;
return getSalesAmount() * 0.15;
i = 10;
a = new A();
a.i = 100;
public static void main(String[] args) {
// ins´erer votre d´efinition de m´ethode ici
public static void doSomething(int i, A a) {
L’ex´ecution de ce programme affiche : g
1 public abstract class Employee {
2
protected abstract double getSalesAmount();
public double getCommision() {
10
11 }
12
13 public class C {
14
15
5
6 }
Advertisement
7
8 class Sales extends Employee {
9
10 }
1 public class A {
2
3 }
4
5 public class B {
6
7
1 String example = "Hi girls!";
2 example.toLowerCase();
3 example.charAt(3);
4 System.out.print(example);
int k = 0;
A a = new A();
B.doSomething(k, a);
System.out.println("k = " + k);
System.out.println("a.i = " + a.i);
(cid:46) Question 6. (1 pt)
Consid´erer l’extrait de code Java suivant. Quel est le r´esultat obtenu, si vous essayez de compiler et ex´ecuter ce code ?
(cid:46) Question 5. (1 pt)
Consid´erer l’extrait de code Java suivant. Quelles sont les deux d´efinitions de m´ethodes qui peuvent ˆetre ins´er´ees de
maniere ind´ependante a la ligne 9 pour produire un code correct ?
(cid:3) double getSalesAmount() { return 1.45; }.
(cid:2) public double getSalesAmount() { return 1.45; }.
(cid:3) private double getSalesAmount() { return 1.45; }.
(cid:2) protected double getSalesAmount() { return 1.45; }.
(cid:3) Une erreur est d´etect´ee `a la compilation.
(cid:3) Une exception est lev´ee `a l’ex´ecution.
(cid:2) k = 0 et a.i = 3.
(cid:3) k = 0 et a.i = 100.
(cid:3) k = 10 et a.i = 3.
(cid:3) k = 10 et a.i = 100.
CORRECTION
CORRECTION
a) Corriger le code de la m´ethode test() de la classe MyClass ci-dessous pour qu’il ne provoque plus aucune erreur `a
la compilation. On ne s’int´eressera pas aux erreurs pouvant se produire `a l’ex´ecution. Vous devriez trouver 4 erreurs.
Plusieurs solutions sont possibles, la plus simple consistant `a supprimer tout le code. Vos modifications devront donc
supprimer le moins de code possible et privil´egier le remplacement ou l’ajout d’un mot cl´e ou d’une variable. Justifier
vos modifications.
(cid:46) Question 7. (1 pt)
Consid´erer l’extrait de code Java suivant. Quel est le r´esultat obtenu, si vous essayez de compiler et ex´ecuter ce code ?
(cid:3) Une exception est lev´ee `a l’ex´ecution.
(cid:2) La valeur 3 sera affich´ee deux fois.
(`a cause de l’instruction (new Test()).print(t1)).
(`a cause de l’instruction Test.printStatic(t1)).
Test t1 = new Test(3);
Test.printStatic(t1);
(new Test()).print(t1);
(cid:3) Une erreur est d´etect´ee `a la compilation
(cid:3) Une erreur est d´etect´ee `a la compilation
1 public class Test {
2
3
}
public void print(Test t){
public static void main(String[] args) {
public static void printStatic(Test t){
public Test() {
}
(cid:46) Question 8. (3 pt)
System.out.println(t.i);
System.out.println(t.i);
public Test(int i) {
private int i;
this.i = i;
20
21 }
22
23 }
9
10
16
17
7
8
5
6
12
13
15
11
14
21
19
18
20
}
}
}
4
2
Examen 2012-2013 - Dur´ee : 1h30
6
8
5
9
4
3
7
}
}
12
10
14
13
11
(cid:2)
(cid:2)
(cid:3)
(cid:3)
void test() {
new Canard()
Justification
new Blaireau()
Affiche
termin´e
public void coincoin() {};
System.out.println("termin´e");
Pas
d’affichage
1 class MyClass {
2
animal.coincoin();
animal = new Blaireau();
animal Animal = new Canard();
if (canard instanceof Canard) {
}
if (animal instanceof Animal) {
}
if (animal instanceof Blaireau) {
((Dindon) animal).glousse();
animal = new Animal();
b) En vous basant sur votre version corrig´ee du code, d´eterminer quelle(s) est/sont la/les ex´ecution(s) qui affiche(nt)
la chaˆıne de caracteres termin´e si a la ligne 3, on cr´ee un objet du type propos´e. Justifier votre r´eponse
15
16 }
17
18 abstract class Animal {}
Advertisement
19
20 class Blaireau extends Animal {}
21
22 class Canard extends Animal{
23
24 }
25
26 class Dindon extends Animal{
public void glousse() {};
27
28 }
CORRECTION
CORRECTION
(cid:46) Question 9. (2 pt)
D´eterminer l’affichage en sortie standard lors de l’ex´ecution de la m´ethode test(int i), en fonction de la valeur
entiere i pass´ee en parametre.
27
28 }
29
30 class MyException1 extends Exception {};
31 class MyException2 extends Exception {};
System.out.print("A");
try {
}
System.out.print("M");
System.out.print("E");
if (i == 0)
System.out.print("D");
if (i > 0)
System.out.print("C");
if (i < 0)
}
System.out.print("J");
System.out.print("B");
try {
1 void test(int i) {
2
} catch (MyException2 e) {
} catch (MyException1 e) {
throw new MyException2();
throw new MyException1();
System.out.print("F");
System.out.print("G");
System.out.print("H");
System.out.print("I");
System.out.print("K");
System.out.print("L");
new Dindon()
} finally {
} finally {
(cid:2)
(cid:3)
11
10
12
26
20
22
25
24
21
23
17
14
19
16
15
18
13
4
5
7
6
3
9
8
3
Examen 2012-2013 - Dur´ee : 1h30
6
9
3
6
4
8
7
5
}
}
}
}
}
}
}
}
15
12
29
17
24
28
27
7
8
4
5
13
14
18
19
25
26
10
11
16
17
15
16
20
21
22
30
31 }
23
24 }
void planter(){
s1 and s2 are equals()
protected double taille;
public String toString() {
1 class Foret {
2
public SapinDeNoel(int nb) {
public Sapin(double taille) {
public Arbre(double taille) {
pubic SapinDeNoel(double taille) {
this(nb);
this.taille = taille;
return "ce sapin de no¨el mesure "+taille+
public SapinDeNoel(double taille,int nb) {
" metres et est d´ecor´e de "+nbBoules+" boules.";
9
10 }
Advertisement
11
12 class Arbre {
13
14
18
19 }
20
21 class Sapin extends Arbre {
public Sapin() {
22
23
this.taille = 3.20;
System.out.print(" de type : sapin");
super(taille);
System.out.print(" de type : sapin");
(cid:46) Question 10. (2 pt)
Consid´erer le code suivant.
this.taille = taille;
System.out.print("arbre de "+taille+"m");
1 class SapinDeNoel extends Sapin {
protected int nbBoules;
2
3
b) Mˆeme question en rajoutant le constructeur ci dessous dans la classe Arbre :
this.nbBoules = nb;
System.out.print(" de no¨el avec "+nbBoules+" boules");
super(taille);
this.nbBoules = 15;
System.out.print(" de no¨el avec "+nbBoules+" boules");
SapinDeNoel sap1 = new SapinDeNoel(10);
System.out.println();
System.out.println(sap1);
SapinDeNoel sap2 = new SapinDeNoel(4,8);
System.out.println();
System.out.println(sap2);
a) Pr´eciser l’affichage, si la compilation n’´echoue pas, de l’ex´ecution de la m´ethode planter(). Si la compilation
´echoue, indiquer la cause.
CORRECTION
CORRECTION
(cid:46) Question 11. (2 pt)
Consid´erer la classe suivante et indiquer la/les r´eponses correcte(s) si l’instruction propos´ee est ins´er´ee en ligne
30. Si il n’y a pas d’erreur, pr´eciser l’affichage.
c) Mˆeme question en supprimant le constructeur SapinDeNoel(int nb) de la classe SapinDeNoel. L’ajout pr´ec´edent
est conserv´e.
this.taille = 3.50;
System.out.print("arbre de " + taille + "m");
s1 and s2 are equals()
s1 and s2 are equals()
public Arbre() {
1
2
}
3
4
4
Examen 2012-2013 - Dur´ee : 1h30
Astre.java
7
8
6
}
}
}
17
18
19
31
20
27
28
14
29
30
4
5
(cid:2)
(cid:2)
(cid:3)
(cid:3)
(cid:2)
(cid:2)
(cid:3)
(cid:3)
15
16
true
true
32
33 }
false
false
this.id = myid;
protected int id;
return (d.id == this.id
public Astre(int myid) {
return (a.id == this.id);
&& this.name.equals(d.name));
b = saturne.equals(mars);
b = mars.equals(jupiter);
b = mars.equals(saturne);
b = jupiter.equals(mars);
super(myid);
this.name = name;
Erreur Ok Affichage
1 class Astre {
2
3
public static void main(String args[]) {
21
22 }
23
24 class Main {
25
26
9
10 }
11
12 class Planete extends Astre {
13
}
public boolean equals(Astre a) {
}
public boolean equals(Planete d) {
private String name;
public Planete(int myid, String name) {
boolean b = false;
Planete mars = new Planete(29, "Mars");
Planete jupiter = new Planete(29, "Jupiter");
Astre saturne = new Planete(29, "Saturne");
// instruction a inserer
System.out.println(b);
CORRECTION
CORRECTION
5
Examen 2012-2013 - Dur´ee : 1h30
9
6
7
3
8
}
Advertisement
}
}
}
}
}
13
16
25
26
19
20
22
15
14
21
40
39
4
5
23
24
17
18
15
16
33
34
29
30
11
12
37
38
17
18
31
32
35
36
13
14
9
10
10
11
12
26
27
28
this.d = d;
this.g = g;
a.setG(v1);
this.val = v;
private int val;
return this.val;
return ""+this.val;
this.g = g;
this.d = d;
public Value(int v) {
public int evaluer() {
public int evaluer() {
1 class Main {
2
public void setG(Expr g) {
public void setD(Expr d) {
private Expr g;
private Expr d;
public Add(Expr g, Expr d) {
public String decompiler() {
1 interface Expr {
2
v2 = v1;
v1 = new Value(13);
int evaluer() ;
String decompiler();
public static void main(String args[]) {
Expr v1 = new Value(42);
Expr v2 = new Value(17);
19
20 }
21
22 class Add implements Expr {
23
24
25
3
4 }
5
6 class Value implements Expr {
7
8
// POINT_2 schema m´emoire `a cet instant
System.out.println(v1.decompiler() + " = " + v1.evaluer());
System.out.println(v2.decompiler() + " = " + v2.evaluer());
System.out.println(a.decompiler() + " = " + a.evaluer());
// POINT_3 schema m´emoire `a cet instant
System.out.println(v1.decompiler() + " = " + v1.evaluer());
System.out.println(v2.decompiler() + " = " + v2.evaluer());
System.out.println(a.decompiler() + " = " + a.evaluer());
Add a = new Add(v1, v2);
// POINT_1 schema m´emoire `a cet instant
System.out.println(v1.decompiler() + " = " + v1.evaluer());
System.out.println(v2.decompiler() + " = " + v2.evaluer());
System.out.println(a.decompiler() + " = " + a.evaluer());
(cid:46) Question 12. Sch´ema m´emoire (2 pt)
Consid´erer les classes suivantes et r´ealiser des sch´emas de la m´emoire (´etats de la pile et du tas) lors de l’ex´ecution
de la m´ethode main() de la classe principale Main aux points identifi´es dans le code source (indiqu´es par le marqueur
// POINT_? schema m´emoire `a cet instant).
Vous pr´eciserez l’affichage obtenu sur la sortie standard `a chaque ´etape.
CORRECTION
CORRECTION
a.setD(a);
// POINT_4 schema m´emoire `a cet instant
System.out.println(v1.decompiler() + " = " + v1.evaluer());
System.out.println(v2.decompiler() + " = " + v2.evaluer());
System.out.println(a.decompiler() + " = " + a.evaluer());
return this.g.evaluer() + this.d.evaluer();
return "("+this.g.decompiler()+
public String decompiler() {
"+"+this.d.decompiler()+")";
30
31 }
46
47 }
41
42
43
44
45
28
27
29
}
}
}
6