60
2i002 - Cours 11 : Annales Vincent Guigue - [email protected] Vincent Guigue 2i002 - Cours 11 - Annales 1/38

2i002 - Cours 11 : Annales - guigue/wikihomepage/uploads/Course/2016_2i002... · par objets avec Java LI230 ... Documents autorise«s : polycopie«de cours de Jacques Rivie`res Le

  • Upload
    trannga

  • View
    225

  • Download
    1

Embed Size (px)

Citation preview

2i002 - Cours 11 : Annales

Vincent Guigue - [email protected]

Vincent Guigue 2i002 - Cours 11 - Annales 1/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 2/38

1 System . out . p r i n t l n ( " coucou" ) ;

A quoi correspondent : System, out et println ? Les choixpossibles de réponses sont : au nom d’une classe, au nom d’unevariable d’instance, à une variable statique, à un appel à uneméthode d’instance, à un appel à une méthode statique. Justifierbrièvement.

Vincent Guigue 2i002 - Cours 11 - Annales 3/38

Soit les classes suivantes A et B et le main associé :1 pub l i c c l a s s A{2 p r i v a t e i n t i ;3 pub l i c A( i n t i ){ t h i s . i=i ; }4 pub l i c A c l on e ( ){5 re tu rn new A( i ) ; }6 }

1 pub l i c c l a s s B{2 p r i v a t e A a ;3 pub l i c B(A a ){ t h i s . a=a ; }4 pub l i c B c l on e ( ){5 re tu rn new B( a ) ; }6 }

1 pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ){2 A a1 = new A( 2 ) ;3 A a2 = a1 . c l o n e ( ) ;4 A a3 = a1 ;5 i f ( a1 == a2 ) System . out . p r i n t l n ( "a1␣==␣a2" ) ;6 i f ( a2 == a3 ) System . out . p r i n t l n ( "a2␣==␣a3" ) ;7 i f ( a3 == a1 ) System . out . p r i n t l n ( "a3␣==␣a1" ) ;8 }

Combien y a-t-il d’instances de la classe A créées lors de l’exécutiondu main ?Qu’est-ce qui s’affiche lors de l’exécution du programme ?

Vincent Guigue 2i002 - Cours 11 - Annales 4/38

Nous ajoutons les instructions suivantes dans le main précédent.1 i f ( a1 . e qu a l s ( a2 ) ) System . out . p r i n t l n ( "a1 . e qu a l s ( a2 ) " ) ;2 i f ( a2 . e qu a l s ( a3 ) ) System . out . p r i n t l n ( "a2 . e qu a l s ( a3 ) " ) ;3 i f ( a3 . e qu a l s ( a1 ) ) System . out . p r i n t l n ( "a3 . e qu a l s ( a1 ) " ) ;

Le programme compile-t-il toujours ? Dans l’affirmative, qu’est-cequi s’affiche lors de l’exécution ? (Justifier brièvement)Donner le code de la méthode standard boolean equals(Objecto) à ajouter dans la classe A pour tester l’égalité structurelle entre2 instances

Vincent Guigue 2i002 - Cours 11 - Annales 5/38

Etudions le code du programme suivant :1 pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ){2 A a1 = new A( 2 ) ;3 B b1 = new B( a1 ) ;4 B b2 = b1 . c l o n e ( ) ;5 }

◦ Donner la représentation de la mémoire à la fin de l’exécutiondu code. Combien d’instances de A et B sont créées ?

◦ La question précédente met en évidence le mauvaisfonctionnement de la méthode de clonage de la classe B :proposer une amélioration.

◦ Donner le code de la méthode standard booleanequals(Object o) à ajouter dans la classe B pour testerl’égalité structurelle entre 2 instances.

Vincent Guigue 2i002 - Cours 11 - Annales 6/38

Encore une étude de cas :1 pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ){2 A [ ] tab = new A [ 5 ] ;3 f o r ( i n t i =0; i <=5; i++) System . out . p r i n t l n ( tab [ i ] ) ;4 }

Le programme compile-t-il ? Dans l’affirmative, que se passe-t-il lorsde l’exécution ?

Vincent Guigue 2i002 - Cours 11 - Annales 7/38

1 pub l i c c l a s s Mere {2 pub l i c Mere ( ){}3 pub l i c vo id maMethode ( double d ){4 System . out . p r i n t l n ( " arg ␣ : ␣ doub l e ␣=␣"+d ) ;5 }6 }7 pub l i c c l a s s F i l l e extends Mere{8 pub l i c F i l l e ( ){}9 pub l i c vo id maMethode ( i n t i ){

10 System . out . p r i n t l n ( " arg ␣ : ␣ i n t ␣=␣"+i ) ;11 }12 }

1 pub l i c s t a t i c vo id main ( S t r i n g [ ] a r g s ) {2 Mere m = new Mere ( ) ;3 F i l l e f = new F i l l e ( ) ;4 Mere mf = new F i l l e ( ) ;56 m. maMethode ( 2 ) ;7 f . maMethode ( 2 ) ;8 mf . maMethode ( 2 ) ;9

10 m. maMethode ( 2 . 5 ) ;11 f . maMethode ( 2 . 5 ) ;12 mf . maMethode ( 2 . 5 ) ;13 }

Quels sont les affichages observés dans la console suite àl’exécution de ce programme ?NB : 5 réponses sont assez triviales mais 1 ligne est plus délicate.Expliquer en détail ce qui se passe avec cette ligne.

Nous ajoutons une implémentation de la méthode public doublemaMethode(double d) dans la classe Mere : le code compile-t-iltoujours ?

Vincent Guigue 2i002 - Cours 11 - Annales 8/38

1 pub l i c c l a s s P i l e {2 p r i v a t e s t a t i c f i n a l3 i n t TAILLE = 10 ;4 p r i v a t e i n t [ ] contenu ;5 p r i v a t e i n t n i v eau ;67 pub l i c P i l e ( ){8 contenu = new i n t [ TAILLE ] ;9 n i v eau = 0 ;

10 }11 pub l i c vo id push ( i n t i ){12 contenu [ n i v eau ] = i ;13 n i v eau++;14 }15 pub l i c i n t pop ( ){16 i n t r = contenu [ n i v eau ] ;17 n i v eau −−; re tu rn r ;18 }19 }

1 c l a s s P i l e E x c e p t i o n2 extends Excep t i on {3 pub l i c P i l e E x c e p t i o n4 ( S t r i n g message ) {5 super ( message ) ;6 }7 }

Proposer des nouvelles versionspour les méthodes push et popqui lèvent une PileExceptionlorsque nous tentons :◦ d’appeler push alors que la

pile contient déjà 10éléments

◦ d’appeler pop alors que lapile est vide (0 élémentsdans contenu)

NB : les exceptions sont délé-guées, elles ne sont pas traitéesau niveau local.

Vincent Guigue 2i002 - Cours 11 - Annales 9/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 10/38

Retro-engineering

1 pub l i c s t a t i c vo id main ( S t r i n g a r g s [ ] ) {2 Exp r e s s i o n v1=new Va l eu r ( 4 . ) ;3 Exp r e s s i o n v2=new Va l eu r ( 1 . ) ;4 Exp r e s s i o n v3=new Va l eu r ( 7 . ) ;5 Exp r e s s i o n v4=new Va l eu r ( 5 . ) ;6 Exp r e s s i o n v5=new Va l eu r ( 3 . ) ;7 Exp r e s s i o n v6=v5 ;8 Opera t i on p1=new Plus ( v1 , v2 ) ;9 Opera t i on m2=new Moins ( v3 , v4 ) ;

10 Opera t i on mult=new Mu l t i p l i e ( p1 , v5 ) ;11 Opera t i on p2=new Plus ( v6 , mult ) ;12 Opera t i on d=new D i v i s e ( p2 ,m2 ) ;13 System . out . p r i n t l n ( d+"="+d . ge tVa l ( ) ) ;14 }

Donner la hierarchie des classes et les signatures des méthodes

Vincent Guigue 2i002 - Cours 11 - Annales 11/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 12/38

LI230-2012oct – Examen Session 1 - 15/01/2013 UPMC

Elements de programmationpar objets avec JavaLI230

Examen du 15 janvier 2013 - Duree : 2 heures

Documents autorises : polycopie de cours de Jacques Rivieres

Le bareme sur 60 points est donne a titre indicatif :Partie A : Questions de cours (20 points)Partie B : Probleme (40 points)

Question 0 : Ecrivez votre numero d’anonymat de maniere bien visible sur les pages 1 et 3 de votrecopie d’examen.

Partie A : Questions de cours (20 points)

Attention : Pour chacune de vos reponses aux questions ci-dessous, il est importantd’expliquer brievement mais avec precision vos reponses.

Question 1 (2 points) : Soit l’instruction : Integer.parseInt(chaine) ; qui transforme unechaıne de caracteres en un entier. Dans cette instruction, (a) a quoi correspond Integer ? (b) a quoicorrespond parseInt(chaine) ? Les choix possibles de reponses sont : au nom d’une classe, au nomd’une variable d’instance, a une variable statique, a un appel a une methode d’instance, a un appela une methode statique. Expliquez precisement chacune de vos reponses aux questions (a) et (b).

(a) Integer correspond au nom d’une classe, car il commence par une majuscule.(b) parseInt(chaine) correspond a un appel a une methode statique, c’est une methode car ily a des parentheses et elle est statique car Integer est le nom d’une classe, et non pas un objet.

Question 2 (2 points) : Soit la classe : public class A { } et l’instruction A obj=new A() ;

L’objet reference par obj : (a) possede-t-il une methode toString() ? (b) a-t-il ete construit avecun constructeur ? Si oui lequel. Expliquez precisement vos reponses aux questions (a) et (b).

(a) Oui, car par defaut toute classe herite de la classe Object qui contient une methodetoString().(b) Oui, car si une classe ne contient pas de constructeurs, par defaut, Java ajoute constructeursans parametre. Si un constructeur a ete ecrit dans la classe alors ce constructeur n’est pas ajoute.

Question 3 (3 points) : On considere les coordonnees GPS (latitude et longitude) des villessuivantes : Paris 48.86N 2.35E, Marseille 43.30N 5.37E, Lyon 45.76N 4.84E. Pour simplifier, on

Vincent Guigue 2i002 - Cours 11 - Annales 13/38

LI230-2012oct – Examen Session 1 - 15/01/2013 UPMC

Elements de programmationpar objets avec JavaLI230

Examen du 15 janvier 2013 - Duree : 2 heures

Documents autorises : polycopie de cours de Jacques Rivieres

Le bareme sur 60 points est donne a titre indicatif :Partie A : Questions de cours (20 points)Partie B : Probleme (40 points)

Question 0 : Ecrivez votre numero d’anonymat de maniere bien visible sur les pages 1 et 3 de votrecopie d’examen.

Partie A : Questions de cours (20 points)

Attention : Pour chacune de vos reponses aux questions ci-dessous, il est importantd’expliquer brievement mais avec precision vos reponses.

Question 1 (2 points) : Soit l’instruction : Integer.parseInt(chaine) ; qui transforme unechaıne de caracteres en un entier. Dans cette instruction, (a) a quoi correspond Integer ? (b) a quoicorrespond parseInt(chaine) ? Les choix possibles de reponses sont : au nom d’une classe, au nomd’une variable d’instance, a une variable statique, a un appel a une methode d’instance, a un appela une methode statique. Expliquez precisement chacune de vos reponses aux questions (a) et (b).

(a) Integer correspond au nom d’une classe, car il commence par une majuscule.(b) parseInt(chaine) correspond a un appel a une methode statique, c’est une methode car ily a des parentheses et elle est statique car Integer est le nom d’une classe, et non pas un objet.

Question 2 (2 points) : Soit la classe : public class A { } et l’instruction A obj=new A() ;

L’objet reference par obj : (a) possede-t-il une methode toString() ? (b) a-t-il ete construit avecun constructeur ? Si oui lequel. Expliquez precisement vos reponses aux questions (a) et (b).

(a) Oui, car par defaut toute classe herite de la classe Object qui contient une methodetoString().(b) Oui, car si une classe ne contient pas de constructeurs, par defaut, Java ajoute constructeursans parametre. Si un constructeur a ete ecrit dans la classe alors ce constructeur n’est pas ajoute.

Question 3 (3 points) : On considere les coordonnees GPS (latitude et longitude) des villessuivantes : Paris 48.86N 2.35E, Marseille 43.30N 5.37E, Lyon 45.76N 4.84E. Pour simplifier, on

Vincent Guigue 2i002 - Cours 11 - Annales 14/38

LI230-2012oct – Examen Session 1 - 15/01/2013 UPMC

Elements de programmationpar objets avec JavaLI230

Examen du 15 janvier 2013 - Duree : 2 heures

Documents autorises : polycopie de cours de Jacques Rivieres

Le bareme sur 60 points est donne a titre indicatif :Partie A : Questions de cours (20 points)Partie B : Probleme (40 points)

Question 0 : Ecrivez votre numero d’anonymat de maniere bien visible sur les pages 1 et 3 de votrecopie d’examen.

Partie A : Questions de cours (20 points)

Attention : Pour chacune de vos reponses aux questions ci-dessous, il est importantd’expliquer brievement mais avec precision vos reponses.

Question 1 (2 points) : Soit l’instruction : Integer.parseInt(chaine) ; qui transforme unechaıne de caracteres en un entier. Dans cette instruction, (a) a quoi correspond Integer ? (b) a quoicorrespond parseInt(chaine) ? Les choix possibles de reponses sont : au nom d’une classe, au nomd’une variable d’instance, a une variable statique, a un appel a une methode d’instance, a un appela une methode statique. Expliquez precisement chacune de vos reponses aux questions (a) et (b).

Question 2 (2 points) : Soit la classe : public class A { } et l’instruction A obj=new A() ;

L’objet reference par obj : (a) possede-t-il une methode toString() ? (b) a-t-il ete construit avecun constructeur ? Si oui lequel. Expliquez precisement vos reponses aux questions (a) et (b).

Question 3 (3 points) : On considere les coordonnees GPS (latitude et longitude) des villessuivantes : Paris 48.86N 2.35E, Marseille 43.30N 5.37E, Lyon 45.76N 4.84E. Pour simplifier, onsupposera que toutes les coordonnees considerees sont dans l’hemisphere Nord et a l’Est. Par exemple,cela signifie que pour la ville de Paris la latitude est 48.86 et la longitude 2.35.

Q3.1 : Dans une methode main, donner la declaration et l’initialisation d’un tableau tabCoord dedouble a deux dimensions permettant de stocker la valeur de latitude et de longitude de ces 3 villes.

Q3.2 : Soit la classe suivante :

1 public class CoordGPS {2 private double l a t i t ude , l ong i tude ;3 public CoordGPS(double la , double l o ) { l a t i t u d e=la ; l ong i tude=lo ; }4 public St r ing toS t r i ng ( ) { return l a t i t u d e+"N "+long i tude+"E" ; } }Dans une methode main, donner la declaration et l’initialisation d’un tableau tabObj de CoordGPS

permettant de stocker la valeur de latitude et de longitude de ces 3 villes.

Q3.3 : Quel est le resultat produit par chacune des instructions suivantes :(a) System.out.println(tabCoord[10][0]) ? (b) System.out.println(tabObj[1]) ?

Vincent Guigue 2i002 - Cours 11 - Annales 15/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 2

Question 4 (3 points) : Soient les classes suivantes :

1 public class Rec ip i ent {2 private stat ic int nbRec ip ients =0;3 private int numero ;4 private double volume ;5 public Rec ip i ent (double vo l ) {6 nbRec ip ients++;7 numero=nbRec ip ients ;8 volume=vol ;9 }

10 public stat ic int getNumero ( ) { return numero ; }11 }12 public class Verre extends Rec ip i ent {13 private double hauteur ;14 public Verre (double volume ) { hauteur=volume ; }15 public Verre (double hauteur ) { this . hauteur=hauteur ; }16 }Dans ces classes, il y a 3 categories tres di↵erentes d’erreurs detectees a la compilation (on ne prendrapas en compte les erreurs de sens qui ne sont pas detectees a la compilation). Expliquez precisementces trois categories d’erreurs et proposez une solution qui compile pour chaque erreur.

Question 5 (4 points) : Soient les classes suivantes :

1 public class Animal {2 public St r ing toS t r i ng ( ) { return "Animal" ; } }3 public class Oiseau extends Animal {4 public St r ing toS t r i ng ( ) { return "Oiseau" ; } }5 public class I n s e c t e extends Animal { }6 public class Cigogne extends Oiseau { }7 public class Corbeau extends Oiseau {8 public St r ing toS t r i ng ( ) { return "Corbeau" ; } }9 public class L i b e l l u l e extends I n s e c t e { }

10 public class Sau t e r e l l e extends I n s e c t e {11 public St r ing toS t r i ng ( ) { return "Sauterelle" ; } }12 public class TestAnimal {13 public stat ic void main ( St r ing [ ] a rgs ) {14 Cigogne c i g1=new Cigogne ( ) ; System . out . p r i n t l n ( c i g1 ) ;15 Corbeau corb1=new Corbeau ( ) ; System . out . p r i n t l n ( corb1 ) ;16 L i b e l l u l e l 1=new L i b e l l u l e ( ) ; System . out . p r i n t l n ( l 1 ) ;17 Sau t e r e l l e s1=new Sau t e r e l l e ( ) ; System . out . p r i n t l n ( s1 ) ;18 Animal a1=new Cigogne ( ) ; System . out . p r i n t l n ( a1 ) ;19 Animal a2=new Corbeau ( ) ; System . out . p r i n t l n ( a2 ) ;20 Animal a3=new L i b e l l u l e ( ) ; System . out . p r i n t l n ( a3 ) ;21 Animal a4=new Sau t e r e l l e ( ) ; System . out . p r i n t l n ( a4 ) ;22

23 I n s e c t e i 1=new Animal ( ) ;24 I n s e c t e i 2=new Oiseau ( ) ;25 I n s e c t e i 3=new L i b e l l u l e ( ) ;26

27 I n s e c t e i 4=( In s e c t e ) a4 ;28 I n s e c t e i 5=( In s e c t e ) a2 ; } }

Vincent Guigue 2i002 - Cours 11 - Annales 16/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 2

Question 4 (3 points) : Soient les classes suivantes :

1 public class Rec ip i ent {2 private stat ic int nbRec ip ients =0;3 private int numero ;4 private double volume ;5 public Rec ip i ent (double vo l ) {6 nbRec ip ients++;7 numero=nbRec ip ients ;8 volume=vol ;9 }

10 public stat ic int getNumero ( ) { return numero ; }11 }12 public class Verre extends Rec ip i ent {13 private double hauteur ;14 public Verre (double volume ) { hauteur=volume ; }15 public Verre (double hauteur ) { this . hauteur=hauteur ; }16 }Dans ces classes, il y a 3 categories tres di↵erentes d’erreurs detectees a la compilation (on ne prendrapas en compte les erreurs de sens qui ne sont pas detectees a la compilation). Expliquez precisementces trois categories d’erreurs et proposez une solution qui compile pour chaque erreur.

Question 5 (4 points) : Soient les classes suivantes :

1 public class Animal {2 public St r ing toS t r i ng ( ) { return "Animal" ; } }3 public class Oiseau extends Animal {4 public St r ing toS t r i ng ( ) { return "Oiseau" ; } }5 public class I n s e c t e extends Animal { }6 public class Cigogne extends Oiseau { }7 public class Corbeau extends Oiseau {8 public St r ing toS t r i ng ( ) { return "Corbeau" ; } }9 public class L i b e l l u l e extends I n s e c t e { }

10 public class Sau t e r e l l e extends I n s e c t e {11 public St r ing toS t r i ng ( ) { return "Sauterelle" ; } }12 public class TestAnimal {13 public stat ic void main ( St r ing [ ] a rgs ) {14 Cigogne c i g1=new Cigogne ( ) ; System . out . p r i n t l n ( c i g1 ) ;15 Corbeau corb1=new Corbeau ( ) ; System . out . p r i n t l n ( corb1 ) ;16 L i b e l l u l e l 1=new L i b e l l u l e ( ) ; System . out . p r i n t l n ( l 1 ) ;17 Sau t e r e l l e s1=new Sau t e r e l l e ( ) ; System . out . p r i n t l n ( s1 ) ;18 Animal a1=new Cigogne ( ) ; System . out . p r i n t l n ( a1 ) ;19 Animal a2=new Corbeau ( ) ; System . out . p r i n t l n ( a2 ) ;20 Animal a3=new L i b e l l u l e ( ) ; System . out . p r i n t l n ( a3 ) ;21 Animal a4=new Sau t e r e l l e ( ) ; System . out . p r i n t l n ( a4 ) ;22

23 I n s e c t e i 1=new Animal ( ) ;24 I n s e c t e i 2=new Oiseau ( ) ;25 I n s e c t e i 3=new L i b e l l u l e ( ) ;26

27 I n s e c t e i 4=( In s e c t e ) a4 ;28 I n s e c t e i 5=( In s e c t e ) a2 ; } }

Vincent Guigue 2i002 - Cours 11 - Annales 17/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 3

Q5.1 : Qu’a�che chacune des instructions des lignes 14 a 17 ? Expliquez. Quelle di↵erence avecl’a�chage des lignes 18 a 21 ? Expliquez.

Q5.2 : Parmi les lignes 23 a 25, lesquelles sont correctes, lesquelles sont fausses. Expliquez.

Q5.3 : Les lignes 27 et 28 provoquent-elles une erreur a la compilation ? a l’execution ? Expliquez.

Q5.4 : Dans la classe Animal, on rajoute une methode abstraite. Expliquez les consequences pourla classe Animal et pour ses classes filles. Cela ajoute-t-il des erreurs dans la methode main ?

Question 6 (3 points) : On considere une lampe avec 2 ampoules. Soient les classes suivantes :

1 public class Ampoule {2 private int pu i s sance ;3 public Ampoule ( ) { pu i s sance=( int ) (Math . random ( ) 91) +10; }4 public St r ing toS t r i ng ( ) { return "Ampoule "+pui s sance+"W" ;}5 }6 public class Lampe {7 private Ampoule amp1 , amp2 ;8 public Lampe ( ) { amp1=new Ampoule ( ) ; amp2=new Ampoule ( ) ; }9 public St r ing toS t r i ng ( ) { return "Lampe avec "+amp1+" et "+amp2 ; }

10 }11 public class TestLampe {12 public stat ic void main ( St r ing [ ] a rgs ) {13 Lampe lp1=new Lampe ( ) ;14 }15 }On souhaite creer une nouvelle lampe qui soit la copie conforme de la lampe lp1 dans la methodemain. Donnez precisement toutes les methodes et instructions qu’il faut ajouter, y compris les ins-tructions necessaires dans la methode main.

Question 7 (3 points) : Chaıne de caracteres et fluxString est une classe immutable, c’est-a-dire qu’une variable de type String ne peut pas etremodifiee. Lorsque l’on pense modifier un objet String, en verite, on cree un nouvel objet String,et on perd l’ancien. Par exemple, soit String s="Bonjour" ; alors s=s+" Paul" ; est equivalent as=new String(s+" Paul") ;. On veut ecrire un programme en java qui cree une unique chaıne decaracteres a partir des arguments qui sont passes en ligne de commande. Par exemple, pour les lignesde commande suivantes :

java TestChaine Bonjour a tous le monde.

java TestChaine Comment ca va ?

les chaınes a creer sont respectivement “Bonjour a tous le monde.” et “Comment ca va ?”. Onrappelle que les arguments passes en ligne de commande sont contenus dans le tableau de chaınes decaracteres args de la methode main, chaque case du tableau est un argument. Par exemple, pour lapremiere ligne de commande, args[0]="Bonjour", args[1]="a", args[2]="tous", args[3]="le"et args[4]="monde.". Soit la classe Testchaine contenant la methode main suivante :

1 public class TestChaine {2 public stat ic void main ( St r ing [ ] a rgs ) {3 System . out . p r i n t l n ("La chaine saisie est = "+concatener ( args ) ) ;4 }5 }

Vincent Guigue 2i002 - Cours 11 - Annales 17/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 3

Q5.1 : Qu’a�che chacune des instructions des lignes 14 a 17 ? Expliquez. Quelle di↵erence avecl’a�chage des lignes 18 a 21 ? Expliquez.

Q5.2 : Parmi les lignes 23 a 25, lesquelles sont correctes, lesquelles sont fausses. Expliquez.

Q5.3 : Les lignes 27 et 28 provoquent-elles une erreur a la compilation ? a l’execution ? Expliquez.

Q5.4 : Dans la classe Animal, on rajoute une methode abstraite. Expliquez les consequences pourla classe Animal et pour ses classes filles. Cela ajoute-t-il des erreurs dans la methode main ?

Question 6 (3 points) : On considere une lampe avec 2 ampoules. Soient les classes suivantes :

1 public class Ampoule {2 private int pu i s sance ;3 public Ampoule ( ) { pu i s sance=( int ) (Math . random ( ) 91) +10; }4 public St r ing toS t r i ng ( ) { return "Ampoule "+pui s sance+"W" ;}5 }6 public class Lampe {7 private Ampoule amp1 , amp2 ;8 public Lampe ( ) { amp1=new Ampoule ( ) ; amp2=new Ampoule ( ) ; }9 public St r ing toS t r i ng ( ) { return "Lampe avec "+amp1+" et "+amp2 ; }

10 }11 public class TestLampe {12 public stat ic void main ( St r ing [ ] a rgs ) {13 Lampe lp1=new Lampe ( ) ;14 }15 }On souhaite creer une nouvelle lampe qui soit la copie conforme de la lampe lp1 dans la methodemain. Donnez precisement toutes les methodes et instructions qu’il faut ajouter, y compris les ins-tructions necessaires dans la methode main.

Question 7 (3 points) : Chaıne de caracteres et fluxString est une classe immutable, c’est-a-dire qu’une variable de type String ne peut pas etremodifiee. Lorsque l’on pense modifier un objet String, en verite, on cree un nouvel objet String,et on perd l’ancien. Par exemple, soit String s="Bonjour" ; alors s=s+" Paul" ; est equivalent as=new String(s+" Paul") ;. On veut ecrire un programme en java qui cree une unique chaıne decaracteres a partir des arguments qui sont passes en ligne de commande. Par exemple, pour les lignesde commande suivantes :

java TestChaine Bonjour a tous le monde.

java TestChaine Comment ca va ?

les chaınes a creer sont respectivement “Bonjour a tous le monde.” et “Comment ca va ?”. Onrappelle que les arguments passes en ligne de commande sont contenus dans le tableau de chaınes decaracteres args de la methode main, chaque case du tableau est un argument. Par exemple, pour lapremiere ligne de commande, args[0]="Bonjour", args[1]="a", args[2]="tous", args[3]="le"et args[4]="monde.". Soit la classe Testchaine contenant la methode main suivante :

1 public class TestChaine {2 public stat ic void main ( St r ing [ ] a rgs ) {3 System . out . p r i n t l n ("La chaine saisie est = "+concatener ( args ) ) ;4 }5 }

Vincent Guigue 2i002 - Cours 11 - Annales 18/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 3

Q5.1 : Qu’a�che chacune des instructions des lignes 14 a 17 ? Expliquez. Quelle di↵erence avecl’a�chage des lignes 18 a 21 ? Expliquez.

Q5.2 : Parmi les lignes 23 a 25, lesquelles sont correctes, lesquelles sont fausses. Expliquez.

Q5.3 : Les lignes 27 et 28 provoquent-elles une erreur a la compilation ? a l’execution ? Expliquez.

Q5.4 : Dans la classe Animal, on rajoute une methode abstraite. Expliquez les consequences pourla classe Animal et pour ses classes filles. Cela ajoute-t-il des erreurs dans la methode main ?

Question 6 (3 points) : On considere une lampe avec 2 ampoules. Soient les classes suivantes :

1 public class Ampoule {2 private int pu i s sance ;3 public Ampoule ( ) { pu i s sance=( int ) (Math . random ( ) 91) +10; }4 public St r ing toS t r i ng ( ) { return "Ampoule "+pui s sance+"W" ;}5 }6 public class Lampe {7 private Ampoule amp1 , amp2 ;8 public Lampe ( ) { amp1=new Ampoule ( ) ; amp2=new Ampoule ( ) ; }9 public St r ing toS t r i ng ( ) { return "Lampe avec "+amp1+" et "+amp2 ; }

10 }11 public class TestLampe {12 public stat ic void main ( St r ing [ ] a rgs ) {13 Lampe lp1=new Lampe ( ) ;14 }15 }On souhaite creer une nouvelle lampe qui soit la copie conforme de la lampe lp1 dans la methodemain. Donnez precisement toutes les methodes et instructions qu’il faut ajouter, y compris les ins-tructions necessaires dans la methode main.

Question 7 (3 points) : Chaıne de caracteres et fluxString est une classe immutable, c’est-a-dire qu’une variable de type String ne peut pas etremodifiee. Lorsque l’on pense modifier un objet String, en verite, on cree un nouvel objet String,et on perd l’ancien. Par exemple, soit String s="Bonjour" ; alors s=s+" Paul" ; est equivalent as=new String(s+" Paul") ;. On veut ecrire un programme en java qui cree une unique chaıne decaracteres a partir des arguments qui sont passes en ligne de commande. Par exemple, pour les lignesde commande suivantes :

java TestChaine Bonjour a tous le monde.

java TestChaine Comment ca va ?

les chaınes a creer sont respectivement “Bonjour a tous le monde.” et “Comment ca va ?”. Onrappelle que les arguments passes en ligne de commande sont contenus dans le tableau de chaınes decaracteres args de la methode main, chaque case du tableau est un argument. Par exemple, pour lapremiere ligne de commande, args[0]="Bonjour", args[1]="a", args[2]="tous", args[3]="le"et args[4]="monde.". Soit la classe Testchaine contenant la methode main suivante :

1 public class TestChaine {2 public stat ic void main ( St r ing [ ] a rgs ) {3 System . out . p r i n t l n ("La chaine saisie est = "+concatener ( args ) ) ;4 }5 }

LI230-2012oct – Examen Session 1 - 15/01/2013 page 3

Q5.1 : Qu’a�che chacune des instructions des lignes 14 a 17 ? Expliquez. Quelle di↵erence avecl’a�chage des lignes 18 a 21 ? Expliquez.

Q5.2 : Parmi les lignes 23 a 25, lesquelles sont correctes, lesquelles sont fausses. Expliquez.

Q5.3 : Les lignes 27 et 28 provoquent-elles une erreur a la compilation ? a l’execution ? Expliquez.

Q5.4 : Dans la classe Animal, on rajoute une methode abstraite. Expliquez les consequences pourla classe Animal et pour ses classes filles. Cela ajoute-t-il des erreurs dans la methode main ?

Question 6 (3 points) : On considere une lampe avec 2 ampoules. Soient les classes suivantes :

1 public class Ampoule {2 private int pu i s sance ;3 public Ampoule ( ) { pu i s sance=( int ) (Math . random ( ) 91) +10; }4 public St r ing toS t r i ng ( ) { return "Ampoule "+pui s sance+"W" ;}5 }6 public class Lampe {7 private Ampoule amp1 , amp2 ;8 public Lampe ( ) { amp1=new Ampoule ( ) ; amp2=new Ampoule ( ) ; }9 public St r ing toS t r i ng ( ) { return "Lampe avec "+amp1+" et "+amp2 ; }

10 }11 public class TestLampe {12 public stat ic void main ( St r ing [ ] a rgs ) {13 Lampe lp1=new Lampe ( ) ;14 }15 }On souhaite creer une nouvelle lampe qui soit la copie conforme de la lampe lp1 dans la methodemain. Donnez precisement toutes les methodes et instructions qu’il faut ajouter, y compris les ins-tructions necessaires dans la methode main.

Question 7 (3 points) : Chaıne de caracteres et fluxString est une classe immutable, c’est-a-dire qu’une variable de type String ne peut pas etremodifiee. Lorsque l’on pense modifier un objet String, en verite, on cree un nouvel objet String,et on perd l’ancien. Par exemple, soit String s="Bonjour" ; alors s=s+" Paul" ; est equivalent as=new String(s+" Paul") ;. On veut ecrire un programme en java qui cree une unique chaıne decaracteres a partir des arguments qui sont passes en ligne de commande. Par exemple, pour les lignesde commande suivantes :

java TestChaine Bonjour a tous le monde.

java TestChaine Comment ca va ?

les chaınes a creer sont respectivement “Bonjour a tous le monde.” et “Comment ca va ?”. Onrappelle que les arguments passes en ligne de commande sont contenus dans le tableau de chaınes decaracteres args de la methode main, chaque case du tableau est un argument. Par exemple, pour lapremiere ligne de commande, args[0]="Bonjour", args[1]="a", args[2]="tous", args[3]="le"et args[4]="monde.". Soit la classe Testchaine contenant la methode main suivante :

1 public class TestChaine {2 public stat ic void main ( St r ing [ ] a rgs ) {3 System . out . p r i n t l n ("La chaine saisie est = "+concatener ( args ) ) ;4 }5 }

Vincent Guigue 2i002 - Cours 11 - Annales 19/38

LI230-2012oct – Examen Session 1 - 15/01/2013 page 4

Q7.1 : Dans la classe Testchaine, ecrire la methode statique String concatener1(String []

args) qui retourne une chaıne de caracteres qui est la concatenation de toutes les chaınes contenuesdans args separees par un espace.

Q7.2 : La classe StringWriter permet de gerer un flux de caracteres. Elle contient les methodes :StringWriter() Constructeur qui cree un nouvel objet StringWriter

void write(String s) Ecrit la chaıne de caracteres s a la suite dans le fluxString toString() Retourne les caracteres du flux sous forme d’un objet String

Ecrire la methode statique String concatener2(String [] args) qui realise la meme chose qu’ala question precedente, mais en utilisant la classe StringWriter.

Q7.3 : Quelle est la methode qui cree le moins d’objets ? Expliquez.

Partie B : Un probleme de chau↵age (40 points)

Remarque 1 : Les informations donnees ne sont pas forcement le reflet de la realite.Remarque 2 : Toutes les variables seront declarees privees et les methodes publiques. Vous pouvezajouter des accesseurs et des modifieurs si besoin. Les methodes toString() ne sont pas demandees.

On souhaite creer un programme qui calcule la quantite d’energie qui sert reellement a chau↵erune maison en fonction du type des chau↵ages qu’elle contient. On distingue les chau↵ages electriqueset les chau↵ages au bois. Les radiateurs sou✏ants et les radiateurs a bain d’huile sont des chau↵ageselectriques. Les cheminees sont des chau↵ages au bois.

Un chau↵age a une puissance exprimee en kilowatt (kW). On souhaite pouvoir calculer la quantited’energie reellement utilisee pour chau↵er la maison exprimee en kilowattheure (kWh).

Un radiateur sou✏ant possede des vitesses de sou✏erie allant de 0 a vitesseMax ; l’energie qu’ilutilise depend de la vitesse vitesse a laquelle il sou✏e, a un moment donne, cette energie est egalea : (puissance⇥vitesse)/vitesseMax. Un radiateur a bain d’huile libere une energie egale a sapuissance, sauf s’il a une fuite, dans ce cas, l’energie liberee est egale a 70% de sa puissance. Unecheminee libere une energie qui est egale a la longueur totale des bois qui sont en train de brulerdans la cheminee divisee par 100 et multipliee par le rendement de la cheminee qui depend du typede la cheminee (a foyer ouvert, a foyer ferme, de type insert...).

Voici un exemple d’a�chage du programme :

Maison avec 4 chauffages pour une energie totale de 10.53 kWh

Chauffage electrique CE10001 puissance=2.0kW, classe=D soufflant de vitesse max 3,

actuellement tourne a la vitesse 2 et libere une energie de 1.33 kWh

Chauffage electrique CE10002 puissance=3.0kW, classe=A a bain d’huile possede

une quantite d’huile de 1.05L (sur 1.5L) et libere une energie de 2.10 kWh

Chauffage au bois puissance=7.0kW, classe=C de type cheminee foyer ferme contenant

une longueur totale de 443.0cm de bois et libere une energie de 3.10 kWh

Chauffage electrique CE10003 puissance=4.0kW, classe=E a bain d’huile possede

une quantite d’huile de 2.0L (sur 2.0L) et libere une energie de 4.0 kWh

Question 1 (3 points) : Donnez le schema de la hierarchie d’heritage Java des classes : Chauffage,ChauffageElectrique, ChauffageAuBois, RadiateurSoufflant, RadiateurBainDHuile,Cheminee, Maison et Object. En fonction des informations contenues dans les questions ci-apres, indiquez sur le schema les classes qui sont declarees abstraites.

Question 2 (4 points) : Un chau↵age a une puissance et une classe energetique. Une classeenergetique est une lettre comprise entre ’A’ et ’G’. Ecrire la classe Chauffage qui contient aumoins les variables et methodes suivantes :

Vincent Guigue 2i002 - Cours 11 - Annales 19/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 20/38

LI230 UPMC page 1/8

Eléments de programmation par objets avec JAVA

LI230

Sujet d'examen du 4 janvier 2012 Durée : 2h00

Documents autorisés : polycopié de Jacques Rivières et fiche récapitulative

Le barème sur 60 points est donné à titre indicatif :

Partie A : Questions de cours (20 points)

Partie B : Problème (40 points)

Question 0 : Vous répondrez aux questions de cours (Partie A) directement en écrivant sur le sujet d'examen ; vous répondrez au problème (Partie B) sur une copie d'examen. Ecrivez en gros votre numéro d'anonymat dans le cadre à droite et sur votre copie d'examen.

Numéro d'anonymat

Partie A : QCM Questions de cours (20 points) Attention :

x Pour chaque question ci-dessous, cocher la ou les cases correspondantes aux affirmations qui sont vraies. Les cases cochées doivent être clairement identifiables.

x Pour chaque question, plusieurs réponses peuvent être correctes, il y a toujours au moins 1 réponse correcte.

x Chaque erreur (mauvaise réponse cochée ou oubli de cocher une bonne réponse) entraîne la perte de 0.5 points.

Question 1 : Dans l'instruction : System.out.println("Bonjour");

a) System correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

b) out correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

c) println("Bonjour") correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

Question 2 : Une constante doit être :

F const F abstract F final F static

F ne peut être modifiée après initialisation F peut être modifiée après initialisation

Question 3 : La méthode main doit être :

F public F private F abstract F final F static

F retourner void F retourner int F ne prendre aucun paramètre Vincent Guigue 2i002 - Cours 11 - Annales 21/38

LI230 UPMC page 1/8

Eléments de programmation par objets avec JAVA

LI230

Sujet d'examen du 4 janvier 2012 Durée : 2h00

Documents autorisés : polycopié de Jacques Rivières et fiche récapitulative

Le barème sur 60 points est donné à titre indicatif :

Partie A : Questions de cours (20 points)

Partie B : Problème (40 points)

Question 0 : Vous répondrez aux questions de cours (Partie A) directement en écrivant sur le sujet d'examen ; vous répondrez au problème (Partie B) sur une copie d'examen. Ecrivez en gros votre numéro d'anonymat dans le cadre à droite et sur votre copie d'examen.

Numéro d'anonymat

Partie A : QCM Questions de cours (20 points) Attention :

x Pour chaque question ci-dessous, cocher la ou les cases correspondantes aux affirmations qui sont vraies. Les cases cochées doivent être clairement identifiables.

x Pour chaque question, plusieurs réponses peuvent être correctes, il y a toujours au moins 1 réponse correcte.

x Chaque erreur (mauvaise réponse cochée ou oubli de cocher une bonne réponse) entraîne la perte de 0.5 points.

Question 1 : Dans l'instruction : System.out.println("Bonjour");

a) System correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

b) out correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

c) println("Bonjour") correspond à :

F une classe F un appel de méthode F une variable d'instance F une variable statique

Question 2 : Une constante doit être :

F const F abstract F final F static

F ne peut être modifiée après initialisation F peut être modifiée après initialisation

Question 3 : La méthode main doit être :

F public F private F abstract F final F static

F retourner void F retourner int F ne prendre aucun paramètre

Vincent Guigue 2i002 - Cours 11 - Annales 22/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

Vincent Guigue 2i002 - Cours 11 - Annales 23/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

Vincent Guigue 2i002 - Cours 11 - Annales 24/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

Vincent Guigue 2i002 - Cours 11 - Annales 25/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

Vincent Guigue 2i002 - Cours 11 - Annales 26/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

Vincent Guigue 2i002 - Cours 11 - Annales 26/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

Vincent Guigue 2i002 - Cours 11 - Annales 26/38

LI230 UPMC page 2/8

Question 4 : Un constructeur doit être :

F abstract F final F static F porter le nom de la classe

F retourner void F ne pas avoir de type de retour F ne prendre aucun paramètre

Question 5 : Dans une classe Point, je souhaite déclarer une variable cptPoints dont le but est de compter le nombre d'instances de la classe Point créées, je déclare cette variable :

F abstract F final F static

F j'initialise la variable lors de sa déclaration F j'initialise la variable dans le constructeur

Question 6 : Soit la classe Point définie ainsi : class Point { private int x; }. Quel est (sont) le(s) constructeur(s) possible(s) pour cette classe ? F Point(int p){this=p;} F Point(int x) {this.x=x;}

F Point(int y){x=y;} F this(int a) {this.x=a;}

Question 7 : L'instruction suivante : this();

F correspond à un appel au premier constructeur créé dans la classe

F peut-être utilisée dans toute méthode publique

F provoque une erreur si la classe ne possède pas de constructeur sans paramètre

F peut-être utilisée dans la méthode main pour créer un nouvel objet

F doit être placée avant toute autre instruction dans le constructeur

Question 8 : Soient : int [] tab=new int[5];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 9 : Soient : Integer [] tab=new Integer[8];System.out.println(tab[5]);

F 0 est affiché F null est affiché F la valeur de tab[5].toString() est affiché

F une exception est levée à l'exécution F une erreur est détectée à la compilation

Question 10 : On considère une classe A, et une classe B qui hérite de A. Les 4 instructions suivantes ne provoquent pas d'erreur : A a1=new A();A a2=new B();B b1=(B)a2; A a3=a1;

a) Combien y a-t-il d'objets créés dans ces 4 instructions ?

F 1 F 2 F 3 F 4

b) Combien y a-t-il de références (handles) créées dans ces 4 instructions ?

F 1 F 2 F 3 F 4

Question 11 : On considère une classe Fleur déclarée abstraite, et une classe Tulipe qui hérite de Fleur. Chacune de ces 2 classes contient un constructeur sans paramètre. Cocher les instructions correctes :

F Fleur f1=new Fleur(); F Fleur f2=new Tulipe();

F Tulipe t1=new Tulipe(); F Tulipe t2=new Fleur();

Pour les questions 12 à 14, on considère les 4 classes suivantes : class Animal { public void f() { } public String toString() {return "Animal";} } class Poisson extends Animal { public void g() { } public String toString() {return "Poisson";} } class Cheval extends Animal { } class Zoo { }

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

Vincent Guigue 2i002 - Cours 11 - Annales 26/38

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

Vincent Guigue 2i002 - Cours 11 - Annales 27/38

LI230 UPMC page 3/8

et les déclarations suivantes : Animal a1=new Animal(); Poisson p1=new Poisson(); Cheval c1=new Cheval(); Zoo z1=new Zoo();

Question 12 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F a1.f(); F p1.f(); F a1.g(); F p1.g();

Question 13 : Que retournent les instructions suivantes ?

a) L'instruction a1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Animal@1bc4459"

b) L'instruction p1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Poisson@1bc4459"

c) L'instruction c1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Cheval@1bc4459"

d) L'instruction z1.toString() retourne :

F "Animal" F "Poisson" F "Cheval" F "Zoo" F "Zoo@1bc4459"

Question 14 : Cocher les instructions qui ne provoquent pas d'erreur à la compilation :

F Animal a2=p1; F Animal a3=(Animal)p1;

F Poisson p2=a1; F Poisson p3=(Poisson)a1;

Pour les questions 15 et 16, on considère le programme suivant : 1 class PasMultipleException extends Exception { 2 public PasMultipleException(int nombre, int diviseur) { 3 super(nombre+" n'est pas un multiple de "+diviseur); 4 } 5 } 6 class TestE { 7 public static int divise(int nombre,int diviseur) M { 8 int resultat; 9 resultat=nombre/diviseur; 10 if (resultat*diviseur!=nombre) 11 N 12 return resultat; 13 } 14 public static void main(String [] args) { 15 System.out.println("res="+divise(10,3)); 16 } 17 }

Dans chacune des questions suivantes, on précise comment le programme doit se dérouler pour compléter ce programme. Les questions15 et 16 sont indépendantes l'une de l'autre.

Question 15 : Dans la méthode divise, si la variable diviseur vaut 0 alors l'exception ArithmeticException générée par la division par zéro doit être capturée et la méthode divise doit retourner 0. Pour cela :

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throw new ArithmeticException(); return 0; }

LI230 UPMC page 4/8

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throws ArithmeticException ; return 0; }

F je remplace la ligne 9 par les instructions : try { resultat=nombre/diviseur; } catch (ArithmeticException ae) { return 0 ; }

F je rajoute entre la ligne 8 et la ligne 9 les instructions : try { if (diviseur==0) return 0; else resultat=nombre/diviseur; } catch (ArithmeticException ae){ System.out.println(ae.getMessage()); }

F je rajoute throws ArithmeticException à la ligne 7 à la place de M Question 16 : Dans la méthode divise, si nombre n'est pas un multiple de diviseur (c'est-à-dire si le test à la ligne 10 est vrai) alors une exception PasMultipleException est levée. Cette exception est ensuite capturée dans la méthode main. Pour cela :

a) à la place de N, je rajoute à la ligne 11:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 11

b) à la place de M, je rajoute à la la ligne 7:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 7

c) dans la méthode main, je peux remplacer la ligne 15 par :

F try { System.out.println("res="+divise(10,3)); } catch(PasMultipleException pme) { System.out.println(pme.getMessage()); }

F try { System.out.println("res="+divise(10,3)); } catch(Exception e) { System.out.println(e.getMessage()); }

Vincent Guigue 2i002 - Cours 11 - Annales 27/38

LI230 UPMC page 4/8

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throws ArithmeticException ; return 0; }

F je remplace la ligne 9 par les instructions : try { resultat=nombre/diviseur; } catch (ArithmeticException ae) { return 0 ; }

F je rajoute entre la ligne 8 et la ligne 9 les instructions : try { if (diviseur==0) return 0; else resultat=nombre/diviseur; } catch (ArithmeticException ae){ System.out.println(ae.getMessage()); }

F je rajoute throws ArithmeticException à la ligne 7 à la place de M Question 16 : Dans la méthode divise, si nombre n'est pas un multiple de diviseur (c'est-à-dire si le test à la ligne 10 est vrai) alors une exception PasMultipleException est levée. Cette exception est ensuite capturée dans la méthode main. Pour cela :

a) à la place de N, je rajoute à la ligne 11:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 11

b) à la place de M, je rajoute à la la ligne 7:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 7

c) dans la méthode main, je peux remplacer la ligne 15 par :

F try { System.out.println("res="+divise(10,3)); } catch(PasMultipleException pme) { System.out.println(pme.getMessage()); }

F try { System.out.println("res="+divise(10,3)); } catch(Exception e) { System.out.println(e.getMessage()); }

Vincent Guigue 2i002 - Cours 11 - Annales 27/38

LI230 UPMC page 4/8

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throws ArithmeticException ; return 0; }

F je remplace la ligne 9 par les instructions : try { resultat=nombre/diviseur; } catch (ArithmeticException ae) { return 0 ; }

F je rajoute entre la ligne 8 et la ligne 9 les instructions : try { if (diviseur==0) return 0; else resultat=nombre/diviseur; } catch (ArithmeticException ae){ System.out.println(ae.getMessage()); }

F je rajoute throws ArithmeticException à la ligne 7 à la place de M Question 16 : Dans la méthode divise, si nombre n'est pas un multiple de diviseur (c'est-à-dire si le test à la ligne 10 est vrai) alors une exception PasMultipleException est levée. Cette exception est ensuite capturée dans la méthode main. Pour cela :

a) à la place de N, je rajoute à la ligne 11:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 11

b) à la place de M, je rajoute à la la ligne 7:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 7

c) dans la méthode main, je peux remplacer la ligne 15 par :

F try { System.out.println("res="+divise(10,3)); } catch(PasMultipleException pme) { System.out.println(pme.getMessage()); }

F try { System.out.println("res="+divise(10,3)); } catch(Exception e) { System.out.println(e.getMessage()); } Vincent Guigue 2i002 - Cours 11 - Annales 27/38

LI230 UPMC page 4/8

F je rajoute entre la ligne 8 et la ligne 9 les instructions : if ( diviseur == 0 ) { throws ArithmeticException ; return 0; }

F je remplace la ligne 9 par les instructions : try { resultat=nombre/diviseur; } catch (ArithmeticException ae) { return 0 ; }

F je rajoute entre la ligne 8 et la ligne 9 les instructions : try { if (diviseur==0) return 0; else resultat=nombre/diviseur; } catch (ArithmeticException ae){ System.out.println(ae.getMessage()); }

F je rajoute throws ArithmeticException à la ligne 7 à la place de M Question 16 : Dans la méthode divise, si nombre n'est pas un multiple de diviseur (c'est-à-dire si le test à la ligne 10 est vrai) alors une exception PasMultipleException est levée. Cette exception est ensuite capturée dans la méthode main. Pour cela :

a) à la place de N, je rajoute à la ligne 11:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 11

b) à la place de M, je rajoute à la la ligne 7:

F throws PasMultipleException

F throw new PasMultipleException();

F throws new PasMultipleException("pas multiple");

F throw new PasMultipleException("pas multiple");

F throw new PasMultipleException(nombre,diviseur);

F je ne rajoute rien à la ligne 7

c) dans la méthode main, je peux remplacer la ligne 15 par :

F try { System.out.println("res="+divise(10,3)); } catch(PasMultipleException pme) { System.out.println(pme.getMessage()); }

F try { System.out.println("res="+divise(10,3)); } catch(Exception e) { System.out.println(e.getMessage()); }

LI230 UPMC page 5/8

F je ne dois pas changer la méthode main

Question 17 : Un point est défini par sa coordonnée x. Un segment est défini par deux points. Soient les définitions de classes suivantes :

class Point { private int x ; public Point(int x){ this.x=x; } public void setX(int x) { this.x=x; } public int getX() { return x; } } class Segment { private Point a,b ; public Segment(Point a, Point b) { this.a=a; this.b=b; } public void changerAX(int x) { a.setX(x); } public int obtenirAX() { return a.getX(); } }

Soient également les déclarations suivantes écrites dans une méthode main : Point a1=new Point(1); Point a2=new Point(2); Segment s1=new Segment(a1,a2);

On souhaite créer un segment s2 qui ait les mêmes valeurs de coordonnées que le segment s1. Puis on modifie la coordonnée du premier point de s1 par la valeur 4. Pour réaliser cela, on considère les instructions :

Segment s2=s1; s1.changerAX(4);

Ces 2 instructions ont pour but de réaliser ce qui est demandé, mais il y a une erreur que l'on va corriger dans les questions b), c) et d).

a) Quel est l'affichage obtenu par l'instruction : System.out.println(s2.obtenirAX());?

F 1 F 2 F 3 F 4

b) Pour corriger l'erreur détectée à la question a), dans la classe Point, je rajoute le constructeur :

F Point(Point p) {x=p.x;}

F Point(Point p) {p.x=x;}

F Point(Point p) {x=new Integer(p.x);}

F Point(Point p) {this(p.x);}

c) Pour corriger l'erreur détectée à la question a), dans la classe Segment, je rajoute le constructeur :

F Segment(Segment s) {a.setX(s.a);b.setX(s.b);}

F Segment(Segment s) {super(s.a,s.b);}

F Segment(Segment s) {a=new Point(s.a);b=new Point(s.b);}

F Segment(Segment s) {this(s.a,s.b);}

d) Pour corriger l'erreur détectée à la question a), je remplace :

F l'instruction : s1.changerAX(4); par : s2.changerAX(4);

F l'instruction : s1.changerAX(4); par : a1.setX(4);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1.a,s1.b);

Vincent Guigue 2i002 - Cours 11 - Annales 27/38

LI230 UPMC page 5/8

F je ne dois pas changer la méthode main

Question 17 : Un point est défini par sa coordonnée x. Un segment est défini par deux points. Soient les définitions de classes suivantes :

class Point { private int x ; public Point(int x){ this.x=x; } public void setX(int x) { this.x=x; } public int getX() { return x; } } class Segment { private Point a,b ; public Segment(Point a, Point b) { this.a=a; this.b=b; } public void changerAX(int x) { a.setX(x); } public int obtenirAX() { return a.getX(); } }

Soient également les déclarations suivantes écrites dans une méthode main : Point a1=new Point(1); Point a2=new Point(2); Segment s1=new Segment(a1,a2);

On souhaite créer un segment s2 qui ait les mêmes valeurs de coordonnées que le segment s1. Puis on modifie la coordonnée du premier point de s1 par la valeur 4. Pour réaliser cela, on considère les instructions :

Segment s2=s1; s1.changerAX(4);

Ces 2 instructions ont pour but de réaliser ce qui est demandé, mais il y a une erreur que l'on va corriger dans les questions b), c) et d).

a) Quel est l'affichage obtenu par l'instruction : System.out.println(s2.obtenirAX());?

F 1 F 2 F 3 F 4

b) Pour corriger l'erreur détectée à la question a), dans la classe Point, je rajoute le constructeur :

F Point(Point p) {x=p.x;}

F Point(Point p) {p.x=x;}

F Point(Point p) {x=new Integer(p.x);}

F Point(Point p) {this(p.x);}

c) Pour corriger l'erreur détectée à la question a), dans la classe Segment, je rajoute le constructeur :

F Segment(Segment s) {a.setX(s.a);b.setX(s.b);}

F Segment(Segment s) {super(s.a,s.b);}

F Segment(Segment s) {a=new Point(s.a);b=new Point(s.b);}

F Segment(Segment s) {this(s.a,s.b);}

d) Pour corriger l'erreur détectée à la question a), je remplace :

F l'instruction : s1.changerAX(4); par : s2.changerAX(4);

F l'instruction : s1.changerAX(4); par : a1.setX(4);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1.a,s1.b);

Vincent Guigue 2i002 - Cours 11 - Annales 28/38

LI230 UPMC page 5/8

F je ne dois pas changer la méthode main

Question 17 : Un point est défini par sa coordonnée x. Un segment est défini par deux points. Soient les définitions de classes suivantes :

class Point { private int x ; public Point(int x){ this.x=x; } public void setX(int x) { this.x=x; } public int getX() { return x; } } class Segment { private Point a,b ; public Segment(Point a, Point b) { this.a=a; this.b=b; } public void changerAX(int x) { a.setX(x); } public int obtenirAX() { return a.getX(); } }

Soient également les déclarations suivantes écrites dans une méthode main : Point a1=new Point(1); Point a2=new Point(2); Segment s1=new Segment(a1,a2);

On souhaite créer un segment s2 qui ait les mêmes valeurs de coordonnées que le segment s1. Puis on modifie la coordonnée du premier point de s1 par la valeur 4. Pour réaliser cela, on considère les instructions :

Segment s2=s1; s1.changerAX(4);

Ces 2 instructions ont pour but de réaliser ce qui est demandé, mais il y a une erreur que l'on va corriger dans les questions b), c) et d).

a) Quel est l'affichage obtenu par l'instruction : System.out.println(s2.obtenirAX());?

F 1 F 2 F 3 F 4

b) Pour corriger l'erreur détectée à la question a), dans la classe Point, je rajoute le constructeur :

F Point(Point p) {x=p.x;}

F Point(Point p) {p.x=x;}

F Point(Point p) {x=new Integer(p.x);}

F Point(Point p) {this(p.x);}

c) Pour corriger l'erreur détectée à la question a), dans la classe Segment, je rajoute le constructeur :

F Segment(Segment s) {a.setX(s.a);b.setX(s.b);}

F Segment(Segment s) {super(s.a,s.b);}

F Segment(Segment s) {a=new Point(s.a);b=new Point(s.b);}

F Segment(Segment s) {this(s.a,s.b);}

d) Pour corriger l'erreur détectée à la question a), je remplace :

F l'instruction : s1.changerAX(4); par : s2.changerAX(4);

F l'instruction : s1.changerAX(4); par : a1.setX(4);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1);

F l'instruction : Segment s2=s1; par : Segment s2=new Segment(s1.a,s1.b);

Vincent Guigue 2i002 - Cours 11 - Annales 28/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 29/38

LI230 UPMC page 1/5

Eléments de programmation par objets avec JAVA

LI230

Examen du 10 janvier 2011 Durée : 2h00

Documents autorisés : polycopié de Jacques Rivières et fiche récapitulative

Barème donné à titre indicatif : Partie A : Questions de cours 20 points sur 60

Partie B : Problème 40 points sur 60

Partie A : Questions de cours (20 points)

Question 1 (9 points) : On considère les 2 classes suivantes : 1 class Transport { 2 private int cptTransports=0; 3 private int numero; 4 protected String compagnie; 5 public Transport(String compagnie) { 6 compagnie=compagnie; 7 cptTransports++; 8 numero=cptTransports; 9 } 10 public abstract void seDeplacer(); 11 } 12 class Bus extends Transport { 13 public Bus() { 14 compagnie="Inconnue"; 15 numero=5; 16 } 17 public Bus() { 18 super(compagnie); 19 } 20 public Bus(String compagnie) { 21 this(compagnie); 22 } 23 } Ces 2 classes contiennent 9 erreurs, dont 7 sont détectées à la compilation. Pour chaque erreur, donnez le numéro de la ligne et expliquez, puis si possible, donnez une correction pour l'erreur. Remarque : plusieurs erreurs peuvent se trouver sur la même ligne.

Vincent Guigue 2i002 - Cours 11 - Annales 30/38

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

Vincent Guigue 2i002 - Cours 11 - Annales 31/38

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

Vincent Guigue 2i002 - Cours 11 - Annales 31/38

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

Vincent Guigue 2i002 - Cours 11 - Annales 31/38

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

LI230 UPMC page 2/5

Question 2 (6 points) : Soit le programme suivant qui ne contient pas d'erreurs aux lignes 1 à 9 : 1 abstract class Personne { } 2 class Etudiant extends Personne { 3 private static int cptEtudiants=0; 4 private String niveau; 5 public void afficherNiveau() { System.out.println(niveau); } 6 public static void afficherNbEtudiants() { 7 System.out.println("Il y a "+cptEtudiants+" etudiants."); 8 } 9 public static void main(String [] args) { 10 Etudiant e1=new Etudiant(); 11 Personne p1=new Personne(); 12 Personne p2=e1; 13 Etudiant e2=p2; 14 niveau="L2"; 15 cptEtudiants++; 16 e1.afficherNiveau(); 17 afficherNiveau(); 18 p2.afficherNiveau(); 19 e1.afficherNbEtudiants(); 20 afficherNbEtudiants(); 21 } 22 }

Question 2a) Parmi les lignes 10 à 13, lesquelles sont fausses ? Expliquez, et corrigez si possible.

Question 2b) La ligne 14 est-t-elle fausse ? Si oui, expliquez et proposez une solution, sinon expliquez pourquoi elle est juste.

Question 2c) Même question que la question 2b) pour la ligne 15.

Question 2d) Quelles lignes sont fausses parmi les lignes 16 à 20 ? Expliquez.

Question 3 (5 points) : Soit le contenu du fichier Test.java suivant :

1 import java.awt.*; 2 import javax.swing.*; 3 class Publicite extends JPanel { 4 private String message; 5 public Publicite(String message) { 6 super(); 7 this.message=message; 8 setPreferredSize(new Dimension(message.length()*40,200)); 9 } 10 public void paintComponent(Graphics g) { 11 super.paintComponent(g); 12 g.setFont(new Font("arial",Font.BOLD,64)); 13 g.drawString(message,50,120); 14 } 15 } 16 public class Test { 17 public static void main(String [] args) { 18 JFrame f=new JFrame(); 19 Publicite pub=new Publicite("Bienvenue !"); 20 f.getContentPane().add(pub); 21 f.pack(); 22 f.setVisible(true); 23 } 24 }

Vincent Guigue 2i002 - Cours 11 - Annales 31/38

1 2014

2 2015

3 2013

4 2012

5 2011

6 2013R

Vincent Guigue 2i002 - Cours 11 - Annales 32/38

LI230-2012oct – Examen Session 2 - 19/06/2013 UPMC

Elements de programmationpar objets avec JavaLI230

Examen du 19 juin 2013 - Duree : 2 heures

Documents autorises : polycopie de cours de Jacques Rivieres

Le bareme sur 60 points est donne a titre indicatif :Partie A : Questions de cours (20 points)Partie B : Probleme (40 points)

Question 0 : Ecrivez votre numero d’anonymat de maniere bien visible sur votre copie d’examen.

Partie A : Questions de cours (20 points)Attention : Pour chacune de vos reponses aux questions ci-dessous, il est importantd’expliquer brievement mais avec precision vos reponses.

Question 1 (4 points) : Soient les classes suivantes :

1 public class A {2 public A() { System . out . p r i n t l n ("constructeur sans argument" ) ; }3 public A( int x ){ System . out . p r i n t l n ("x="+x+" est un entier" ) ;}4 public A(double y ){ System . out . p r i n t l n ("y="+y+" est un double" ) ;}5 public A( St r ing s ){ System . out . p r i n t l n ("s="+s+" est une chaine" ) ;}6 }7 public class B extends A {8 public B( int x ) { super ( x ) ; }9 public B(char x ) { super ( x ) ; }

10 public B( f loat x ) { super ( x ) ; }11 public B( int x , int y ) { super ( x+y) ; }12 public B(char x , char y ) { super ( x+""+y) ; }13 public B(B b) { System . out . p r i n t l n ("constructeur par copie" ) ; }14 }15 public class TestConstructeur {16 public stat ic void main ( St r ing [ ] a rgs ) {17 B b1=new B(5) ;18 B b2=new B(3 . 5 f ) ; // rappe l : 3 .5 f e s t de type f l o a t19 B b3=new B(’Z’ ) ;20 B b4=new B(’Z’ ,’Z’ ) ;21 B b5=new B(new B(5) ) ;22 }23 }

Pour chaque instruction des lignes 17 a 21, donnez l’a�chage obtenu et expliquez. Rappel : le codeASCII de ’Z’ est 90.

Vincent Guigue 2i002 - Cours 11 - Annales 33/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

Vincent Guigue 2i002 - Cours 11 - Annales 34/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

Vincent Guigue 2i002 - Cours 11 - Annales 34/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

Vincent Guigue 2i002 - Cours 11 - Annales 34/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

Vincent Guigue 2i002 - Cours 11 - Annales 35/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 2

Question 2 (4 points) : Soient les classes suivantes :

1 public abstract class Fourniture {2 public St r ing toS t r i ng ( ) { return "Fourniture" ;}3 }4 public class Agrafeuse extends Fourniture {5 public St r ing toS t r i ng ( ) { return "Agrafeuse" ;}6 }7 public class Gomme extends Fourniture {}8 public class Crayon extends Fourniture {}9 public class CrayonAPapier extends Crayon {}

10 public class Portemine extends Crayon {11 public St r ing toS t r i ng ( ) { return "Portemine" ;}12 }

On suppose que l’on est dans une methode main.

Q2.1 : Expliquez pourquoi il est possible de declarer un tableau contenant (dans l’ordre) : uneagrafeuse, une gomme, un crayon, un crayon a papier et un portemine. Puis donnez cette declaration.

Q2.2 : Donnez les instructions necessaires pour a�cher dans l’ordre le resultat de la methodetoString() de chaque objet dans le tableau sans appeler directement la methode toString().Expliquez.

Q2.3 : D’apres l’ordre des objets dans le tableau, quel est precisement l’a�chage obtenu ? Expliquez.

Question 3 (3 points) : Soient les classes suivantes :

1 public abstract class Electromenager {2 public abstract void avancer ( ) ;3 }4 public class Aspi rateur extends Electromenager {5 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire" ) ;}6 public void avancer ( ) {System . out . p r i n t l n ("J’avance en roulant" ) ;}7 }8 public class AspirateurASac extends Aspi rateur {9 public void a s p i r e r ( ) {System . out . p r i n t l n ("J’aspire avec un sac" ) ;}

10 public void changerSac ( ) {System . out . p r i n t l n ("Le sac est change" ) ;}11 }

Q3.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 AspirateurASac aas1=new AspirateurASac ( ) ;2 Aspi rateur a1=new Aspi rateur ( ) ;3 Electromenager e1=new Electromenager ( ) ;4

5 Electromenager e2=a1 ;6 Aspi rateur a2=aas1 ;7 AspirateurASac aas2=aas1 ;8

9 e2 . a s p i r e r ( ) ;10 a2 . a s p i r e r ( ) ;

Vincent Guigue 2i002 - Cours 11 - Annales 35/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 3

11 aas2 . a s p i r e r ( ) ;12

13 e2 . avancer ( ) ;14 a2 . avancer ( ) ;15 aas2 . avancer ( ) ;16

17 e2 . changerSac ( ) ;18 a2 . changerSac ( ) ;19 aas2 . changerSac ( ) ;

Q3.2 : Qu’a�che l’instruction : a2.aspirer() ? Expliquez.

Question 4 (3 points) : Soient les classes suivantes :

1 public class Meuble {}2 public class Bureau extends Meuble {}3 public class BureauMultimedia extends Bureau {}

Q4.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 Meuble m1=new Bureau ( ) ;2 Meuble m2=new BureauMultimedia ( ) ;3

4 Bureau b1=new Meuble ( ) ;5 Bureau b2=new BureauMultimedia ( ) ;6

7 BureauMultimedia bm1=new Meuble ( ) ;8 BureauMultimedia bm2=new Bureau ( ) ;

Q4.2 : Soient les instructions suivantes :

1 Meuble m3=new Meuble ( ) ;2 Bureau b3=new Bureau ( ) ;3 BureauMultimedia bm3=new BureauMultimedia ( ) ;4 Meuble m4=b3 ;5 Meuble m5=bm3 ;6

7 Bureau b4=m4;8 Bureau b5=(Bureau )m3;9 Bureau b6=(Bureau )m4;

10 Bureau b7=(Bureau )m5;11 Bureau b8=(BureauMultimedia )m4;12 Bureau b9=(BureauMultimedia )m5;

Les lignes 1 a 5 sont correctes. Parmi les lignes 7 a 12, quelles instructions ne compilent pas ? quellesinstructions provoquent une erreur a l’execution ? Expliquez precisement chaque erreur.

Suite page suivante...

Vincent Guigue 2i002 - Cours 11 - Annales 35/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 3

11 aas2 . a s p i r e r ( ) ;12

13 e2 . avancer ( ) ;14 a2 . avancer ( ) ;15 aas2 . avancer ( ) ;16

17 e2 . changerSac ( ) ;18 a2 . changerSac ( ) ;19 aas2 . changerSac ( ) ;

Q3.2 : Qu’a�che l’instruction : a2.aspirer() ? Expliquez.

Question 4 (3 points) : Soient les classes suivantes :

1 public class Meuble {}2 public class Bureau extends Meuble {}3 public class BureauMultimedia extends Bureau {}

Q4.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 Meuble m1=new Bureau ( ) ;2 Meuble m2=new BureauMultimedia ( ) ;3

4 Bureau b1=new Meuble ( ) ;5 Bureau b2=new BureauMultimedia ( ) ;6

7 BureauMultimedia bm1=new Meuble ( ) ;8 BureauMultimedia bm2=new Bureau ( ) ;

Q4.2 : Soient les instructions suivantes :

1 Meuble m3=new Meuble ( ) ;2 Bureau b3=new Bureau ( ) ;3 BureauMultimedia bm3=new BureauMultimedia ( ) ;4 Meuble m4=b3 ;5 Meuble m5=bm3 ;6

7 Bureau b4=m4;8 Bureau b5=(Bureau )m3;9 Bureau b6=(Bureau )m4;

10 Bureau b7=(Bureau )m5;11 Bureau b8=(BureauMultimedia )m4;12 Bureau b9=(BureauMultimedia )m5;

Les lignes 1 a 5 sont correctes. Parmi les lignes 7 a 12, quelles instructions ne compilent pas ? quellesinstructions provoquent une erreur a l’execution ? Expliquez precisement chaque erreur.

Suite page suivante...

Vincent Guigue 2i002 - Cours 11 - Annales 36/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 3

11 aas2 . a s p i r e r ( ) ;12

13 e2 . avancer ( ) ;14 a2 . avancer ( ) ;15 aas2 . avancer ( ) ;16

17 e2 . changerSac ( ) ;18 a2 . changerSac ( ) ;19 aas2 . changerSac ( ) ;

Q3.2 : Qu’a�che l’instruction : a2.aspirer() ? Expliquez.

Question 4 (3 points) : Soient les classes suivantes :

1 public class Meuble {}2 public class Bureau extends Meuble {}3 public class BureauMultimedia extends Bureau {}

Q4.1 : Parmi les instructions suivantes, quelles instructions ne compilent pas ? Expliquez chaqueerreur.

1 Meuble m1=new Bureau ( ) ;2 Meuble m2=new BureauMultimedia ( ) ;3

4 Bureau b1=new Meuble ( ) ;5 Bureau b2=new BureauMultimedia ( ) ;6

7 BureauMultimedia bm1=new Meuble ( ) ;8 BureauMultimedia bm2=new Bureau ( ) ;

Q4.2 : Soient les instructions suivantes :

1 Meuble m3=new Meuble ( ) ;2 Bureau b3=new Bureau ( ) ;3 BureauMultimedia bm3=new BureauMultimedia ( ) ;4 Meuble m4=b3 ;5 Meuble m5=bm3 ;6

7 Bureau b4=m4;8 Bureau b5=(Bureau )m3;9 Bureau b6=(Bureau )m4;

10 Bureau b7=(Bureau )m5;11 Bureau b8=(BureauMultimedia )m4;12 Bureau b9=(BureauMultimedia )m5;

Les lignes 1 a 5 sont correctes. Parmi les lignes 7 a 12, quelles instructions ne compilent pas ? quellesinstructions provoquent une erreur a l’execution ? Expliquez precisement chaque erreur.

Suite page suivante...

Vincent Guigue 2i002 - Cours 11 - Annales 36/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 4

Question 5 (3 points) : Soient les classes suivantes :

1 public class DepassementException extends Exception {2 public DepassementException ( ) { super ("Depassement" ) ; }3 }4 public class Balance {5 private int MAX=150;6 public void pese r ( int poids ) throws DepassementException {7 i f ( po ids >= MAX) {8 throw new DepassementException ( ) ;9 }

10 System . out . p r i n t l n ("Poids : "+poids+" kg" ) ;11 }12 }

Q5.1 : Le programme suivant compile-t-il ? Si non, donner precisement la ligne de la premiere erreuret expliquez. Si oui, provoque-il une erreur a l’execution ? Expliquez.

1 public class TestException {2 public stat ic void main ( St r ing [ ] a rgs ) {3 Balance b1=new Balance ( ) ;4 b1 . pe se r (50) ;5 b1 . pe se r (170) ;6 }7 }

Q5.2 : En ajoutant seulement des instructions dans la methode main, proposez une solution quicompile et s’execute. Puis donnez l’a�chage obtenu par l’execution de la methode main corrigee, etexpliquez.

Question 6 (3 points) : La classe System du package java.lang possede une variable statique detype PrintStream appelee out qui permet d’ecrire sur la sortie standard. On rappelle qu’il existequ’une seule sortie standard. Soit la classe suivante qui a pour but de fournir des methodes poura�cher une chaıne de caracteres sur la sortie standard.

1 import java . i o . PrintStream ;2 public class S {3 private stat ic PrintStream ps=System . out ;4

5 public stat ic void a f f i c h e r 1 ( S t r ing s ) {6 ps . p r i n t l n ( s ) ;7 }8 public void a f f i c h e r 2 ( S t r ing s ) {9 ps . p r i n t l n ( s ) ;

10 }11 }

Q6.1 : Expliquez l’instruction a la ligne 3. Pourquoi la variable ps est-elle declaree static ?

Q6.2 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher1.

Vincent Guigue 2i002 - Cours 11 - Annales 37/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 4

Question 5 (3 points) : Soient les classes suivantes :

1 public class DepassementException extends Exception {2 public DepassementException ( ) { super ("Depassement" ) ; }3 }4 public class Balance {5 private int MAX=150;6 public void pese r ( int poids ) throws DepassementException {7 i f ( po ids >= MAX) {8 throw new DepassementException ( ) ;9 }

10 System . out . p r i n t l n ("Poids : "+poids+" kg" ) ;11 }12 }

Q5.1 : Le programme suivant compile-t-il ? Si non, donner precisement la ligne de la premiere erreuret expliquez. Si oui, provoque-il une erreur a l’execution ? Expliquez.

1 public class TestException {2 public stat ic void main ( St r ing [ ] a rgs ) {3 Balance b1=new Balance ( ) ;4 b1 . pe se r (50) ;5 b1 . pe se r (170) ;6 }7 }

Q5.2 : En ajoutant seulement des instructions dans la methode main, proposez une solution quicompile et s’execute. Puis donnez l’a�chage obtenu par l’execution de la methode main corrigee, etexpliquez.

Question 6 (3 points) : La classe System du package java.lang possede une variable statique detype PrintStream appelee out qui permet d’ecrire sur la sortie standard. On rappelle qu’il existequ’une seule sortie standard. Soit la classe suivante qui a pour but de fournir des methodes poura�cher une chaıne de caracteres sur la sortie standard.

1 import java . i o . PrintStream ;2 public class S {3 private stat ic PrintStream ps=System . out ;4

5 public stat ic void a f f i c h e r 1 ( S t r ing s ) {6 ps . p r i n t l n ( s ) ;7 }8 public void a f f i c h e r 2 ( S t r ing s ) {9 ps . p r i n t l n ( s ) ;

10 }11 }

Q6.1 : Expliquez l’instruction a la ligne 3. Pourquoi la variable ps est-elle declaree static ?

Q6.2 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher1.

Vincent Guigue 2i002 - Cours 11 - Annales 37/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 4

Question 5 (3 points) : Soient les classes suivantes :

1 public class DepassementException extends Exception {2 public DepassementException ( ) { super ("Depassement" ) ; }3 }4 public class Balance {5 private int MAX=150;6 public void pese r ( int poids ) throws DepassementException {7 i f ( po ids >= MAX) {8 throw new DepassementException ( ) ;9 }

10 System . out . p r i n t l n ("Poids : "+poids+" kg" ) ;11 }12 }

Q5.1 : Le programme suivant compile-t-il ? Si non, donner precisement la ligne de la premiere erreuret expliquez. Si oui, provoque-il une erreur a l’execution ? Expliquez.

1 public class TestException {2 public stat ic void main ( St r ing [ ] a rgs ) {3 Balance b1=new Balance ( ) ;4 b1 . pe se r (50) ;5 b1 . pe se r (170) ;6 }7 }

Q5.2 : En ajoutant seulement des instructions dans la methode main, proposez une solution quicompile et s’execute. Puis donnez l’a�chage obtenu par l’execution de la methode main corrigee, etexpliquez.

Question 6 (3 points) : La classe System du package java.lang possede une variable statique detype PrintStream appelee out qui permet d’ecrire sur la sortie standard. On rappelle qu’il existequ’une seule sortie standard. Soit la classe suivante qui a pour but de fournir des methodes poura�cher une chaıne de caracteres sur la sortie standard.

1 import java . i o . PrintStream ;2 public class S {3 private stat ic PrintStream ps=System . out ;4

5 public stat ic void a f f i c h e r 1 ( S t r ing s ) {6 ps . p r i n t l n ( s ) ;7 }8 public void a f f i c h e r 2 ( S t r ing s ) {9 ps . p r i n t l n ( s ) ;

10 }11 }

Q6.1 : Expliquez l’instruction a la ligne 3. Pourquoi la variable ps est-elle declaree static ?

Q6.2 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher1.

Vincent Guigue 2i002 - Cours 11 - Annales 38/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 4

Question 5 (3 points) : Soient les classes suivantes :

1 public class DepassementException extends Exception {2 public DepassementException ( ) { super ("Depassement" ) ; }3 }4 public class Balance {5 private int MAX=150;6 public void pese r ( int poids ) throws DepassementException {7 i f ( po ids >= MAX) {8 throw new DepassementException ( ) ;9 }

10 System . out . p r i n t l n ("Poids : "+poids+" kg" ) ;11 }12 }

Q5.1 : Le programme suivant compile-t-il ? Si non, donner precisement la ligne de la premiere erreuret expliquez. Si oui, provoque-il une erreur a l’execution ? Expliquez.

1 public class TestException {2 public stat ic void main ( St r ing [ ] a rgs ) {3 Balance b1=new Balance ( ) ;4 b1 . pe se r (50) ;5 b1 . pe se r (170) ;6 }7 }

Q5.2 : En ajoutant seulement des instructions dans la methode main, proposez une solution quicompile et s’execute. Puis donnez l’a�chage obtenu par l’execution de la methode main corrigee, etexpliquez.

Question 6 (3 points) : La classe System du package java.lang possede une variable statique detype PrintStream appelee out qui permet d’ecrire sur la sortie standard. On rappelle qu’il existequ’une seule sortie standard. Soit la classe suivante qui a pour but de fournir des methodes poura�cher une chaıne de caracteres sur la sortie standard.

1 import java . i o . PrintStream ;2 public class S {3 private stat ic PrintStream ps=System . out ;4

5 public stat ic void a f f i c h e r 1 ( S t r ing s ) {6 ps . p r i n t l n ( s ) ;7 }8 public void a f f i c h e r 2 ( S t r ing s ) {9 ps . p r i n t l n ( s ) ;

10 }11 }

Q6.1 : Expliquez l’instruction a la ligne 3. Pourquoi la variable ps est-elle declaree static ?

Q6.2 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher1.

Vincent Guigue 2i002 - Cours 11 - Annales 38/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 5

Q6.3 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher2.

Q6.4 : La classe PrintStream possede une methode format dont la signature est :

public PrintStream format ( S t r ing format , Object . . . a rgs )

qui prend en parametre un format et des variables et qui a�che la chaıne formattee construite. Lenombre de variables en argument depend du nombre de variables a a�cher.Par exemple : format("%5s=%6.2f\n","PI",3.14159) demande d’a�cher "PI" comme une chaıne (%s)sur 5 caracteres, et le nombre 3.14159 au format decimal (%f) sur 6 caracteres, dont exactement 2chi↵res apres la virgule. La chaıne a�chee sera donc : " PI= 3,14". Remarque, il y a 3 espacesinseres avant la lettre ’P’ pour a�cher la chaıne "PI" sur 5 caracteres et deux espaces inseres entre’=’ et ’3’ pour a�cher le nombre sur 6 caracteres.Dans la classe S, ajoutez une methode statique afficherTab(double [] tab) qui a�che le tableaude double passe en parametre sur 4 colonnes. Chaque nombre est a�che sur 8 caracteres avec unchi↵re apres la virgule. Aide : la fonction println() sans parametre a�che un retour a la ligne. Voiciun exemple d’a�chage pour un tableau de 10 nombres reels quelconques.

2.9 52.3 23.8 9.7

73.9 4.6 80.5 42.1

71.5 23.2

Partie B : La course d’attelages (40 points)

Remarque 1 : Les informations donnees ne sont pas forcement le reflet de la realite.Remarque 2 : Toutes les variables seront declarees privees et les methodes publiques. Vous pouvezajouter des accesseurs et des modifieurs si besoin. Les methodes toString() ne sont pas demandees.

On souhaite modeliser une course d’attelages de chevaux pour un jeu sur ordinateur. Les reglesde cette course sont inventees pour l’examen. Un attelage de chevaux est compose d’une charge atransporter et de chevaux.

Regle 1 : Si le poids de la charge d’un attelage est superieur au poids total de tous ses chevaux,l’attelage ne peut pas courir.

Regle 2 : La vitesse d’un attelage est la vitesse de son cheval le plus lent.Plusieurs attelages sont initialises au depart de la course. L’attelage qui gagne la course est l’at-

telage qui peut transporter la charge et qui court a la vitesse la plus rapide.Un attelage est un moyen de transport. Un “attelage en solo” est un attelage qui possede un seul

cheval. Un “attelage en equipe” est un attelage qui possede plusieurs paires de chevaux ; par exemple,si l’attelage possede 3 paires de chevaux, il aura 3 lignes de 2 chevaux.

Un cheval est aussi un moyen de transport, il a un nom, un poids et une vitesse. Un cheval detrait est un cheval qui a un poids plus important que la plupart des chevaux et qui est selectionnepour ses aptitudes a tirer des attelages (ou autres vehicules).

Question 1 (3 points) : Donnez le schema de la hierarchie d’heritage Java des classes :MoyenDeTransport, Attelage, AttelageEnSolo, AttelageEnEquipe, Cheval, ChevalDeTrait,Course et Object.

Vincent Guigue 2i002 - Cours 11 - Annales 38/38

LI230-2012oct – Examen Session 2 - 19/06/2013 page 5

Q6.3 : Donnez l’instruction qui permet d’a�cher la chaıne de caracteres "Bonjour !" en utilisant lamethode afficher2.

Q6.4 : La classe PrintStream possede une methode format dont la signature est :

public PrintStream format ( S t r ing format , Object . . . a rgs )

qui prend en parametre un format et des variables et qui a�che la chaıne formattee construite. Lenombre de variables en argument depend du nombre de variables a a�cher.Par exemple : format("%5s=%6.2f\n","PI",3.14159) demande d’a�cher "PI" comme une chaıne (%s)sur 5 caracteres, et le nombre 3.14159 au format decimal (%f) sur 6 caracteres, dont exactement 2chi↵res apres la virgule. La chaıne a�chee sera donc : " PI= 3,14". Remarque, il y a 3 espacesinseres avant la lettre ’P’ pour a�cher la chaıne "PI" sur 5 caracteres et deux espaces inseres entre’=’ et ’3’ pour a�cher le nombre sur 6 caracteres.Dans la classe S, ajoutez une methode statique afficherTab(double [] tab) qui a�che le tableaude double passe en parametre sur 4 colonnes. Chaque nombre est a�che sur 8 caracteres avec unchi↵re apres la virgule. Aide : la fonction println() sans parametre a�che un retour a la ligne. Voiciun exemple d’a�chage pour un tableau de 10 nombres reels quelconques.

2.9 52.3 23.8 9.7

73.9 4.6 80.5 42.1

71.5 23.2

Partie B : La course d’attelages (40 points)

Remarque 1 : Les informations donnees ne sont pas forcement le reflet de la realite.Remarque 2 : Toutes les variables seront declarees privees et les methodes publiques. Vous pouvezajouter des accesseurs et des modifieurs si besoin. Les methodes toString() ne sont pas demandees.

On souhaite modeliser une course d’attelages de chevaux pour un jeu sur ordinateur. Les reglesde cette course sont inventees pour l’examen. Un attelage de chevaux est compose d’une charge atransporter et de chevaux.

Regle 1 : Si le poids de la charge d’un attelage est superieur au poids total de tous ses chevaux,l’attelage ne peut pas courir.

Regle 2 : La vitesse d’un attelage est la vitesse de son cheval le plus lent.Plusieurs attelages sont initialises au depart de la course. L’attelage qui gagne la course est l’at-

telage qui peut transporter la charge et qui court a la vitesse la plus rapide.Un attelage est un moyen de transport. Un “attelage en solo” est un attelage qui possede un seul

cheval. Un “attelage en equipe” est un attelage qui possede plusieurs paires de chevaux ; par exemple,si l’attelage possede 3 paires de chevaux, il aura 3 lignes de 2 chevaux.

Un cheval est aussi un moyen de transport, il a un nom, un poids et une vitesse. Un cheval detrait est un cheval qui a un poids plus important que la plupart des chevaux et qui est selectionnepour ses aptitudes a tirer des attelages (ou autres vehicules).

Question 1 (3 points) : Donnez le schema de la hierarchie d’heritage Java des classes :MoyenDeTransport, Attelage, AttelageEnSolo, AttelageEnEquipe, Cheval, ChevalDeTrait,Course et Object.

Vincent Guigue 2i002 - Cours 11 - Annales 38/38