y +1/1/60+ y
Algorithmique et Programmation Objet
Examen
0 0
Durée 1H30
1 1
Document autorisé: feuille A4 manuscrite recto-verso.
2 2
3 3 Ne rien inscrire ici (réservé au numéro de copie).
4 4
5 5 Numéro de salle : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6 6 Numéro de copie : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 7
8 8
9 9
Cet examen est divisé en 2 parties (auxquelles vous devrier accorder à peu près le même temps):
• des questions de cours
• un exercice de conception et d’algorithmique
Toutes les réponses doivent être données sur le sujet et toutes les pages du sujet sont à rendre, même
vides. insérée dans une copie double anonymisée. Vous pouvez dégraffer le sujet et répondre aux questions dans
l’ordre que vous souhaitez (attention, parfois, 2 à 3 questions portent sur le même code).
Les questions de cours contiennent:
• des questions ouvertes
• des questions à choix multiples
Dans les questions ouvertes, la place laissée pour la réponse donne une indication sur la longueur (à ne pas dépasser)
de la réponse attendue.
Dans le questionnaire à choix multiples, il vous est proposé plusieurs réponses. Une réponse possible pour une
question est:
• soit une proposition (par exemple "vrai" ou "bleu").
• soit une assertion sur les propositions ("aucune n’est vraie", "toutes sont vraies", etc.) Les assertions sur les
propositions seront en italique.
Pour chaque question à choix multiples, il existe une et une seule bonne réponse ; il s’agit soit d’une proposition,
soit d’une assertion sur les propositions.
Attention, les assertions sur les propositions, par exemple Toutes les propositions sont justes ne concernent que les
propositions, les autres assertions (du type Aucune des propositions n’est juste) ne sont pas concernées (sinon, ça n’a
pas de sens...).
Des points négatifs seront affectés en cas de réponse fausse ; une non-réponse, quant à elle, n’entraine ni
point positif, ni point négatif.
y y
y +1/2/59+ y
Questions de cours [10pts]
Question 1 [1pt] Qu’est-ce que le principe de troation ? A B C D E Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
Dans les 3 questions qui suivent, on considère la méthode suivante:
1 public void testAB ( boolean a , boolean b ) {
2 if ( a ){
3 System . out . println ( " A � est � vrai " );
4 } else if ( a && b ){
5 System . out . println ( " A � et � B � sont � vrais " );
6 } else {
7 if (! b ) {
8 System . out . println ( " B � est � faux " );
9 } else {
10 System . out . println ( " else " ) ;
11 }
12 }
13 }
Question 2 [0.5pt] Si l’on appelle testAB(true, false), alors la méthode affiche:
A est vrai B est faux A est vrai
A et B sont vrais else B est faux
Question 3 [0.5pt] Dans quel(s) cas, la méthode testAB, affiche-t-elle else ?
lorsque a est vrai et b est vrai Aucune des propositions n’est correcte.
lorsque a est vrai et b est faux 2 des 4 propositions sont correctes.
lorsque a est faux et b est vrai 3 des 4 propositions sont correctes.
lorsque a est faux et b est faux toutes les propositions sont correctes.
Question 4 [0.5pt] Dans quel(s) cas, la méthode testAB, affiche-t-elle A et B sont vrais ?
lorsque a est vrai et b est vrai Aucune des propositions n’est correcte.
lorsque a est vrai et b est faux 2 des 4 propositions sont correctes.
lorsque a est faux et b est vrai 3 des 4 propositions sont correctes.
lorsque a est faux et b est faux toutes les propositions sont correctes.
Question 5 [0.5pt] En Java, dans une classe déclarée public, une méthode déclarée protected
ne peut pas utiliser les attributs private de la classe ne peut pas être void
courante On ne peut pas déclarer une méthode protected
dans une classe public.
ne peut pas être appelée par une méthode d’une
classe qui n’appartient pas à la même hiérarche ni 2 des 3 propositions sont correctes.
au même package toutes les propositions sont correctes.
y y
y +1/3/58+ y
Question 6 [1pt] Qu’est-ce qu’un objet immuable ?
Comment créer en pratique un objet immuable ? A B C D E Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
Dans les 2 questions suivantes, on considère le code suivant:
1 // f i c h i e r A . java | // f i c h i e r B . java
2 public class A { | public class B extends A {
3 private int a ; | public String description () {
4 public A ( int a ) { | return " Je � suis � un � B " ;
5 this . a = a ; | }
6 } | }
7 public String description () { |
8 return " Je � suis � un � A " ; |
9 } |
10 } |
Question 7 [1pt] Ce code ne compile pas. Pourquoi ? A B C D E Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
y y
y +1/4/57+ y
Question 8 [0.5pt] Après correction des erreurs de la classe précédente, on peut dire
qu’un objet de type A est aussi dee type B Aucune des propositions n’est juste
qu’un objet de type B est aussi de type A Toutes les propositions sont justes
Dans les 2 questions suivantes, on considère les classes A, B et Test suivantes:
1 public class A { 1 public class B extends A {
2 protected String nom ; 2 protected double pourcentage ;
3 protected int valeur ; 3 public B ( String nom , int valeur ,
4 public A ( String nom , int valeur ) { 4 double pourcentage ) {
5 this . nom = nom ; 5 super ( nom , valeur );
6 this . valeur = valeur ; 6 this . pourcentage = pourcentage ;
7 } 7 }
8 public void methode () { 8 public void methode () {
9 System . out . print ( " A : � [ " + nom + 9 System . out . print ( " B : � [ " );
10 " ,� " + valeur + " ] " ); 10 super . methode ();
11 } 11 System . out . println ( " ,� " +
12 } 12 pourcentage + " % � ] " );
13 }
1 public class Test { 14 protected double getPourcentage () {
2 public static void main ( String [] args ) { 15 return pourcentage ;
3 A a = new A ( " Alphonse " , 3); 16 }
17
4 B b = new B ( " Basile " , 5 , 0.8);
18
5 A c = new B ( " Charlie " , 10 , 0.3);
19
6 a . methode ();
20
7 b . methode ();
21
8 c . methode ();
9 } 22 }
10 }
y y
y +1/5/56+ y
Question 9 [2pt] Dessinez le diagramme APO de ce qui se passe dans la mémoire jusquà la fin de la ligne 5 du
programme de test.
A B C D E Réservé au correcteur
Question 10 [0.5pt] Qu’affiche ce programme (aux retours à la ligne près) ?
A: [Alphonse, 3] A: [Alphonse, 3]
B: [0.8%] B: [0.8%]
A: [Charlie, 10] B: [0.3%]
A: [Alphonse, 3] A: [Alphonse, 3]
B: [A: [Basile, 5], 0.8%] B: [A: [Basile, 5], 0.8%]
A: [Charlie, 10] B: [A: [Charlie, 10], 0.3%]
y y
y +1/6/55+ y
Question 11 [1pt] Qu’est-ce que le transtypage ?
Donner un exemple avec des types Références (par exemple avec Node et Element en Dom...)
A B C D E Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
Question 12 [1pt] En Java, dans quel cas utilisera-t-on l’implémentation d’une interface, plutôt que l’héritage
d’une classe (abstraite ou non) ? En résumer, quelle est la différence de principe entre l’héritage et
l’utilisation d’interface ? Pourquoi à votre avis n’a-t-on pas besoin d’héritage multiple en Java ?
A B C D E Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
y y
y +1/7/54+ y
Exercice: Programme télévisuel [10pts]
Vous devez développer pour une chaîne de télévision, un logiciel permettant de gérer la programmation journalière
d’émissions télévissuelles. De manière générale, une émission a un nom, une heure de début (un entier entre 0 et 23)
et une durée (un entier entre 1 et 10). Il existe 3 types d’émmission:
• les divertissements dont on connait, en plus du nom, de l’heure de début et de la durée, le nom de l’animateur.
Un divertissement dure forcément 2 heures.
• les fictions qui sont dess émission qui ont de plus un réalisateur et une donnée qui permet de savoir s’il s’agit ou
non d’une rediffusion
• les reportages qui sont des émissions à thème. Un thème est forcément l’un de ceux imposés par la chaîne:
information, animalier ou culturel.
Chaque classe possédera des accesseurs pour chacun des attributs, mais les modificateurs ne seront présents que si
nécessaires. En effet:
• on ne pourra pas modifier, le nom, ni la durée d’une émission dès lors qu’elle aura été créée.
• on pourra modifier l’heure de début d’une émission dans le respect du principe d’encapsulation.
• on ne pourra pas modifier l’animateur d’un divertissement, le réalisateur d’une fiction ni le thème d’un reportage
après création
• par défaut, une fiction n’est pas une rediffusion. Un modificateur sans paramètre permettra d’indiquer à une
fiction qu’elle est une rediffusion. Les Fictions ont également une méthode + egal(f: Fiction): boolean
qui reenvoie vrai si la fiction passée en paramètreee a le même nom et le même réalisateur.
Enfin, une classe Programme gérera les 15 émissions d’une journée. Elle contiendra donc un tableau d’Emission.
Dans cette classe , il y aura un tableau d’émissions (ne pas utiliser de structures dynamique) ainsi que 3 méthodes:
• + Programme(prog: Emission[])
• + verifieSuperposition(): boolean qui vérifie que les programmes ne se surperposent pas : elle renvoie
vrai si 2 programmes se chevauchent, c’est-à-dire si l’heure de début ou de fin d’un programme se trouve entre
l’heure de début et l’heure de fin d’un autre programme.
• + setRediffusion(): void qui parcourt le tableau prog et lorsqu’elle trouve une fiction en double, demande
à cette fiction de modifier son statut de rediffusion. Ici, on suppose qu’il y a unnee instance de Fiction par
diffusion (2 références du tableau prog ne peuvent pas référencer la même instance). On comparera 2 fictions à
l’aide de la méthode + egal(f: Fiction): boolean. La première diffusion d’une fiction trouvée en double
gardera son attribut rediffusion à la valeur courante, on mettra l’attribut rediffusion des instances suivantes
à true quelques soient leurs valeurs courantes.
y y
y +1/8/53+ y
Question 13 [5pts] Dessiner le diagramme UML de classes du programme télé. Pour chaque classe,
vous devrez bien préciser les paramètres de chaque méthode, notamment des constructeurs.
A B C D E Réservé au correcteur
y y
y +1/9/52+ y
Question 14 [5pts] Ecrire la classe Programme. A B C D E F Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
y y
............................................................................................................
y +1/10/51+ y
Réservé au correcteur
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
............................................................................................................
y y