Licence d'informatique
Programmation objet et Java

Questionnaire n°4


Question 1. On considère l'instruction essai(); qui est l'appel d'une méthode d'objet. Qu'est-ce qui est vrai ?

    (a) l'instruction est invalide si on n'utilise pas this.;
    (b) elle est toujours valide;
    (c) elle est valide si elle apparaît dans une méthode d'objet de la même classe,
    (d) elle est invalide parce qu'elle est sans argument,
    (e) elle n'est pas valide parce qu'il n'y a pas d'objet appelant.


Question 2. Quelles sont les affirmations vraies parmi les suivantes ?

(a) une classe peut contenir à la fois des méthodes statiques et des méthodes d'objets,
(b) seules des classes sans attributs peuvent contenir des méthodes statiques,
(c) seules des classes utilisateur peuvent contenir des méthodes statiques
(d) Si une classe contient des méthodes statiques, elle ne peut contenir des méthodes d'objet.


Question 3. Une méthode publique statique peut toujours être appelée en préfixant l'appel

(a) du nom de la classe
(b) du nom d'un objet de la classe
(c) this
(d) sans préfixe.


Question 4. Une classe Exemple a les deux constructeurs

Exemple(int a)
Exemple(float f, char c)

Qu'elles sont les déclaration correctes parmi les suivantes ?

(a) Exemple e = new Exemple();
(b) Exemple e = new Exemple(7);
(c) Exemple e = new Exemple(3.1,'A');
(d) Exemple e = new Exemple(7, 'a');


Question 5. Une méthode qui lève une exception en utilisant throw doit contenir une bloc catch pour traiter cette exception.

(a) vrai,
(b) faux.


Question 6. On suppose que Beta dérive de Alpha et Gamma dérive de Beta. Dans un appel d'une méthode de profil void methode(Object p) l'argument passé à methode peut être

(a) de type Alpha, Beta, Gamma ou Object,
(b) Objectet Alpha seulement,
(c) Gamma et Beta seulement.


Question 7. On considère le programme que voici:

class Exemple {
   public boolean b = true;
   public boolean set(boolean x) {
      x = !x ;
      return (x == b);
   }
   public static void main(String[] args) {
      Exemple ex = new Exemple();
      ex.b = ex.set(ex.b);
      System.out.println(ex.b);
   }
}
(a) le programme imprime true.
(b) le programme imprime false.


Question 8. On considère le programme suivant:

class Point {
   int x, y;
   public Point(int xx, int yy) { x = xx; y = yy; }
   public void change(Point p) { p.x += x; p.y += y; }

   public static void main(String[] args) {
      Point a = new Point(2, 3), b = new Point(5, 10);
      a.change(b);
   }
}

Quel est le résultat ?

(a) a et b sont inchangés.
(b) seul a est changé
(c) seul b est changé
(d) a et b sont changés.


Question 9. Une classe Beta dérive d'une classe Alpha. Les deux classes ont une méthode public boolean estIl(). On considère le fragment de programme

Beta b = new Beta();
Alpha a = b;
if ( a.estIl() ) ...

Qu'est-ce qui est vrai ?

(a)  la méthode de la classe Alpha est appelée parce que Java utilise la liaison dynamique
(b)  la méthode de la classe Beta est appelée parce que Java utilise la liaison dynamique
(c)  la méthode de la classe Alpha est appelée parce que a est de type Alpha
(d)  l'appel n'est pas valable parce que le compilateur ne sait pas déterminer laquelle des méthodes appeler.


Question 10. On considère la classe suivante.

public class X {
   int x = 10;
   public X() { x = 20; }
   public int getX() { return x; }
}

Que se passe-t-il avec l'instruction que voici:

System.out.println( new X().getX() );
(a) Ne compile pas
(b) Compile mais lève une exception à l'exécution
(c) Affiche 10
(d) Affiche 20
(e) Boucle indéfiniment.