Vous êtes sur la page 1sur 9

Programmation Objet Java

Corrigé INGE3 2010-2011


Examen 1 Semestre 6

Durée : 1h30 AUCUN DOCUMENT - AUCUNE CALCULATRICE

Lisez attentivement chaque partie du sujet avant de vous lancer dans vos réponses.

Partie 1 : 10 QCM (5 POINTS).  20 minutes


Une seule réponse par question : 0,5 point pour une seule réponse juste,
0 point pour aucune réponse, une réponse fausse ou plusieurs réponses
Q1) Quel spécificateur d'accès limite la visibilité d'un membre à sa seule classe ?

a) public b) package c) protected d) private

Q2) Choisissez l’expression qui permet de convertir le contenu d’un String nommé text en une valeur de type float

a) text.floatValue() b) Float.parseFloat(text) c) String.parseString(text) d) (float)text

Q3) Sélectionnez la seule phrase qui est vraie.

a) Une classe abstraite ne peut pas être instanciée


b) Une classe abstraite ne peut pas définir des méthodes concrètes
c) Une classe abstraite ne peut pas définir des méthodes abstraites
d) Une classe abstraite ne peut pas définir des attributs

Q4) Sélectionnez le bout de code que l’on utilisera pour une classe qui fait partie du package tools et qui utilise des
classes des packages java.lang et java.util.

a) import java.util.*; import java.lang.*; package tools;


b) import java.util.*; import java.lang.*;
c) package tools; import java.util.*;
d) package tools; import java.lang.*;

Q5) Qu'affiche le programme ci-dessous?

public class Maman {


public String getVal () {return "Maman";}
public Maman () { System.out.print (this.getVal()); }
}
public class Fifille extends Maman {
public String getVal () {return "Fifille";}
public Fifille () { super(); }
}
public class Famille {
public static void main (String args[]) {
new Fifille();
new Maman();
}
}

a) MamanMaman b) MamanFifille c) FifilleFifille d) FifilleMaman

Q6) Quels types de variable sont automatiquement initialisés à leur valeur par défaut? 1 des 2 réponses suivantes

a) les attributs de classe


b) les variables locales
c) les paramètres de méthode

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6
d) les attributs d'instance

Q7) Comment compléter le code ci-dessous pour qu'il affiche la chaîne de caractères "constructeur de base" ?

class Base {
Base (int i){ Sub()
System.out.println("constructeur de base"); {
} /*Deux*/
Base(){} }
} public void sub()
public class Sub extends Base { {
public static void main (String argv[]){ /*Trois*/
Sub s = new Sub(); }
/*Un*/ }
}

a) Remplacer /*Un*/ par Base(10);


b) Remplacer /*Un*/ par super(10);
c) Remplacer /*Deux*/ par super(10);
d) Remplacer /*Trois*/ par super(10);

Q8) Identifiez les instructions qui déclarent et instancient correctement des tableaux de 4 entiers.

a) int[] n = new int[4];


b) int[] n = { 3, 4, 2, 30 };
c) int n[] = new int[3];
d) int n[4];

Q9) Choisissez la paire d'instructions permettant de créer un objet du type ArrayList (voir ANNEXE C en dernière
page) et d'y ajouter un élément :

a) ArrayList v = new ArrayList (99); v[1] = 99;


b) ArrayList v = new ArrayList (); v.add (99);
c) ArrayList v = new ArrayList (100); v.add(99);
d) ArrayList v = new ArrayList (99); v.add("99");

Q10) Dans le code ci-dessous, choisissez la définition la plus vraisemblable de la méthode ioAppel :

import java.io.*;
public class Test {
public static void main (String args[]) {
Test t= new Test();
t.uneMethode();
}

void uneMethode () {
try {
ioAppel();
} catch (IOException e) {}
}
}

a) public void ioAppel() throws IOException {...}


b) public void ioAppel() throw IOException {...}
c) public void ioAppel() {...}

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6
d) public void ioAppel throws IOException () {...}

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6

Partie 2 : Diagramme de classes et code Java  70 minutes (15 POINTS)

On cherche à gérer une liste d'élèves avec leurs notes et les profs qui les évaluent.

Le diagramme de classes proposé en ANNEXE A respecte les consignes suivantes :

 Chaque prof et élève ont comme propriété commune le nom et le prénom ;


 La élèves sont regroupés dans une collection statique de type ArrayList (voir ANNEXE C en dernière page) ;
 Chaque élève de cette collection ArrayList a les informations suivantes : un numéro d’identifiant unique de
l’élève, son nom, son prénom et un tableau de 10 notes ;
 Pour chaque note, sont indiqués la valeur de la note, l’élève corrigé et le prof correcteur ;
 Chaque élève ne peut consulter que l’ensemble de ses propres notes ainsi que sa moyenne.
 Chaque prof peut effectuer les opérations suivantes : rechercher un élève dans la collection ArrayList des élèves à
partir de son numéro d’identifiant, modifier des notes de l’élève recherché, ainsi que trier les élèves de cette
collection par moyenne des notes.

Des extraits utiles du code de ces classes sont définies est en ANNEXE B. Il est inutile de recopier ces extraits et de
connaître les parties du code cachées pour faire les exercices demandés.

Des extraits de la documentation Javadoc sont fournis en ANNEXE C.

Questions sur le diagramme et le code. (15 POINTS)  70 minutes

Le code à compléter est encadré en gris : lisez attentivement les commentaires pour vous aider. Votre code devra
être commenté pour plus de clarté.

1) Pour la classe Personne modélisée dans le diagramme de l’ANNEXE A et définie en ANNEXE B.1 :
a) Quel est l’intérêt qu’elle soit abstraite ? (0,5 POINT)
Cette classe non instanciable permet de factoriser les propriétés communes de ses classes filles Prof et Eleve
b) Quel est l’intérêt de mettre ses attributs en visibilité « protected » ? (0,5 POINT)
Pour les rendre visibles à ses classes filles uniquement
2) Dans la classe Note définie en ANNEXE B.2, Complétez le code de son constructeur qui initialise tous ses
attributs avec ses paramètres. (1 POINT)

3) Dans la classe Eleve définie en ANNEXE B.3 :


a) Complétez le code de son constructeur qui initialise ses attributs grâce à ses paramètres, dont le nom et le
prénom par héritage (voir ANNEXE B.1). (2 POINTS)

b) Codez l’accesseur en lecture getIdentifiant permettant de consulter l’attribut privé identifiant de l’élève
référencé. (0,5 POINT)

c) Pourquoi ne faut-il pas mettre l’accesseur en écriture pour l’attribut privé identifiant ? (0,5 POINT)
Pour que ni l’élève ni le prof ne puisse le modifier
d) Complétez sa méthode moyenne qui calcule et retourne la moyenne des notes non vides de l’élève
référencé. Si toutes les notes sont vides, l’exception NotesVides est créée. (2 POINTS)

4) Dans la classe CollectionEleves définie en ANNEXE B.4, complétez le code de sa méthode statique
rechercher qui recherche un élève dans la collection des élèves liste à partir de son paramètre identifiant.
Si l’élève recherché existe, cette méthode retourne l’élève trouvé. Si élève n’existe pas, l’exception
EleveInexistant est créée. (2 POINTS)

5) Dans la classe Prof définie en ANNEXE B.5 :


a) Complétez sa méthode setNote qui modifie la note d’un élève en lisant attentivement les commentaires en
gris. (3 POINTS)

b) Codez la méthode qui trie et affiche les élèves de la collection par ordre décroissant de moyenne (voir
question 3d). Pour chaque élève sans exception NotesVides déclenchée, cette méthode affichera son
nom, son prénom et sa moyenne. (3 POINTS)

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6

ANNEXE A : DIAGRAMME DE CLASSES

Les classes en italique représentent des classes abstraites.


Les niveaux de visibilité sont : # protected, - private ou + public

CollectionEleves
Personne
# String nom
# String prenom
+ Eleve rechercher(…)

*
Prof Note Eleve
+ float valeur - int identifiant
« correcteur » « corrige »
10
+ void setNote(…) + int getIdentifiant()
+ float moyenne()

ANNEXE B : EXTRAITS DU CODE

ANNEXE B.1
La classe Personne est une classe abstraite définie comme suit :

abstract class Personne {


// Attributs de niveau de visibilité « protected »
protected String nom;
protected String prenom;

ANNEXE B.2
Un extrait de la classe Note est défini ci-dessous :

public class Note {


// attributs publics
public Prof correcteur ; // prof correcteur qui a mis la note
public Eleve corrige ; // élève corrigé
public float valeur ; // valeur de la note

// Constructeur à compléter qui initialise les attributs de la note référencée avec ses paramètres
public Note (Prof correcteur, Eleve corrige, float valeur) {
this.correcteur = correcteur ; this.corrige = corrige ; this.valeur = valeur ;
}
}

ANNEXE B.3

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6
Un extrait de la classe Eleve est défini ci-dessous :

public class Eleve extends Personne {


// Constante
final int NB_NOTES = 10 ; // nombre maximum de notes par élève

// attributs
public Note notes[] = new Note[NB_NOTES] ; // tableau public instancié des notes de l’élève
private int identifiant ; // numéro d’identifiant privé de l’élève

// Constructeur à compléter qui initialise les attributs de l’élève référencé avec ses paramètres, dont le nom et le
// prénom (voir ANNEXE B.1)
public Eleve (String nom, String prenom, int identifiant) {
this.nom = nom ; this.prenom = prenom ; this.identifiant = identifiant ;
}

// Méthode à compléter qui calcule et retourne la moyenne des notes non vides de l’élève référencé. Si toutes les
// notes sont vides, l’exception NotesVides est créée
public float moyenne () throws NotesVides {
int i = 0 ; // nombre de notes
float somme = 0 ; // somme des notes

// calcul de la somme des notes non vides


do {
if (note[i] != null) {
somme += note[i].valeur ;
i++ ;
}
} while (i<10) ;

if (i==0)
throw new NotesVides() ; // toutes les notes sont vides : exception créée
else
return somme/i; // retourner la moyenne des notes non vides
}
}

ANNEXE B.4
Un extrait de la classe CollectionEleves est défini ci-dessous :

import java.util.ArrayList ;

public class CollectionEleves {


// Attributs
public static ArrayList<Eleve> liste ; // liste publique statique des élèves

// Méthode statique à compléter qui recherche un élève dans la collection des élèves liste à partir de son numéro
// d’identifiant en paramètre. Si l’élève recherché existe, cette méthode retourne l’élève trouvé. Si cet élève
// n’existe pas, l’exception EleveInexistant est créée.
public static Eleve rechercher (int identifiant) throws EleveInexistant {
Eleve e = null ; // élève à rechercher
boolean trouve = false ; // booléen indiquant si l’élève existe
int i = 0 ; // indice de la liste

// suite page suivante

// boucle de recherche dans la liste


while (i<CollectionEleves.liste.size() && !trouve) {

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6
e = CollectionEleves.liste.get(i);
if (e.getIdentifiant() == identifiant)
trouve = true;
i++;
}

if (!trouve)
throw new EleveInexistant() ; // élève non trouvé : exception créée
else
return e; // retourner l’élève trouvé
}
}

ANNEXE B.5
Un extrait de la classe Prof est défini ci-dessous :

public class Prof extends Personne {

// A partir du numéro d’identifiant de l’élève en paramètre, cette méthode recherche cet élève et modifie si
// possible une note. Si l’élève recherché n’existe pas, l’exception EleveInexistant déclenchée affiche un message
// d’erreur.
public void setNote (int identifiant, float valeur, int i) {
Eleve corrige ; // déclarer l’élève corrigé à rechercher
try { // rechercher l’élève corrigé dans la collection des élèves
corrige = CollectionEleves.rechercher(identifiant) ;
}
catch (EleveInexistant e) { // exception déclenchée si l’élève corrigé n’existe pas
System.out.println(″Cet élève est inexistant″) ;
}
// A compléter. Si l’élève existe, modifier la note d’indice i en paramètre du tableau notes (voir ANNEXE B.3) de
// l’élève corrige : si cette note d’indice i est vide, instancier cette note (voir ANNEXE B.2) sinon modifier la valeur
// de la note avec la valeur en paramètre. Le prof correcteur à modifier est le prof référencé.
if (corrige.note[i] == null) // si la note d’indice i de l’élève est vide
corrige.note[i] = new Note(this, corrige, valeur);
else {
corrige.note[i].valeur = valeur;
corrige.note[i].correcteur = this;
}
}

// Méthode de tri par moyenne décroissante pour les élèves ayant au moins une note
public void trier () {
ArrayList<Eleve> listetriee = new ArrayList<Eleve>(); // liste à trier instanciée
int i, j; // indices de parcours de la liste d’élèves
Eleve eleve1, eleve2 ;
float moy1, moy2 ;

// ajout des élèves ayant une moyenne dans la liste à trier


for (i=0 ; i < CollectionEleves.liste.size() ; i++) {
eleve1 = CollectionEleves.liste.get(i);
try {
moy1 = eleve1.moyenne(); // moyenne de l’élève
listetriee.add(eleve1) ; // ajouter l’élève dans la liste à trier
}
catch(NotesVides e1) {} // exception déclenchée si l’élève n’a pas de note
}
// suite page suivante
// trier la liste à trier par moyenne décroissante
for (i=0 ; i < listetriee.size()-1 ; i++)

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6
for (j=i+1 ; j < listetriee.size() ; j++) {
// Récupérer chaque paire d’élèves pour comparer leur moyenne
eleve1 = listetriee.get(i);
moy1 = eleve1.moyenne();
eleve2 = listetriee.get(j);
moy2 = eleve2.moyenne();

if (moy2 > moy1) {


// Permuter les 2 élèves dans la liste à trier
listetriee.set(i, eleve2) ;
listetriee.set(j, eleve1) ;
}
}

// Afficher les élèves de la liste triée


for (i=0 ; i < listetriee.size() ; i++) {
eleve1 = listetriee.get(i);
System.out.println(eleve1.nom+” ; ”+ eleve1.prenom+” ; ”+ eleve1.moyenne());
}
}
}

JP Segado 8
Programmation Objet Java
Corrigé INGE3 2010-2011
Examen 1 Semestre 6

ANNEXE C : extraits de la documentation Javadoc

java.util

class ArrayList

Constructor Summary
ArrayList()
Constructs an empty list with an initial capacity of ten.
ArrayList(Collection<? extends E> c)
Constructs a list containing the elements (objects) of the specified collection, in the order they are
returned by the collection's iterator.
ArrayList(int initialCapacity)
Constructs an empty list with the specified initial capacity.

Method Summary
boolean add(E e)
Appends the specified element (object) to the end of this list.
void add(int index, E element)
Inserts the specified element (object) at the specified position in this list.
boolean contains(Object o)
Returns true if this list contains the specified element (object)
E get(int index)
Returns the element (object) at the specified position in this list.
int indexOf(Object o)
Returns the index of the first occurrence of the specified element (object) in this list, or -1
if this list does not contain the element.
boolean isEmpty()
Returns true if this list contains no elements (objects).
E remove(int index)
Removes the element (object) at the specified position in this list.
boolean remove(Object o)
Removes the first occurrence of the specified element (object) from this list, if it is present.
E set(int index, E element)
Replaces the element at the specified position in this list with the specified element
(object).
int size()
Returns the number of elements (objects) in this list.

JP Segado 8

Vous aimerez peut-être aussi