Examen 2012-2013

Programming · exam

Voir tous les documents en programmation

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 }

Publicité

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 {}

Publicité

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 }

Publicité

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

}

Publicité

}

}

}

}

}

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