QCM du TP1-2

publicité
QCM du TP1-2
Enseignants CSC4002
CSC 4002
Télécom SudParis
Octobre 2015
QCM du TP1-2
1
QCM « syntaxe Java, classes et objets »
Instructions. Pour chacune des questions, plusieurs réponses peuvent être correctes, vous pouvez donc
cocher plusieurs cases !
Les questions sont de deux niveaux de difficultés, le niveau simple et le niveau approfondi. Le niveau «
approfondi » est précédé du signe « * ».
1. Donnez les instructions suivantes qui sont correctes (au sens sans erreur de compilation) :
faux
system.out.println("Hello World\n")
System est une classe Java. Or, par convention, le nom d’une classe Java commence par
une majuscule. Il faut donc écrire System. Par ailleurs, comme en C, toute instruction simple Java
se termine par un point virgule.
Justification :
faux
system.out.println("Hello World\n") ;
System est une classe Java. Or, par convention, le nom d’une classe Java commence par
une majuscule. Il faut donc écrire System.
Justification :
vrai
System.out.println("Hello World\n") ;
Justification :
L’instruction est complète (point virgule à la fin) et le nom de classe est bien orthographié.
2. Dans System.out.println() :
faux
println est un nom de variable.
Justification :
faux
println est une référence.
Justification :
vrai
Avec des parenthèses, c’est un nom de méthode.
Avec des parenthèses, c’est un nom de méthode.
out est un attribut de classe de la classe System.
Étant placée après un nom de classe suivi d’un point et étant suivi d’un point et non
de parenthèses, out est un nom d’attribut. Par ailleurs, comme l’attribut est utilisée avec un nom de
classe et non avec une référence, c’est un attribut dit statique, terme du langage Java pour attribut
de classe.
Justification :
vrai
out est public.
Justification :
Puisqu’il est utilisé en dehors de la classe System, out est bien public.
3. Considérons la méthode « public static void main(String argv[]) » qui est le « point d’entrée » d’un programme
en Java . Sélectionnez les réponses correctes.
vrai
Le langage Java reçoit les arguments de la ligne de commande sous la forme d’un tableau de chaînes de
caractères.
En effet, la structuration des arguments de la ligne de commande est organisée sous la
forme d’un tableau de chaînes de caractères.
Justification :
faux
La méthode main ne peut retourner qu’un résultat à la fois
Justification :
faux
Non, le type de retour étant void, aucune valeur de retour n’est autorisée.
La méthode main ne peut être appelée que si on possède une instance de la classe à laquelle appartient
la méthode.
La méthode étant statique, c’est-à-dire que c’est une méthode de classe, elle peut être
appelée avec seulement le nom de classe, c’est-à-dire sans avoir d’instance.
Justification :
4. Le résultat de la compilation d’une classe Java est :
faux
un fichier exécutable par le système, c’est-à-dire avec le droit d’exécution x.
Non, le résultat de la compilation n’est pas un fichier exécutable. Il doit être interprété
par une machine virtuelle Java.
Justification :
faux
un fichier objet qui peut être utilisé dans l’édition de liens avec des programmes en langage C.
Télécom SudParis — Enseignants CSC4002 — Octobre 2015 — CSC 4002
2
QCM du TP1-2
Non, le résultat de la compilation n’est pas un fichier objet. Il doit être interprété par une
machine virtuelle Java. C’est un code intermédiaire non compréhensible par un éditeur de liens.
Justification :
vrai
un code intermédiaire utilisable avec toutes les machines virtuelles Java.
Justification :
Oui, c’est le sens du slogan Write once, use every where des concepteurs du langage Java.
5. Une classe sans méthode main :
faux
n’est pas compilable.
Non, c’est simplement une classe sans « point d’entrée » qui ne peut pas utilisée seule à
partir d’un shell. Rien n’empêche de la compiler.
Justification :
vrai
n’est pas utilisable seule.
Oui, les méthodes de la classe doivent être appelée par des méthode d’autres classes, par
exemple une classe comprenant une méthode main.
Justification :
6. Considérons l’instruction suivante : « Y y = new Y() ; ». Sélectionnez les réponses correctes.
vrai
L’instruction est syntaxiquement correcte.
C’est la déclaration d’une variable de type Y avec l’affection d’une valeur qui est un objet
de même type Y.
Justification :
faux
La classe Y possède un constructeur de prototype public void Y().
Non, un constructeur possède un prototype spécial ne comprenant aucun type de retour,
pas même void.
Justification :
vrai
Le code suivant est correct :
class Y {
public Y() {}
public Y(String a) { this(); }
}
Oui, l’instruction this() ; est un appel au constructeur par défaut, c’est-à-dire sans argument. Un constructeur peut en appeler un autre, bien sûr tant qu’il n’y a pas de dépendance circulaire
entre méthodes.
Justification :
7. Sélectionnez parmi les assertions qui suivent celles qui sont correctes.
vrai
Il est possible d’invoquer la méthode toString() sur tous les objets.
Justification :
vrai
Sans redéfinition de la méthode toString() dans la classe X, l’appel à System.out.println(x), avec x une
référence sur un objet de classe X, renvoie une chaîne de caractères correspondant à la valeur de la
référence x (soit une adresse mémoire).
Justification :
vrai
Toute classe hérite de la classe Object qui fournit une définition de la méthode toString().
C’est la définition par défaut du corps de la méthode toString() de la classe Object.
Utilisées dans une même classe, les instructions suivantes sont équivalentes : « System.out.println(this) ;
», « System.out.println(toString()) ; » et « System.out.println(this.toString()) ; ».
this est l’auto-référence de la classe dans laquelle cette variable est utilisée. Les deux
premières instructions sont équivalentes car la première appelle la méthode toString() de l’instance
en utilisant l’auto-référence. Les deux dernières instructions sont équivalentes car c’est la même
instance qui est utilisée.
Justification :
8. Étant donné l’extrait de code qui suit, sélectionnez les réponses correctes.
public class X {
int a=4;
double b=1.2;
C c = new C();
}
faux
« a » est une référence sur un type primitif.
Justification :
Non, c’est une variable d’un type primitif.
Télécom SudParis — Enseignants CSC4002 — Octobre 2015 — CSC 4002
3
QCM du TP1-2
faux
« b » est une référence sur un objet de classe « double ».
Justification :
vrai
Non, « double » n’est pas le nom d’une classe, mais le nom d’un type primitif.
« c » est une référence sur une instance de classe « C ».
Justification :
Oui, « C » est un nom classe car il commence par une majuscule.
9. Quelles sont les signatures possibles d’une méthode aire() qui prend en entrée deux points (objets de la classe
Point) et renvoie un double.
vrai
public double aire(Point a, Point b)
Justification :
faux
Les points sont des références sur des objets de la classe Point.
public double aire(Point a, b)
Justification :
Les points sont des références sur des objets de la classe Point, mais le type de l’argument
b manque.
vrai
public double aire(Point[] deuxPoints)
Les points sont des références sur des objets de la classe Point. Il est donc possible
d’utiliser un tableau de référence sur des objets de la classe Point.
Justification :
faux
public double aire(Point[2] deuxPoints)
Les points sont des références sur des objets de classe Point. Il est donc possible d’utiliser
un tableau de référence sur des objets de la classe Point, mais il n’est pas possible de fixer la taille
du tableau dans l’argument.
Justification :
10. Considérant le code qui suit, sélectionnez les réponses correctes.
Un premier fichier contient ceci :
public class A {
private int a;
public A() {
a = 5;
}
private A(int a) {
this.a = a;
}
public String toString() {
return "" + a;
}
}
Un second fichier contient cela :
public class B {
public int b;
private A a;
public B() {
a = new A();
}
public B(A a) {
this.a = a;
}
public String toString() {
return "b = " + b + " et a = " + a;
}
}
vrai
L’instruction « System.out.println(new B()) ; » affiche « b = 0 et a = 5 ».
Justification :
vrai
L’exécution donne bien le résultat ci-dessus.
L’instruction « System.out.println(new B(new A(3))) ; » provoque une erreur de compilation.
Justification :
La compilation donne le message d’erreur suivant :
Télécom SudParis — Enseignants CSC4002 — Octobre 2015 — CSC 4002
4
QCM du TP1-2
... A(int) has private access in A
System.out.println(new B(new A(3)));
^
1 error
vrai
Il existe une association uni-directionnelle entre la classe B et la classe A.
Justification :
faux
Toute instance de la classe B possède une référence sur une instance de la classe A.
L’association entre la classe A et la classe B associe toute instance de la classe A à au moins une instance
de la classe B.
Non, aucune contrainte n’empêche d’écrire la séquence d’instructions « A a1 = new A() ;
A a2 = new A() ; » sans instanciation de la classe B.
Justification :
faux
L’association entre la classe A et la classe B associe toute instance de la classe A à au plus une instance
de la classe B.
Non, aucune contrainte n’empêche d’écrire la séquence d’instructions « A a = new A() ;
B b1 = new B(a) ; B b2 = new B(a) ; ».
Justification :
vrai
L’association entre la classe A et la classe B associe toute instance de la classe B à au plus une instance
de la classe A.
Justification :
Oui, c’est la signification de la déclaration de l’attribut « a » de la classe B.
Télécom SudParis — Enseignants CSC4002 — Octobre 2015 — CSC 4002
5
Téléchargement