Vous êtes sur la page 1sur 5

USDB1, Département d'informatique L2 Date : Janvier 2017

Corrigé de l'examen de POO

Exercice 1 : (3 points)
1- Que se passe t-il si une classe A implémente deux interfaces I1 et I2 possédant la même méthode
void f(int n); et une même constante N?
La classe A doit implémenter la méthode void f(int n) une seule fois. L'accès à la constante N doit
être préfixé par le nom de l'interface si on veut accéder a N de I1 on ecrit I1.N sinon I2.N . 0.5*2
2- Dans quel cas peut-on écrire le code suivant : A a = new B() ;
2.1- si A est une classe abstraite, et B sous classe de A ?
2.2- si A est une interface, implémentée par la classe B ?
oui pour les deux 0.25*2
3- Que signifie this en Java ? De quel type est il ?
This référence l’instance courante, Il a le type de la classe dans laquelle il est utilisé. 0.25*2
4- Quel est l'avantage d'une ArrayList par rapport à un tableau ?
Une ArrayList a une taille dynamique alors que la taille d’un tableau est déterminée définitivement
lors de la construction. 1 point
Exercice 2 : (3 points) Qu'affiche le programme suivant ?

pour les valeurs suivantes de args : 3 3.5 1 pour les valeurs suivantes de args : 5 2 -5
0.25*5 0.25*7
a = 1.0 a = 1.0
mA(3) = 4.0 mA(5) = 6.0
a = 1.0 a = 1.0
mD(3) = 13.0 c = 3
a = 1.0 mC(5) = 34.0
a = 1.0
c = 3

Remarque importante pour les exercices 3 et 4 : Ceci est un corrigé type. Cette solution n'est pas
unique.
Exercice 3 : (7,5 points)
1. Nous supposerons que Personnel, Enseignant et Chercheur sont trois classes concrètes, donner le
diagramme de classe (sans les attributs et les méthodes) en précisant les relations entre les classes.
0.75 point
Personnel

Enseignant

Chercheur

1
2. Implémenter les différentes classes (Personnel 0.75, Enseignant 0.75 et Chercheur 0.75) en ajoutant
dans chaque classe un constructeur permettant d'initialiser les attributs 0.5*3, la méthode afficher
0.25*3.
3. public class Personnel implements Comparable (0.25 point pour implements Comparable)
{
private String nom,prenom;
private long numeroSS;
private int anneeNaissance,annéeRecrutement ;
public Personnel(String nom, String prenom, long numeroSS, int anneeNaissance,
int annéeRecrutement) {
this.nom = nom;
this.prenom = prenom;
this.numeroSS = numeroSS;
this.anneeNaissance = anneeNaissance;
this.annéeRecrutement = annéeRecrutement;
}
public void afficher(){
System.out.println(nom+ " "+ prenom+ " "+ numeroSS+" "+ anneeNaissance+ " " +
annéeRecrutement );
}
4. public int compareTo(Object O){ //0.75 point
Personnel P=(Personnel)O;
if (nom.compareTo(P.nom)== 0)
return (prenom.compareTo(prenom));
return nom.compareTo(P.nom);
}
}
import java.util.ArrayList;
public class Enseignant extends Personnel {
private String specialite, grade;
private ArrayList <String> matiereEnseigne;
public Enseignant(String nom, String prenom, long numeroSS,
int anneeNaissance, int annéeRecrutement, String specialite,
String grade, ArrayList<String> matiereEnseigne) {
super(nom, prenom, numeroSS, anneeNaissance, annéeRecrutement);
this.specialite = specialite;
this.grade = grade;
this.matiereEnseigne = matiereEnseigne;
}
public void afficher(){
super.afficher();
System.out.println("\n "+specialite+ " "+ grade+ " "+
matiereEnseigne.toString() );
}

}
import java.util.ArrayList;
public class Chercheur extends Enseignant{
private String domaineDeRecherches;
private ArrayList <String> ListeDePublications;
public Chercheur(String nom, String prenom, long numeroSS,
int anneeNaissance, int annéeRecrutement, String specialite,
String grade, ArrayList<String> matiereEnseigne,
String domaineDeRecherches, ArrayList <String> ListeDePublications) {
super(nom, prenom, numeroSS, anneeNaissance, annéeRecrutement,
specialite, grade, matiereEnseigne);
this.domaineDeRecherches = domaineDeRecherches;
this.ListeDePublications = ListeDePublications;
}
public void afficher(){
super.afficher();

2
System.out.println("\n "+ domaineDeRecherches+ " "+
ListeDePublications.toString());
}

}
6. La classe programme principal : 1.25 points
import java.util.*;
public class Main {

public static void main(String[] args) {


Personnel T[]; int i,c;boolean stop=true;
String nom, prenom,specialite, grade, matiere, domaineDeRecherches;
long numeroSS;
int anneeNaissance, annéeRecrutement,nombrePublications;
ArrayList <String> matiereEnseigne=new ArrayList <String>();
ArrayList <String> ListeDePublications=new ArrayList <String>();
Scanner sc=new Scanner(System.in);
System.out.println("donner la taille du tableau");
int n=sc.nextInt();
T=new Personnel[n];
for(i=0;i<n;i++){
do{
System.out.println("donner un entier");
c=sc.nextInt();
System.out.println("donner le nom");
nom=sc.next();
System.out.println("donner le prenom");
prenom=sc.next();
System.out.println("donner le numeroSS");
numeroSS=sc.nextLong();
System.out.println("donner anneeNaissance");
anneeNaissance=sc.nextInt();
System.out.println("donner annéeRecrutement");
annéeRecrutement=sc.nextInt();
switch (c){
case 0:
T[i]=new
Personnel(nom,prenom,numeroSS,anneeNaissance,annéeRecrutement);
stop=true;
break;
case 1:
System.out.println("donner specialite");
specialite=sc.next();
System.out.println("donner grade");
grade=sc.next();
T[i]=new
Enseignant(nom,prenom,numeroSS,anneeNaissance,annéeRecrutement,specialite,
grade,matiereEnseigne);
stop=true;
break;
case 2:
System.out.println("donner specialite");
specialite=sc.next();
System.out.println("donner grade");
3
grade=sc.next();
System.out.println("donner domaineDeRecherches");
domaineDeRecherches=sc.next();
System.out.println("donner nombrePublications");
nombrePublications=sc.nextInt();
T[i]=new
Chercheur(nom,prenom,numeroSS,anneeNaissance,annéeRecrutement,specialite,
grade,matiereEnseigne,domaineDeRecherches, ListeDePublications);
stop=true;
break;
default:stop=false;
}

}while(!stop);
}
Arrays.sort(T);
for(i=0;i<n;i++) T[i].afficher();

}
Exercice 4 : (6,5 points)
1. Modifier la classe Pile pour que l'opération de dépilement provoque une exception personnalisé
PileVideException si la pile est vide.
public class PileVideException extends Exception { 0.5}
import java.util.LinkedList;
public class Pile {
protected LinkedList Q= new LinkedList();

public Object depiler() throws PileVideException 0.25{


if (Q.isEmpty()) throw new PileVideException() 0.5;
return Q.removeLast();}
public void empiler(Object x){
Q.add(x);}}
2. A partir de la classe Pile, donner l’implémentation d’une classe PileCumul :
import java.util.LinkedList;
public class PileCumul extends Pile 0.5{

public void empiler(Object x){ 2.75 points


try{
if (x instanceof Integer)
{
Object y= depiler();
if (y instanceof Integer)
{
super.empiler((Integer)x + (Integer)y);
}
else super.empiler(y); super.empiler(x);
}
else
{
if (x instanceof Double)
{
Object y = depiler();
if (y instanceof Double)
{
4
super.empiler((Double)y + (Double)x);
}
else super.empiler(y);super.empiler(x);
}
else
{
if (x instanceof String)
{
Object y =depiler();
if (y instanceof String)
{
super.empiler((String)y + (String)x);
}
else super.empiler(y); super.empiler(x);
}

}
}

}
catch (PileVideException e) {
super.empiler(x);
}
}
}
3. Le programme principal 2 points
import java.util.Scanner;
public class Exo4 {

public static void main(String[] args) {


Scanner sc= new Scanner(System.in);
PileCumul P=new PileCumul();
int n,i,c; Double X; Integer N; String S; boolean stop=true;
n=sc.nextInt();
for(i=0;i<n;i++){
do {
c=sc.nextInt();
switch (c){
case 0: N=sc.nextInt();
P.empiler(N); stop=true;
break;
case 1: X=sc.nextDouble();
P.empiler(X); stop=true;
break;
case 2: S=sc.next();
P.empiler(S);stop=true;
break;
default:stop=false;
}
}while(!stop);
}

}}

Vous aimerez peut-être aussi