Examen 2012-2013

Programming · exam

Voir tous les documents en programmation

Examen 2012-2013 - Durée : 1h30

POO : Programmation Orientée Objet

Première année

Prénom :

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émenter plusieurs interfaces.

Il est impossible d’instancier une classe abstraite.

Il est interdit de définir un constructeur dans une classe abstraite.

Il est toujours possible de définir une sous-classe d’une classe existante.

L’instruction (new Float(1.)).equals(new Float(1.)) est évaluée à vraie.

L’instruction (new Integer(10)) == (new Integer(10)) est évaluée à vraie.

En Java, toutes les classes de base et les autres classes héritent de la classe Object

Une variable d’instance déclarée 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éfinir qu’au plus 64 méthodes a deux parametres de types primitifs

portant le même nom.

Une méthode marquée comme private est accessible depuis toutes les autres classes du même

paquetage.

On ne peut modifier la valeur d’un objet de type Integer dont la référence est stockée dans une

variable d’instance déclarée comme final.

CORRECTION

CORRECTION

(cid:3) sub - MethodA , sub - MethodB.

(cid:3) base - MethodA , sub - MethodB.

(cid:3) Une erreur à la compilation est détectée ligne 17.

(cid:3) Une erreur à la compilation est détectée ligne 18.

(cid:2) Une erreur à la compilation est détectée ligne 19.

(cid:46) Question 2. (1 pt)

Considérer l’extrait de code Java suivant. Que se passe-t-il si test2() est évaluée à la valeur false ?

(cid:46) Question 3. (1 pt)

Considérer l’extrait de code Java suivant. Quel sera l’affichage produit par l’exécution de ce code ?

(cid:3) test3() est évaluée, puis le corps du bloc if est exécuté.

(cid:3) test3() est évaluée, puis le corps du bloc if n’est pas exécuté

(cid:2) test3() n’est pas évaluée, puis le corps du bloc if n’est pas exécuté

4

5 }

6

7 class Sub extends Base {

8

1 if (test1() && test2() && test3()) {

2

3 }

comme si l’expression complète était fausse.

comme si l’expression complète était 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ée : 1h30

(cid:46) Question 4. (1 pt)

Considérer 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érer votre définition de méthode ici

public static void doSomething(int i, A a) {

L’exécution 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 }

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érer l’extrait de code Java suivant. Quel est le résultat obtenu, si vous essayez de compiler et exécuter ce code ?

(cid:46) Question 5. (1 pt)

Considérer l’extrait de code Java suivant. Quelles sont les deux définitions de méthodes qui peuvent être insérées de

maniere indépendante 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étectée à la compilation.

(cid:3) Une exception est levée à l’exécution.

(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.

Publicité

CORRECTION

CORRECTION

a) Corriger le code de la méthode test() de la classe MyClass ci-dessous pour qu’il ne provoque plus aucune erreur à

la compilation. On ne s’intéressera pas aux erreurs pouvant se produire à l’exécution. Vous devriez trouver 4 erreurs.

Plusieurs solutions sont possibles, la plus simple consistant à supprimer tout le code. Vos modifications devront donc

supprimer le moins de code possible et privilégier le remplacement ou l’ajout d’un mot clé ou d’une variable. Justifier

vos modifications.

(cid:46) Question 7. (1 pt)

Considérer l’extrait de code Java suivant. Quel est le résultat obtenu, si vous essayez de compiler et exécuter ce code ?

(cid:3) Une exception est levée à l’exécution.

(cid:2) La valeur 3 sera affichée deux fois.

(à cause de l’instruction (new Test()).print(t1)).

(à 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étectée à la compilation

(cid:3) Une erreur est détectée à 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ée : 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é

public void coincoin() {};

System.out.println("terminé");

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ée du code, déterminer quelle(s) est/sont la/les exécution(s) qui affiche(nt)

la chaˆıne de caracteres terminé si a la ligne 3, on crée un objet du type proposé. Justifier votre réponse

15

16 }

17

18 abstract class Animal {}

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éterminer l’affichage en sortie standard lors de l’exécution de la méthode test(int i), en fonction de la valeur

entiere i passée 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

Publicité

5

7

6

3

9

8

3

Examen 2012-2013 - Durée : 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ël mesure "+taille+

public SapinDeNoel(double taille,int nb) {

" metres et est décoré de "+nbBoules+" boules.";

9

10 }

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érer 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ême question en rajoutant le constructeur ci dessous dans la classe Arbre :

this.nbBoules = nb;

System.out.print(" de noël avec "+nbBoules+" boules");

super(taille);

this.nbBoules = 15;

System.out.print(" de noël 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éciser l’affichage, si la compilation n’échoue pas, de l’exécution de la méthode planter(). Si la compilation

échoue, indiquer la cause.

CORRECTION

CORRECTION

(cid:46) Question 11. (2 pt)

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

30. Si il n’y a pas d’erreur, préciser l’affichage.

c) Même question en supprimant le constructeur SapinDeNoel(int nb) de la classe SapinDeNoel. L’ajout précédent

est conservé.

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ée : 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 {

Publicité

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ée : 1h30

9

6

7

3

8

}

}

}

}

}

}

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émoire à 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émoire à 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émoire à 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éma mémoire (2 pt)

Considérer les classes suivantes et réaliser des schémas de la mémoire (états de la pile et du tas) lors de l’exécution

de la méthode main() de la classe principale Main aux points identifiés dans le code source (indiqués par le marqueur

// POINT_? schema mémoire à cet instant).

Vous préciserez l’affichage obtenu sur la sortie standard à chaque étape.

CORRECTION

CORRECTION

a.setD(a);

// POINT_4 schema mémoire à 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