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")
Justification : 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.
faux system.out.println("Hello World\n") ;
Justification : System est une classe Java. Or, par convention, le nom d’une classe Java commence par
une majuscule. Il faut donc écrire System.
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 : Avec des parenthèses, c’est un nom de méthode.
faux println est une référence.
Justification : Avec des parenthèses, c’est un nom de méthode.
vrai out est un attribut de classe de la classe System.
Justification : É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.
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.
Justification : 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.
faux La méthode main ne peut retourner qu’un résultat à la fois
Justification : Non, le type de retour étant void, aucune valeur de retour n’est autorisée.
faux La méthode main ne peut être appelée que si on possède une instance de la classe à laquelle appartient
la méthode.
Justification : 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.
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.
Justification : Non, le résultat de la compilation n’est pas un fichier exécutable. Il doit être interprété
par une machine virtuelle Java.
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
Justification : 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.
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.
Justification : 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.
vrai n’est pas utilisable seule.
Justification : 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.
6. Considérons l’instruction suivante : « Y y = new Y() ; ». Sélectionnez les réponses correctes.
vrai L’instruction est syntaxiquement correcte.
Justification : 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.
faux La classe Y possède un constructeur de prototype public void Y().
Justification : Non, un constructeur possède un prototype spécial ne comprenant aucun type de retour,
pas même void.
vrai Le code suivant est correct :
class Y {
public Y() {}
public Y(String a) { this(); }
}
Justification : Oui, l’instruction this() ; est un appel au constructeur par défaut, c’est-à-dire sans argu-
ment. Un constructeur peut en appeler un autre, bien sûr tant qu’il n’y a pas de dépendance circulaire
entre méthodes.
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 : Toute classe hérite de la classe Object qui fournit une définition de la méthode toString().
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 : C’est la définition par défaut du corps de la méthode toString() de la classe Object.
vrai 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()) ; ».
Justification : 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.
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 : Non, « double » n’est pas le nom d’une classe, mais le nom d’un type primitif.
vrai « 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 : Les points sont des références sur des objets de la classe Point.
faux 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)
Justification : 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.
faux public double aire(Point[2] deuxPoints)
Justification : 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.
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+"eta="+a;
}
}
vrai L’instruction « System.out.println(new B()) ; » affiche « b = 0 et a = 5 ».
Justification : L’exécution donne bien le résultat ci-dessus.
vrai 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 : Toute instance de la classe B possède une référence sur une instance de la classe A.
faux 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.
Justification : 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.
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.
Justification : 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) ; ».
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
1 / 5 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !