M1 GI – EC726 (Programmation avancée) Durée : 2 heures

publicité
M1 GI – EC726
Numéro d’étudiant : .......................
M1 GI – EC726 (Programmation avancée)
Durée : 2 heures
7 janvier 2016
Remarques :
— Les supports et les notes de cours sont autorisés,
— Les calculatrices et téléphones portables sont interdits,
— Le barème est fourni à titre indicatif,
— L’énoncé comporte 1 feuille recto-verso.
— Cette feuille d’énoncé doit être rendue avec la copie.
1
Questionnaire à choix multiples (6 points)
Une réponse juste vaut 1/2 point. Pour certaines questions, plusieurs choix peuvent être valides.
1. Pour compiler une classe nommée MaClasse, la ligne de commande associée sera :
2 javac MaClasse.java
2 javac MaClasse.class
2 java MaClasse.class
2 java MaClasse
2. Pour exécuter une classe nommée MaClasse, la ligne de commande associée sera :
2 javac MaClasse.java
2 javac MaClasse.class
2 java MaClasse.class
2 java MaClasse
3. Dans la signature d’une méthode d’une classe, quel mot clé permet de spécifier que cette dernière
est susceptible de lever une exception ?
2 try
2 catch
2 throws
2 throw
4. Soit une classe MaClasse dont un des attributs est nommé monAttribut. Soit une classe MaSousClasse qui hérite de MaClasse. Pour que monAttribut soit accessible directement par MaSousClasse
sans accesseur, quel doit être le mot-clé à associer à monAttribut ?
2 public
2 private
2 protected
2 rien
Les questions suivantes se référeront à l’extrait de programme suivant :
public class MaFenetre extends JFrame implements ActionListener { ... }
5. MaFenetre est :
2 Une classe
2 Une interface
2 Un objet
2 Un constructeur
6. JFrame est :
2 Une classe
2 Une interface
2 Un objet
2 Un constructeur
7. ActionListener est :
2 Une classe
2 Une interface
2 Un objet
2 Un constructeur
8. Le fichier dans lequel se trouve cet extrait de programme est nommé :
2 Peu importe
2 mafenetre.java
2 MaFenetre.java
1
2 MaFenetre.class
9. JFrame hérite de :
2 MaFenetre
2 JFrame
2 ActionListener
2 Object
10. MaFenetre hérite de :
2 MaFenetre
2 JFrame
2 ActionListener
2 Object
Soit la classe Math faisant partie de l’API Java. Cette classe possède une méthode pow, qui calcule le
nombre ab dont la signature est la suivante : public static double pow(double a,double b)
11. Quel est le type de la valeur retournée par la méthode pow ?
2 public
2 static
2 double
2 pow
12. Nous souhaitons exploiter cette méthode dans un de nos programmes pour calculer 210 . Quelles
sont les utilisations correctes de pow ?
2 double res = pow(2,10);
2 double res = Math.pow(2,10);
2 a=2; b=10; double res = double pow(double a, double b);
2 a=2; b=10; double res = double Math.pow(double a, double b);
2
Questions de synthèse (4 points)
1. Quel est, en programmation orientée objet, le rôle d’un constructeur. Quel est son lien avec
les objets d’une part et les classes d’autre part ?
2. Quels sont, selon vous, les avantages à utiliser l’héritage en programmation orientée objet ?
3
3.1
Exercices (10 points)
Compréhension de programme (5 points)
Nous considérons le code source présenté dans le listing 1 page suivante. Après avoir tenté de compiler une première fois ce programme, nous obtenons le message suivant :
ExitApp.java:6: error: ExitButton is not abstract and does not override abstract
method actionPerformed(ActionEvent) in ActionListener
class ExitButton extends JButton implements ActionListener {
ˆ
1 error
Questions
1. Que signifie l’erreur du compilateur ? A quelle ligne est elle survenue ?
2. Indiquer les modifications à réaliser sur le programme pour que ce dernier compile.
3. Tracer le diagramme de classes associé à ce programme. En particulier, on fera apparaı̂tre les
classes JFrame, JButton, ActionListener, ExitButton, ExitApp. Les deux dernières classes de
la liste devront apparaı̂tre sous forme de classes documentées, contrairement aux 3 premières
classes qui seront non documentées.
4. Selon vous, que fait ce programme ?
2
1
import
import
import
import
6
c l a s s E x i t B u t t o n e x t e n d s J B u t t o n implements
ActionListener {
public ExitButton ( ) {
super ( ) ;
s e t T e x t ( "Emergency Exit" ) ;
addActionListener ( this ) ;
}
11
j a v a x . swing . J B u t t o n ;
j a v a x . s w i n g . JFrame ;
j a v a . awt . e v e n t . A c t i o n E v e n t ;
j a v a . awt . e v e n t . A c t i o n L i s t e n e r ;
public void actionDone ( ActionEvent e ) {
System . e x i t ( 0 ) ;
}
16 }
p u b l i c c l a s s ExitApp {
s t a t i c p u b l i c v o i d main ( S t r i n g [ ] a r g s ) {
J B u t t o n e x i t = new E x i t B u t t o n ( ) ;
21
JFrame f r a m e = new JFrame ( ) ;
f r a m e . add ( e x i t ) ;
frame . s e t S i z e (200 ,100) ;
frame . s e t V i s i b l e ( true ) ;
}
26 }
Listing 1 – La classe ExitApp
3.2
Conception de classe (5 points)
Nous souhaitons créer une classe représentant des nombres complexes. Ces derniers ont deux parties :
une partie réelle et une partie imaginaire et sont notés sous la forme c = a + ib où a est la partie réelle
et b la partie imaginaire. Vous pourrez, au choix, compléter le listing 2 page suivante ou l’écrire le
programme résultant sur votre copie.
Questions
1. Quels sont les attributs nécessaires au fonctionnement de votre classe ? Avec quels types les
déclarerez vous ? Compléter la partie A avec les instructions pour déclarer vos attributs.
2. Nous souhaitons disposer de deux constructeurs différents afin de pouvoir initialiser nos objets
représentant des nombres complexes. Le premier, sans paramètre, affecte une valeur nulle aux
parties réelle et imaginaire. Le second prend deux paramètres permettant de donner des valeurs
aux parties réelle et imaginaire. Écrire ces deux constructeurs (partie B du listing).
3. Écrire une méthode appelée display permettant d’afficher le nombre complexe sous la forme
a + ib (partie C du listing).
4. Écrire deux méthodes de calcul sur les nombres complexes. La première méthode, nommé
add prendra en paramètre un nombre complexe, l’additionnera à l’objet possédant la méthode
et retournera en résultat un nombre complexe. La deuxième méthode, nommé mult prendra en
paramètre un nombre complexe, le multipliera à l’objet possédant la méthode et retournera en
résultat un nombre complexe.
3
Rappel : Soient C = a + ib et L = m + in deux nombres complexes, leur somme sera : S =
C + L = (a + m) + i(b + n) et leur produit sera : P = C × L = (am − bn) + i(bm + an).
p u b l i c c l a s s ComplexNumber {
/ /−−−−−− P a r t i e A : d é c l a r a t i o n d e s a t t r i b u t s −−−−−−//
4
/ /−−−−−− P a r t i e B : d é c l a r a t i o n d e s c o n s t r u c t e u r s −−−−−−//
9
14
19
/ /−−−−−− P a r t i e C : a f f i c h a g e d ’ un nombre c o m p l e x e −−−−−−//
24
/ /−−−−−− P a r t i e D : f o n c t i o n s de c a l c u l −−−−−−//
29
34
39
44
}
Listing 2 – La classe ComplexNumber
4
Téléchargement