You are on page 1of 2

Corrig´ e du QCM de Programmation 1

Licence d’informatique Le 01/12/2004

1

Questions g´ en´ erales
Bar` eme :
bonne r´ eponse=1pt ; mauvaise r´ eponse=-0.5pt ; pas de r´ eponse=0pt.

1. class B {
private int x ; private float y ; public void setX( int x) {this.x=x ; } public void setY( float y) {this.y=y ; } }

Le code ci-dessus est une illustration de l’encapsulation. 2. La fonction principale de la JVM consiste ` a interpr´ eter le bytecode. 3. Lequel de ces langages n’est pas orient´ e objet : C. Par ailleurs, SIMULA est probablement le premier langage OO, tandis que C++ est une extension objet de C. 4. Toutes les classes de Java h´ eritent de Object. 5. Le passage de param` etres en Java est effectu´ e par valeur, mˆ eme si les variables objet sont des r´ ef´ erences, et donc leur passage par valeur ressemble ` a un passage par r´ ef´ erence. 6. Un objet traite un message re¸ cu en ex´ ecutant une m´ ethode d’instance, c’est juste une terminologie diff´ erente pour dire la mˆ eme chose

2

Questions sp´ ecifiques

Bar` eme : bonne r´ eponse=3pt ; mauvaise r´ eponse=-1pt ; pas de r´ eponse=0pt 7. Combien d’instances de la classe A sont cr´ e´ ees pendant l’ex´ ecution du code suivant ? Combien en reste apr` es le passage du Garbage collector ?
A u,b,c ; A a=new A() ; b=new A() ; c=b ; a=b ;

Les deux instances r´ ef´ erenc´ ees par a (1` ere) et b (2` eme) sont cr´ e´ ees par les deux new. Ensuite la variable a est r´ eorient´ ee sur la 2` eme instance, en laissant la 1` ere “orpheline”. Par la suite l’instance “orpheline” sera nettoy´ ee par le Garbage collector. D’o` u la r´ eponse 2 ;1. ´ 8. Etant donn´ e que la classe Sardine ´ etend la classe Poisson, trouvez une ligne qui passe bien la compilation mais produit une erreur ` a l’ex´ ecution parmi les suivantes – Poisson y =new Poisson() ; Sardine x= (Sardine)y ; Poisson z=x ; Tout va bien pour le compilateur : une affectation sans transtypage, un downcasting explicite, un upcasting implicite. Par contre, ` a l’execution la tentative de transtyper un simple Poisson en Sardine donne une erreur. Donc la premi` ere ligne correspond ` a l’´ enonc´ e. – Sardine y =new Sardine() ; Poisson x= y ; Sardine z=(Sardine)x ; Tout va bien pour le compilateur : une affectation sans transtypage, un upcasting implicite, un downcasting explicite. A l’execution le downcasting se passe bien, comme l’objet r´ ef´ erenc´ e par x est en r´ ealit´ e Sardine. Pas d’erreur. – Poisson y =new Sardine() ; Object x= y ; Sardine z=x ; La derni` ere affectation est un downcasting implicite, ce qui est interdit et donne lieu ` a une erreur ` a la compilation. – Poisson y =new Poisson() ; Sardine z= new Sardine() ; y=z ; Pas de downcasting - pas de probl` emes.

1

La bonne r´ eponse sera donc 24 2 . Sa valeur finale est -1.println(b. D a=new D() . a.y est initialis´ ee ` a 0 et tout de suite decr´ ement´ ee par le constructeur.out.x + ” et ” + b. public int y . Cette m´ ethode est associ´ ee ` a une classe (et non ` a une instance). Cette variable est initialis´ ee a 0 au d´ ebut incr´ ement´ ee 4 fois (avec 2 appels de travailler et 2 appels du constructeur).println(a. x=x*i . Ceux qui ont choisi la r´ eponse p´ edantique ce code ne se compile pas ont 1 point.travailler() . } } qu’affichera le code suivant ? B b=new B() .x + ” et ” + b2. Il y une petite coquille dans cet exercice. 10. } } qu’affichera le code suivant ? Poule b1=new Poule(”2004”) .x. } } class Poule extends Oeuf { public Poule() {} public Poule(int i){this() .g().x signifie D. 11. Pour la m´ ethode statique g tout est diff´ erent. Pour la classe D d´ efinie comme suit : class D { public static int x . public Oeuf() {x=5 .out. } public Poule(String s){super(33) .x + ” et encore ” + b3.g(3)) . y. x est ici une variable de classe. public static int g( int x) {return (x+4) . System.y) . public static int g(int x) {return (6) . et que Poule(int i) commence par un super(33) qui signifie Oeuf(33). D b=new D() . En tenant compte de toutes ces consid´ erations on obtient la bonne r´ eponse : 32 et 10020 et encore 5.travailler() . donc sa valeur finale est 4. chaque objet de la classe D contient son propre y. y est une variable d’instance.g() signifie A. La variable b.x ) . c-` a-d “la g de A”. } } qu’affichera le code suivant ? D. Par contre. La m´ ethode d’instance f est d´ efinie dans la classe A et red´ efinie dans B. Poule b2 =new Poule(2004) .. j’ai oubli´ e de mettre le type de retour void dans la d´ efinition de la fonction travailler. la JVM utilisera “la f de B”.. x. Pour les classes Oeuf et Poule d´ efinies comme suit : class Oeuf { public int x . System. System. Pour les classes A et B d´ efinies comme suit : class A { public int f(int x) {return(x+1) } . Le choix de la version utilis´ ee s’effectue ` a l’ex´ ecution (liaison tardive) et d´ epend de la vraie classe de l’objet.f(2)*a..out. A a =b . public static travailler() {x++ . sa version est choisie statiquement par le compilateur. Bref. a. } } class B extends A { public int f(int x) {return(x+2) } . D’o` u la r´ eponse 4 et -1 valant 3 points. } public Oeuf(int y) {x=y . Poule b3= new Poule() . elle appartient ` a toute la classe D et l’´ ecriture b.println(b1.9.. Il faut aussi comprendre que Poule(int i) commence par un this() qui signifie Poule(). Comme la variable a r´ ef` ere en r´ ealit´ e` a un objet de classe B. Pour obtenir la bonne r´ eponse il suffit de ne pas oublier que le constructeur Poule() contient un appel implicite de Oeuf().} public D() {x++ .