NFP121
Programmation avancée Session Avril 2013 - durée : 3 heures
Tous documents papiers autorisés
Exercice 1 :
(9 points)Dans cet exercice, vous allez proposer une solution logicielle en Java pour la création d'un traducteur anglais/français. La solution doit lire le contenu d'un fichier texte «traduction.fr»
contenant des mots en français (resp. «traduction.en» en anglais), les traduire, et finalement les enregistrer dans un fichier «traduction.en» (resp. «traduction.fr»).
1) Identifiez et implémentez la structure de données adéquate pour contenir la correspondance entre les mots français/anglais. Argumentez votre choix.
2) Restructurez votre solution pour que ça puisse lancer en parallèle deux traducteurs : un pour la traduction français --> anglais, et un autre pour la traduction anglais --> français.
Le premier traducteur enregistre à la volée le résultat de sa traduction dans un fichier. A chaque fois qu'un mot est traduit par le premier, le deuxième traducteur ira le chercher dans ce fichier et fera la traduction inverse, en sauvegardant le résultat dans un autre fichier. On effectuera des pauses d'un temps aléatoire pour simuler le temps de recherche de la traduction.
3) Mettez en place une interface graphique pour votre traducteur. Cette interface permettra de saisir le mot que l'on voudrait traduire, sélectionner le mode de traduction (français -->
anglais ou bien anglais --> français), et de lancer la traduction et afficher le résultat dans l'interface. Prenez soin de l'ergonomie de votre interface.
4) Comment gérer les cas où un mot possède plus qu'une traduction possible ? Mettez en œuvre cette solution.
5) Comment voyez-vous l'évolution de votre solution vers un traducteur en plusieurs langues (anglais, français, espagnol par exemple) ?
Exercice 2 :
(11 points)Dans cet exercice, vous allez proposer une solution logicielle en Java pour la gestion d'une bibliothèque universitaire. Cette bibliothèque gère des œuvres numériques (livre sous format pdf, DVD,...) et papier (revue, livre papier...). La bibliothèque est gérée par deux personnes qui pourraient traiter par exemple deux demandes en même temps. Les deux personnes possèdent le même login/password pour accéder à une base de données contenant l'ensemble des œuvres. Cette base contiendra pour chaque œuvre son identifiant unique, sa nature (numérique/papier), son auteur, sa date d'achat, son endroit de rangement (numéro de rangée par exemple), sa disponibilité (disponible ou prêtée), ainsi que la personne qui l'a empruntée (si l’œuvre n'est pas disponible en bibliothèque).
1) Proposez votre conception objet pour un tel problème. Quels modèles de conception pourrait-on mettre en œuvre ici. Justifiez votre réponse.
2) Rappeler par un schéma le principe du modèle de conception MVC. Quels sont les avantages de ce modèle.
3) Quelle structure de données proposez-vous pour gérer un ensemble d’œuvres dans votre programme ? Argumentez votre choix et mettez en œuvre cette structure.
4) Mettez en place la base de données et implémentez ce qu'il faut pour pouvoir établir la connexion depuis votre programme Java. Interrogez là pour afficher toutes les œuvres disponibles à un instant donné, ainsi que toutes les œuvres empruntées par un personne xxx à préciser de façon dynamique.
5) Mettez en place la gestion parallèle des œuvres par les deux responsables de la bibliothèque.
6) Proposez une interface graphique pour communiquer avec l'utilisateur de votre application. Votre solution doit contenir deux fenêtres :
- une fenêtre principale qui permet de saisir les informations sur l’œuvre recherchée et effectuer la recherche, ajouter une œuvre récemment achetée par la bibliothèque...
- une deuxième fenêtre qui affiche toutes les œuvres disponibles à un moment donné. Il faut prévoir un bouton de rafraîchissement pour actualiser la liste disponible.
7) Est-il possible d'automatiser l'actualisation de la liste des œuvres disponibles ? Si oui, comment ?