N7 2TR
PROGRAMMATION AVANCÉE
Examen 1
07/01/2013 (SExamen 1)
Examen (avec documents)
NOM : Prénom : Signature :
Remarques préliminaires.
Les documents distribués en cours sont autorisés.
Les exercices sont indépendants.
Lire complètement le sujet avant de commencer à le traiter.
En cas d’ambiguïté dans le sujet, préciser sur la copie le choix fait.
Barème indicatif :
exercice 1 2 3 4
point(s) 3 4 7 6
Exercice 1 : Grammaire ambiguë
Considérons la grammaire suivante :
G=
1. E E+E
2. E ET
3. E T
4. T TT
5. T id
1.1 Montrer que cette grammaire est ambiguë en utilisant la phrase suivante : x+y+z.
1.2 Modifier la grammaire pour respecter la règle d’associativité usuelle sur l’addition.
Exercice 2 : XML
Considérons le code Java du listing 1.
2.1 Donner le document XML qui sera affiché sur la sortie standard par le programme précédent
(listing 1).
2.2 Donner la signature de la méthode setAttribute utilisée.
2.3 Proposer une DTD pour le document XML sachant qu’un point a nécessairement une abs-
cisse et une ordonnée mais peut également avoir une couleur (information optionnelle).
Exercice 3 : Indexeur d’attributs
L’objectif est d’écrire une classe Java IndexeurAttributs qui permet d’indexer tous les attributs
déclarés dans les classes passées en argument de la ligne de commande et leurs superclasses. Les
contraintes suivantes doivent être respectées.
1. Pour chaque attribut, on listera le nom de toutes les classes qui le déclarent.
Examen 1 1/4
PROGRAMMATION AVANCÉE Examen (avec documents)
Listing 1 – La classe Main
1import org.jdom2.*;
2
3class Main {
4static Element getPoint(String name, int x, int y) {
5Element point = new Element("point");
6point.setAttribute("x", x).setAttribute("y", y);
7point.addContent(name);
8return point;
9}
10 public static void main(String[] args) {
11 Element racine = new Element("polygone");
12 racine.addContent(getPoint("O", 1, 0));
13 racine.addContent(getPoint("N", 0, 1));
14 racine.addContent(getPoint("E", -1, 0));
15 racine.addContent(getPoint("S", 0, -1));
16 Document doc = new Document(racine);
17 JDOMTools.ecrire(doc, System.out);
18 }
19 }
2. Les attributs seront affichés dans l’ordre alphabétique.
3. Pour un attribut donné, les classes sont affichées dans l’ordre alphabétique.
4. Si une classe n’existe pas (ClassNotFoundException), un message l’indiquera sur le ter-
minal mais le traitement continuera.
5. Pour des raisons d’efficacité, on évitera de traiter à nouveau une classe déjà traitée.
Le listing 2 présente l’affichage produit pour la commande :
java IndexeurAttributs String java.util.ArrayList java.util.LinkedList
3.1 Pour chaque contrainte précédente indiquer, de manière très concise, comment la prendre
en compte.
3.2 Écrire la classe IndexeurAttributs.
Exercice 4 : Interface utilisateur d’une application de discussion instantanée (chat)
La figure 1 présente l’interface souhaitée pour une application de discussion instantanée (chat).
Trois utilisateurs Lui, Toi et Moi discutent : l’utilisateur saisit un message dans la partie inférieure
de sa fenêtre et clique sur OK pour l’envoyer à tous les utilisateurs connectés.
4.1 Compléter la classe ChatSwing (listing 3) qui correspond à l’aspect graphique de la figure 1.
4.2 Rendre actif le bouton Fermer.
4.3 Expliquer ce qu’est le patron MVC et en particulier les variantes dites modèle passif et
modèle actif.
4.4 Expliquer comment faire pour rendre actif le bouton OK.
Examen 1 2/4
PROGRAMMATION AVANCÉE Examen (avec documents)
Listing 2 – Exemple de résultat affiché par l’indexeur (java 1.7.0_10)
Classe non trouvée : String
CASE_INSENSITIVE_ORDER
java.lang.String
HASHING_SEED
java.lang.String
MAX_ARRAY_SIZE
java.util.AbstractCollection
java.util.ArrayList
elementData
java.util.ArrayList
first
java.util.LinkedList
hash
java.lang.String
hash32
java.lang.String
last
java.util.LinkedList
modCount
java.util.AbstractList
serialPersistentFields
java.lang.String
serialVersionUID
java.lang.String
java.util.ArrayList
java.util.LinkedList
size
java.util.ArrayList
java.util.LinkedList
value
java.lang.String
FIGURE 1 – L’interface utilisateur pour accéder au chat
Examen 1 3/4
PROGRAMMATION AVANCÉE Examen (avec documents)
Listing 3 – La classe ChatSwing
import javax.swing.*;
import java.awt.*;
public class ChatSwing extends JFrame {
private JTextArea messages = new JTextArea(15, 20);
private JLabel pseudo = new JLabel();
private JTextField texte = new JTextField(20);
private JButton bFermer = new JButton("Fermer");
private JButton bOK = new JButton("OK");
public ChatSwing(String pseudo) {
super("Chat de " + pseudo);
this.pseudo.setText(pseudo);
Container c = this.getContentPane();
this.pack();
this.setVisible(true);
}
}
Examen 1 4/4
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !