Portail informatique Année 2018 – 2019

CSC 3101 – Algorithmique et langage de programmation

Vous pouvez retrouver le jeu ici. Quelle expression instancie un Bag paramétré par Chat ?
  1. new Chat<Bag>();
  2. new Chat<Bag>("Garfield");
  3. new Bag<Chat>();
  4. new Bag<Chat>("Garfield");
new Bag<Chat>();
Par quoi faut-il remplacer "???" pour que le programme soit correct ?
  1. class Bag
  2. class Bag<E>
  3. class Bag<E extends Chat>
  4. class Bag<E implements Chat>
new Bag<E extends Chat>();. La classe Chat est paramétrée par E, et E doit étendre Chat car la méthode Bag.ditMiaou() invoke la méthode E.ditMiaou();. La réponse class Bag<E implements Chat> est a éliminée car qu'un paramètre hérite d'une autre classe ou mette en œuvre une autre classe, on utilise le mot clé extends.
Comment instancier un Bag avec un propriétaire Chat et contenant des Monster ?
  1. new Bag<Chat, Monster extends Monster>();
  2. new Bag<Monster, Chat>();
  3. new Bag<Chat, Monster>();
  4. new Monster<Chat, Bag>();
new Bag<Chat, Monster>();. On ne met jamais extends quand on instancie un objet : le extends est utilisé pour déclarer les paramètres d'une classe.
Qu'affiche ce programme ?
  1. Le programme ne compile pas
  2. Miaou!
  3. MiaouTchoum!
  4. Rien
MiaouTchoul!. Le programme est correct car (i) on peut affecter la référence vers le ChatEnrhume à la variable chat puisqu'un chat est de type Chat et qu'un ChatEnrhume hérite de Chat, et (ii) le champ element de bag est de type Chat puisque le paramètre E vaut Chat dans Bag<Chat>. Comme le champ bag.element référence un objet de type ChatEnrhume, c'est la méthode ditMiaou() de ChatEnrhume qui est invoquée.