Correction - Examen Java (POO)
Source : PDF fourni (poo [Link]). Généré le 2026-01-31.
En-tête (rappel)
Examen : Langage de programmation Java Durée : 2 H En cas d'ambiguïté dans le texte, levez
cette ambiguïté en présentant votre interprétation personnelle. Traitez les questions dans
l'ordre de votre choix. N'oubliez pas de commenter vos programmes.
Exercice 1 : Questions de cours (corrigé)
1. Donner la définition d'une Classe. (1 pt)
Réponse : Une classe est un modèle (plan) qui définit les attributs (données) et les méthodes
(comportements) communs à des objets. Un objet est une instance concrète d’une classe.
2. Quelle est la différence entre une méthode en Java et une fonction en C ? (1 pt)
Réponse : En Java, une méthode appartient à une classe (elle est déclarée dans une classe) et
peut être appelée sur un objet ou sur la classe si elle est static. En C, une fonction est définie
hors classe et n’appartient pas à un type ; on l’appelle directement par son nom.
3. Quelle est la différence entre une classe abstraite et une interface ? Quelle est la syntaxe
Java
Réponse : Une classe abstraite peut contenir des attributs, des méthodes concrètes et des
méthodes abstraites ; on ne peut pas l’instancier. Une interface définit un contrat : elle déclare
des méthodes (et des constantes) que les classes doivent implémenter. Syntaxe : interface
NomInterface { ... } (ex : public interface Exportable { double droitDouanes(); String
paysDestination(); }).
4. Quelle est la différence entre une collection de type ArrayList et une collection de
Réponse : ArrayList est basée sur un tableau dynamique : accès rapide par index (O(1)) mais
insertion/suppression au milieu coûteuse (O(n)). LinkedList est une liste chaînée :
insertion/suppression rapides aux extrémités (O(1)) mais accès par index plus lent (O(n)).
5. Pourquoi la machine virtuelle joue-t-elle un rôle important dans la plateforme Java ? (1pt)
Réponse : La JVM exécute le bytecode de façon portable : le même programme compilé peut
tourner sur différents systèmes. Elle gère aussi le chargement des classes, la sécurité, la
mémoire (garbage collector) et l’optimisation (JIT).
Exercice 2 : QCM (corrigé)
Que signifie le mot clef "static" associé à un attribut ?
1. Que la valeur de cet attribut est constante
2. Que cet attribut n'est visible que dans la classe où il est défini
3. Que cet attribut sera toujours passé par valeur
4. Que cet attribut a une valeur unique pour toutes les instances de la classe
Réponse : 4
Au sujet du mot clef "abstract", quelle assertion est fausse ?
1. Une classe abstraite ne peut être instanciée
2. Une méthode abstraite n'a pas d'implémentation
3. Une classe abstraite n'a pas forcément de classe fille
4. Une classe abstraite doit contenir au moins une méthode abstraite
Réponse : 4
Une interface en Java peut contenir :
1. Des déclarations de méthodes et de constantes
2. Des déclarations de méthodes
3. Des déclarations de méthodes et de méthodes statiques
4. Des déclarations de méthodes et de constructeurs
Réponse : 1
Quelle différence existe t-il entre les interfaces List et Set ?
1. Une List peut contenir une référence null, pas un Set
2. Un Set peut contenir deux fois le même élément, pas une List
3. Une List peut contenir deux fois le même élément, pas un Set
4. Un Set peut contenir une référence null, pas une List
Réponse : 3
Quel est le droit d'accès le plus restrictif pour donner l'accès aux membres d'une autre classe
1. public
2. default access
3. abstract
4. protected
Réponse : 2
La déclaration suivante : public class MaClass<T> {… } permet de définir...
1. Rien du tout en java
2. Un type générique
3. Une classe abstraite dont la classe T hérite forcément
4. Un type comparable avec le type T
Réponse : 2
Dans quelle situation utilise t-on la séquence : try-catch-finally ?
1. Pour traiter les exceptions
2. Pour sortir du programme
3. Pour déboguer le code
Réponse : 1
Peut-on utiliser plusieurs blocs catch après un bloc try ?
1. Vrai
2. Faux
Réponse : 1
Quelle instruction faut-il utiliser pour créer un nouveau tableau d'entiers de type int de 5
cases
1. Array t = new Array ("int", 5);
2. int t = new int[5];
3. int[] t = new int[5];
4. int[] t = new int[4];
5. Array t = new int[5];
Réponse : 3
Exercice 3 : Étude de cas (corrigé)
Rappel : on gère des articles électroménagers dans un magasin (Article, Fragile, Magasin,
Exportable).
1. Ecrire le constructeur de la classe Article. Le code doit être unique pour chaque article.
Réponse (idée) : utiliser un compteur statique pour générer un code unique, puis initialiser nom
et prixHT.
Proposition de code :
public class Article {
private static int compteur = 0; // pour générer des codes uniques
protected int code;
protected String nom;
protected double prixHT;
public Article(String nom, double prixHT) {
compteur++;
[Link] = compteur;
[Link] = nom;
[Link] = prixHT;
}
public double prixTransport() {
return prixHT * 0.05; // 5% du prix HT
}
@Override
public String toString() {
return [Link] + " " + [Link];
}
}
2. Comment créer une instance de la classe Article ?
Réponse : Exemple : Article a = new Article("TV", 7000.00);
3. Quel est l'intérêt de redéfinir la méthode toString() dans toutes vos classes ?
Réponse : Redéfinir toString() permet d’obtenir un affichage lisible de l’objet (débogage, logs,
[Link]), au lieu de l’adresse mémoire par défaut.
4. Donner deux constructeurs de la classe Fragile à partir du constructeur de sa classe de base,
l'un en précisant l'emballage l'autre non.
Réponse : un constructeur qui appelle super(nom, prixHT) et initialise emballage, et un autre
sans emballage qui fournit une valeur par défaut.
Proposition de code :
public class Fragile extends Article {
private String emballage;
// Constructeur avec emballage
public Fragile(String nom, double prixHT, String emballage) {
super(nom, prixHT);
[Link] = emballage;
}
// Constructeur sans emballage (valeur par défaut)
public Fragile(String nom, double prixHT) {
this(nom, prixHT, "standard");
}
@Override
public double prixTransport() {
return 2 * [Link]();
}
@Override
public String toString() {
return [Link]() + " (fragile, emballage=" + emballage + ")";
}
}
5. Le prix de transport d'un article fragile est deux fois le prix de transport normal d'un Article.
Redéfinir la méthode prixTransport() de la classe Fragile.
Réponse : redéfinir prixTransport() pour retourner 2 * [Link](). (Voir code Fragile
ci-dessus).
6. Peut-on écrire : Article tv = new Fragile("LG", 7000.00); Si oui, quel est le prix de transport
de l'article tv ?
Réponse : Oui, c’est du polymorphisme (référence Article, objet Fragile). Le prix de transport est
celui de Fragile (méthode redéfinie).
Calcul : prixHT = 7000, transport Article = 7000 * 0.05 = 350, transport Fragile = 2 * 350 = 700.
7. Quelle relation existe-t-il entre Magasin et Article ?
Réponse : relation d’association 1..* (un magasin contient plusieurs articles). Selon le modèle,
on peut la considérer comme agrégation/composition.
8. Ajouter les attributs nécessaires pour implémenter cette relation (vous choisirez de quel
côté de la relation ajouter ces attributs).
Réponse : ajouter une collection d’articles dans Magasin (ex. Set<Article> ou ArrayList<Article>).
9. La méthode add() permet d'ajouter un article et la méthode contains() vérifie si un article
est disponible au magasin. Donner le plus simplement possible le code de ces deux méthodes.
Réponse (simple) : add() ajoute dans la collection, contains() vérifie la présence.
Proposition de code :
import [Link];
import [Link];
public class Magasin {
// relation : un magasin contient plusieurs articles (association 1..*)
private final Set<Article> articles = new HashSet<>();
public void add(Article a) {
[Link](a);
}
public boolean contains(Article a) {
return [Link](a);
}
}
10. Expliquer en quelques mots comment rendre nos articles exportables à l'étranger ?
Réponse : définir une interface Exportable et faire implémenter cette interface par les articles
exportables (ou par une sous-classe), en fournissant droitDouanes() et paysDestination().
Proposition :
public interface Exportable {
double droitDouanes();
String paysDestination();
}
// Exemple : rendre un article exportable en l'implémentant
// public class Article implements Exportable { ... }