Vous êtes sur la page 1sur 4

Informatique pour l’embarqué 1ère session - Groupe 1 26 janvier 2017

Nom : ZAOUI Prénom : Mohammed Amine

Les documents et supports du cours sont autorisés. La durée de l’épreuve est de 2h. Sur les marges
gauches de chaque question figure le nombre de points que la bonne réponse rapporte. Le nombre
total de points est de 100.

1. Classe Person et ses dérivées : Soit le diagramme de classes de la figure 1.


(5) (a) Le code suivant est-il correct ? Justifier votre réponse. PersonInt p1 = new PersonInt();

le code n'est pas correcte car on peux pas creer un objet dans un classe interface car il y en pas de constructeur
dedans.

(5) (b) La classe Person contient un certain nombre de méthodes dont toutes les méthodes déclarées
dans PersonInt. Pourquoi ? Justifier votre réponse.

On a une relation d'utilisation entre la la classe Person et PersonInt , et puisque on a un nombre de methodes
dans la classe Personne qui sont deja declarés dans la classe PersonInt don on a un polymorphisme de type
redifinition qui sert à conserver la déclaration de la méthode parent (type et nombre de paramètres, la valeur de
retour et les exceptions propagées doivent être identiques).

(5) (c) L’interface PersonInt contient un certain nombre de méthodes dont getFirstName().
Donner un example d’implémentation pour cette fonction.

Public String getFirstname();

(5) (d) Le code suivant est-il correct ? Justifier votre réponse. Person ins3 = new Professor();

le code suivant n'est pas correct, car de un la classe person ne peut pas acceder à la classe Professor,
et puis on peut pas creer un nouveau un objet avec la structure du code au dessus , pour declarer un objet :
type objet reference d'objet = new typeobjet();

(5) (e) La méthode getInfo() est présente dans toutes les classes. A votre avis pourquoi ? Donner
un exemple d’implémentation de cette méthode dans toutes les classes présentées. La
méthode renvoie une chaîne de caractères décrivant les spécificités de la classe l’appelant.

M1-I2E2I 2016/17 1/4 Slaviša Jovanović


Informatique pour l’embarqué 1ère session - Groupe 1 26 janvier 2017

la methode getInfo() est presente dans tout les classes afin d'afficher toutes leurs methodes .

exemple d'implementation :

public String getInfo() {


return "UniversityPerson[identification:"+identification+",university:"+university+",departement:"+departement+"
,firstName:"+getFirstName()+",name:"+getName()+",age:"+getAge()+"]";
}

Figure 1 – Classe Person et ses dérivées


/25
2. Application graphique : connexion à une base de donnée d’entretien de véhicules
Database via une GUI
Soit une base de données d’entretien de véhicules utilisée dans un garage auto décrite par la
classe Database. Cette base de donnée est accessible de l’extérieur via un certain nombre de
méthodes. L’objectif est de concevoir une interface graphique permettant de se connecter à cette
base de donnée, de vérifier l’identité de conducteur, d’effectuer le contrôle technique d’un certain
nombre de points et d’établir le prix de l’intervention en fonction du temps d’intervention. Le
code de la base de donnée Database et ses éléments sont disponibles sur ARCHE.
(10) (a) Ajouter à ce projet une classe GuiControl qui hérite de la classe JFrame et qui possède
comme attribut un objet de type Database (la classe fournie et disponible sur ARCHE).
La fenêtre GuiControl doit contenir les éléments graphiques comme présenté figure 2.
Les éléments nommés Nom, Prénom et Date de révision sont de type JTextField ; Etat,
Dernière révision, Temps et Prix sont de type JLabel ; les boutons Trouver, Start et
Terminer sont de type JButton ; deux listes déroulantes brand et type de type JComboBox :

M1-I2E2I 2016/17 2/4 Slaviša Jovanović


Informatique pour l’embarqué 1ère session - Groupe 1 26 janvier 2017

Figure 2 – L’interface graphique à réaliser

la liste brand doit contenir les choix suivants : "", "Peugeot", "BMW", "Renault", "Mercedes"
tandis que la liste type doit contenir les choix "", "308", "508", "320", "520", "Megane",
"Captur", "C200" et "E200" ; les cases à cocher Freins,. . ., Equipment sont de type
JCheckBox. Vérifier la présence de tous les objets graphiques ajoutés dans l’interface
graphique créée en instanciant la classe GuiControl dans la méthode main() de la classe
TestGuiControl. Utiliser soit l’approche manuelle soit le plug-in WindowBuilder de l’outil
Eclipse.
(5) (b) Rajouter à la classe GuiControl les attributs suivants : db de type Database et wtl de
type WatchTimerLabel (la classe également fournie dans exam.zip). Créer ces attributs
dans le constructeur de la classe GuiControl en respectant le type de donnée à passer en
argument. Le constructeur de la classe Database exige un argument de type GuiControl :
passer la classe GuiControl en argument. Le constructeur de la classe WatchTimerLabel
exige un argument de type JLabel : passer la référence de l’étiquette nommée "Temps" en
argument.
(5) (c) Nommer les références vers les objets graphiques de la façon suivante : la liste déroulante
contenant les marques de voiture comme brand ; la liste déroulante contenant les types de
voiture comme type ; l’étitiquette "Etat" comme state ; l’étiquette "Dernière révision"
comme lastDate ; le champ "Date de révision" comme today. Un manquement de rigeur
à ce niveau ne permettra pas de vérifier le bon fonctionnement de l’interface graphique.
(10) (d) Associer l’action suivante au bouton Trouver : lors de l’appui sur ce bouton, la méthode
int find(String n, String fn) de la classe GuiControl est appelée. Les arguments
à passer sont respectivement les chaînes de caractère écrites dans les champs "Nom" et
"Prénom". Pour récupérer ces chaînes de caractère, utiliser la méthode getText() de la
classe JTextField. Dans ces champs, chaque étudiant doit renseigner son nom et prénom
commençant par une majuscule (le reste étant en minuscule). La méthode find renvoie
comme résultat un entier non null si l’identification a réussi, sinon la valeur zéro. Lors
de l’appui sur le bouton Trouver, si tout écrit précédemment a été respecté, pour un
utilisateur renseigné dans les champs "Nom" et "Prénom", les données de marque, de
type, d’état et de la date de dernière révision devraient être mises à jour depuis la base de
donnée Database.
(10) (e) Associer l’action suivante au bouton Start : lors de l’appui sur ce bouton, l’horloge
WatchTimerLabel doit être démarrée en appelant sa fonction restartTimer(). De plus,

M1-I2E2I 2016/17 3/4 Slaviša Jovanović


Informatique pour l’embarqué 1ère session - Groupe 1 26 janvier 2017

l’appui sur ce bouton écrit sur l’étiquette "Prix" la chaîne de caractère "Prix : ". Pour ce
faire, utiliser la fonction void setText(String str) de la classe JLabel.
(10) (f) Associer l’action suivante au bouton Terminer : lors de l’appui sur ce bouton, l’horloge
WatchTimerLabel doit être arrêtée en appelant sa fonction stopTimer() seulement si
toutes les cases à cocher (de "Freins" à "Equipement") sont cochées. Pour vérifier si une case
à cocher est cochée, utiliser la méthode boolean isSelected() de la classe JCheckBox. De
plus, l’appui sur ce bouton appelle la méthode String price(String str) de la classe
Database, qui convertit le temps écoulé lors de précédentes opérations en prix à payer.
La chaine de caractère à passer en argument de cette fonction doit être la valeur affichée
dans l’étiquette "Temps". Pour ce faire utiliser la fonction String getText() de la classe
JLabel. De plus, la méthode String price(String str) de la classe Database renvoie
une chaine de caractère qui doit être affichée sur l’étiquette "Prix" en utilisant la fonction
setText(String str) de la classe JLabel.
(5) (g) Modifier le constructeur de la classe GuiControl de la façon suivante : toutes les cases
à cocher créées dans le constructeur doivent être désactivées par défaut. Une case est
considérée comme désactivée si on ne peut plus la cocher. Pour ce faire, utiliser la méthode
void setEnabled(boolean b) de la classe JCheckBox. De plus, le bouton Start doit
également être désactivé au démarrage de l’application à l’aide de la même fonction void
setEnabled(boolean b).
(5) (h) Modifier l’action associée au bouton Trouver de la façon suivante : chaque appui sur ce
bouton active le bouton Start si la personne est correctement identifiée. Pour ce faire,
analyser la valeur entière renvoyée par la fonction int find(String n, String fn) : 0 -
personne non identifiée, 6= 0 personne identifiée.
(5) (i) Modifier l’action associée au bouton Start de la façon suivante : chaque appui sur ce bouton
active toutes les cases à cocher. Pour ce faire, utiliser la fonction void setEnabled(boolean
b) de la classe JCheckBox. De plus, l’appui sur ce bouton décoche toutes les cases. Pour
ce faire, utiliser la fonction void setSelected(boolean b) de la classe JCheckBox.
(10) (j) Modifier l’action associée au bouton Terminer de la façon suivante : chaque appui sur
ce bouton désactive toutes les cases à cocher. Pour ce faire, utiliser la fonction void
setEnabled(boolean b) de la classe JCheckBox. De plus, l’appui sur ce bouton appelle
également la fonction void setDate(String str) de la classe Database à laquelle il faut
passer en argument la valeur de la date saisie dans le champ de texte "Date de révision".
Pour récupérer la chaîne de caractère saisie dans l’étiquette "Date de révision", utiliser la
fonction String getText() de la classe JLabel.
/75
Question Points Score
1 25
2 75
Total: 100

M1-I2E2I 2016/17 4/4 Slaviša Jovanović

Vous aimerez peut-être aussi