Développement Logiciel



Documents pareils
Flux de données Lecture/Ecriture Fichiers

Auto-évaluation Programmation en Java

Interfaces graphiques avec l API Swing

Java RMI. Arnaud Labourel Courriel: Université de Provence. 8 mars 2011

Programmer en JAVA. par Tama

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Programmation Objet Java Correction

Desktop Intégration. Rémi Forax

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Remote Method Invocation Les classes implémentant Serializable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Synchro et Threads Java TM

Java 7 Les fondamentaux du langage Java

TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Un ordonnanceur stupide

INITIATION AU LANGAGE JAVA

Exclusion Mutuelle. Arnaud Labourel Courriel : arnaud.labourel@lif.univ-mrs.fr. Université de Provence. 9 février 2011

Calcul Parallèle. Cours 5 - JAVA RMI

[APPLICATON REPARTIE DE VENTE AUX ENCHERES]

Introduction : les processus. Introduction : les threads. Plan

Entrées / Sorties. Entrées / Sorties. Entrées/Sorties. System.out. Fonctionnement par flots (stream) Karima Boudaoud IUT- R&T. Terrain connu.

Développement mobile MIDP 2.0 Mobile 3D Graphics API (M3G) JSR 184. Frédéric BERTIN

Dis papa, c est quoi un bus logiciel réparti?

as Architecture des Systèmes d Information

Gestion distribuée (par sockets) de banque en Java

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

TP1 : Initiation à Java et Eclipse

Langage Java. Classe de première SI

Utilisation d objets : String et ArrayList

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Package Java.util Classe générique

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Info0604 Programmation multi-threadée. Cours 5. Programmation multi-threadée en Java

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Introduction au langage Java

TD/TP PAC - Programmation n 3

Création d un service web avec NetBeans 5.5 et SJAS 9

Programmation Par Objets

Threads. Threads. USTL routier 1

Environnements de développement (intégrés)

Une introduction à Java

Certificat Big Data - Master MAthématiques

Design patterns. Design patterns - définition. Design patterns - avantages

Projet de programmation (IK3) : TP n 1 Correction

Web Tier : déploiement de servlets

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Une introduction à la technologie EJB (2/3)

J2SE Threads, 1ère partie Principe Cycle de vie Création Synchronisation

LOG4430 : Architecture logicielle et conception avancée

Programmation Objet 2

Objets et Programmation. origine des langages orientés-objet

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Corrigé des exercices sur les références

Apprendre Java en 154 minutes

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

PROGRAMMATION PAR OBJETS

Cours 2 : programmation des interfaces graphiques

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Architecture Orientée Service, JSON et API REST

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Chapitre 10. Les interfaces Comparable et Comparator 1

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

INF 321 : mémento de la syntaxe de Java

Projet gestion d'objets dupliqués

4. Groupement d objets

Problèmes liés à la concurrence

TD/TP PAC - Programmation n 3

Applet pour visualiser les variables «automate» notifiées

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

ACTIVITÉ DE PROGRAMMATION

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Présentation. Au programme. Fonctionnement. A l issue de ce module vous devriez...

OpenPaaS Le réseau social d'entreprise

Programmation avec des objets : Cours 7. Menu du jour

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

1 Définition d une classe en Java

TD2 Programmation concurrentielle

TD3: tableaux avancées, première classe et chaînes

Plan du cours. Historique du langage Nouveautés de Java 7

Introduction à la programmation concurrente

Chapitre V. Les classes : Object, Vector, etc.

Remote Method Invocation (RMI)

Premiers Pas en Programmation Objet : les Classes et les Objets

Programmation Orientée Objet

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Arbres binaires de recherche

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Java Licence Professionnelle CISII,

Java Licence Professionnelle CISII,

Programmation Internet en Java

Langage à objets : JAVA (1)

Modèle à composants. Daniel Hagimont. IRIT/ENSEEIHT 2 rue Charles Camichel - BP TOULOUSE CEDEX 7. Remerciements

RMI le langage Java XII-1 JMF

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Transcription:

Développement Logiciel Éxamen session 1-2012-2013 (Vendedi 25 mai, 9h-11h) Seuls les documents liés directement au cours sont autorisés (comme dit sur le site) : sujets de TD, notes de cours, notes personnelles manuscrites, version imprimée du cours, livres. En cas de doute, donnez la réponse qui vous semble la plus vraisemblable (et justifiez au besoin). Ce sujet contient 7 pages. N oubliez pas de numéroter vos feuilles, de reporter vos noms/prénoms et d anonymiser vos copies. Partie 1 : Questions de cours (7pts, 1 pt par question) On vous demande des réponses courtes et précises (2 à 3 lignes max). MÉTHODES DE PROGRAMMATION Etudiez le code source présenté en annexe I Q1 : Quel est le nom complet de la classe? Q2 : Donnez la visibilité des champs de la classe dans les quatre cas suivants : accès depuis l extérieur, depuis une sous-classe, depuis le même package, depuis la classe elle-même. ENTRÉES-SORTIES Q3 : Pourquoi utilise-t-on un flux de données Buffered (BufferedReader ou Writer)? Q4 : Quelle est la différence entre l interface Serializable et Externalizable? INTERFACE GRAPHIQUE Q5. Comment se comporte l image quand on redimensionne la fenêtre en annexe I? Q6. Une fenêtre peut-elle être considérée comme un thread? Justifiez votre réponse. Q7. Qu est qu un ActionListener? 1

Partie 2 : Sérialisation (3pts) La classe SerializationDemo (annexe II) est sérialisable. Q1 : Complétez les fonctions writeobject et readobject. Q2 : La méthode main(... ) teste la sérialisation et la dé-sérialisation des 2 copies d un objet, et vérifie qu ils ont les mêmes valeurs dans leur champs. Cependant, en l état, une erreur (assertion) est retournée. Quelle erreur a été commise par le développeur? Q3 : Proposez une solution (en code) pour résoudre le problème (vous pouvez introduire des méthodes). Partie 3 : Threads (4pts) Le code présenté en annexe III simule une ligne d assemblage dans une usine de production automobile. L équipage Carrosserie (un thread) assemble la carrosserie de la voiture, et place la voiture dans une unité de stockage avec une capacité de 50 voitures (ArrayList). Le thread Carrosserie peut produire 1 voiture toutes les 30-60 minutes. L équipage Moteur (un autre thread) a un travail plus facile : il peut retirer une voiture de l unité de stockage (s il y en a une), ajouter le moteur en 30 minutes et la mettre sur une autre chaîne d assemblage (qui mettra par exemple les roues, la peinture, etc.). Si l unité de stockage (ArrayList) est vide, l équipe Moteur doit attendre que l équipe Carrosserie produise une voiture et l ajoute dans l unité de stockage. Si l unité de stockage est pleine (c.à.d. qu elle contient 50 voitures) l équipe Carrosserie doit arrêter sa production jusqu au moment où l équipe Moteur aura retiré une voiture pour s en occuper. La simulation tourne jusqu à ce que 500 voitures sont produites et traitées. Q1 : Si on exécute ce code, rien ne se passe. Pourquoi? Modifiez le code pour que la simulation puisse commencer. Q2 : La modification apportée à la question précédente ne suffit pas, car on ne teste pas si l unité de stockage a de la place pour accueillir une voiture, ni si elle contient une voiture qui peut être prise. Modifiez le code pour assurer que les opérations de traitement de l unité de stockage (prendre() et mettre()) fonctionnent correctement. Q3 : Comment s assurer que les ressources (unité de stockage) soient correctement partagées en utilisant le mot-clef synchronized et la méthode Thread.sleep(long time) dans le code? Q4 : Où mettre les méthodes object.wait() et object.notify() pour réduire le temps d attente pour mettre/prendre une voiture? Donnez le code nécessaire. 2

Partie 4 : Swing (2pts) Lisez le code du programme donné en annexe IV. Q1 : Dessinez le rendu graphique de ce programme. Q2 : Que permet de faire ce programme? Partie 5 : Architecture et Programmation (4 pts) Cet exercice concerne la simulation d un zoo et plus particulièrement l organisation des classes qui expriment les différents animaux s y trouvant. Voici une description du fonctionnement de ce petit zoo : 1. Le zoo a plusieurs types d animaux : oiseaux (ex. pingouin, aigle), reptiles (ex. crocodile, tortue), et mammifères (ex. lion, loutre). À chaque animal est associé un nom scientifique, leur sexe, leur age, leur nom et pays d origine (tous ces attributs sont des chaînes de caractères). Á chaque animal est aussi associé un nombre d actions possibles (il s agit d un entier). 2. Les animaux ont des actions communes (manger, dormir), et des actions spécifiques à leur espèce (voler pour l aigle, nager pour le pingouin, crocodile ou la loutre, marcher pour le pingouin, crocodile, lion, la tortue ou la loutre). Les actions prennent comme paramètre la durée de l action t en secondes. Q1 : Décrivez l architecture que vous utiliseriez pour exprimer les classes des animaux pingouin, aigle, crocodile, tortue, lion et loutre. Utilisez au minimum une classe abstraite, une interface et un héritage. Nous vous noterons sur la qualité de l architecture. Q2 : Si vous ne l avez pas déjà fait, décrivez les méthodes et les champs que vous voyez dans la description avec leur visibilité (private, public, etc.). N implémentez pas les méthodes, donnez seulement leur nom, visibilité et paramètres. Q3 : Chaque animal est un thread qui tourne indéfiniment. Lorsque le thread tourne, celui-ci fait prendre à l animal une action aléatoire parmi ses actions possibles, pour une durée aléatoire (vous pouvez utiliser la fonction Random.nextInt(Integer n) pour récupérer un nombre aléatoire). Implémentez la méthode run() qui définit ce comportement aléatoire. Q4 : Nous souhaitons désormais construire la simulation. Créez une classe Zoo qui contient l ensemble des animaux. Dans la fonction main() (se trouvant dans cette classe), créez 2 animaux de chaque classe d animaux (c.à.d. 2 pingouins, 2 aigles, etc) et commencez leur vie dans le zoo (n oubliez pas de démarrer les threads). FIN DU SUJET 3

Annexe I 1 package imagetests ; 3 import java. awt.*; import javax.*; 5 7 public class myimageresize extends JPanel { BufferedImage image ; 9 double ratio ; 11 public myimageresize ( BufferedImage image ) { this. image = image ; 13 ratio = image. getheight () / image. getwidth (); 15 protected void paintcomponent ( Graphics g) { 17 g. drawimage ( image, 0, 0, getwidth (), ( int ) ( getwidth () * ratio ), 0, 0, image. getwidth (), image. getheight (), this ); 19 21 public static void main ( String [] args ) throws IOException { BufferedImage image = ImageIO. read ( new File (" image. png " )); 23 myimageresize mydemo = new myimageresize ( image ); 25 JFrame f = new JFrame (); f. setdefaultcloseoperation ( JFrame. EXIT_ON_CLOSE ); 27 f. add ( new JScrollPane ( mydemo )); f. setsize (400, 400); 29 f. setvisible ( true ); 31 Annexe II 1 import java.io.*; import java. util. Vector ; 3 5 public class SerializationDemo implements Serializable { int a; 7 char c; Vector < Double > v; 9 public SerializationDemo ( int a, char c, double [] elements ) { 11 this.a = a; this.c = c; 13 this.v = new Vector < Double >( elements. length ); for ( double ev : elements ) { 15 v. add ( new Double (ev )); 17 4

19 private void writeobject ( ObjectOutputStream out ) throws IOException { // PARTIE A COMPLETER 21 23 private void readobject ( ObjectInputStream in) throws IOException, ClassNotFoundException { 25 // PARTIE A COMPLETER 27 public static void main ( String [] args ) { 29 SerializationDemo test = new SerializationDemo (10, a, new double [] { 5,.16, 7.3, 44.33 ); 31 SerializationDemo test1 = null ; SerializationDemo test2 = null ; 33 try { 35 ObjectOutputStream out1 = new ObjectOutputStream ( new FileOutputStream (" monfichier1. sav " )); 37 out1. writeobject ( test ); out1. close (); 39 ObjectOutputStream out2 = new ObjectOutputStream ( new FileOutputStream (" monfichier2. sav " )); 41 out2. writeobject ( test ); out2. close (); 43 catch ( File NotF ounde xcep tion e) { e. printstacktrace (); 45 catch ( IOException e) { e. printstacktrace (); 47 49 try { ObjectInputStream in1 = new ObjectInputStream ( new FileInputStream ( 51 " monfichier1. sav " )); test1 = ( SerializationDemo ) ( in1. readobject ()); 53 in1. close (); ObjectInputStream in2 = new ObjectInputStream ( new FileInputStream ( 55 " monfichier2. sav " )); test2 = ( SerializationDemo ) ( in1. readobject ()); 57 in1. close (); catch ( File NotF ounde xcep tion e) { 59 e. printstacktrace (); catch ( IOException e) { 61 e. printstacktrace (); catch ( ClassNotFoundException e) { 63 e. printstacktrace (); 65 67 assert ( test1!= test2 ) : " Probleme avec la serialization!"; 5

Annexe III public class Assemblage { 2 ArrayList < Integer > stockage = new ArrayList < Integer >(); public int i = 0; 4 public Integer prendre () { 6 Integer voiture = stockage. remove ( stockage. size () - 1); System. out. println (" Prendre voiture " + i); 8 return i; 10 public void mettre () { 12 System. out. println (" Mettre voiture " + i); ++i; 14 stockage. add (i); 16 public static void main ( String [] args ) { 18 Assemblage myassemblage = new Assemblage (); Carrosserie c = new Carrosserie ( myassemblage ); 20 Moteur m = new Moteur ( myassemblage ); 22 24 class Carrosserie extends Thread { private Assemblage myassemblage ; 26 public Carrosserie ( Assemblage myassemblage ) { 28 this. myassemblage = myassemblage ; 30 public void run () { 32 while ( myassemblage. i < 500) { myassemblage. mettre (); 34 try { Thread. sleep (1800 + random. nextint (1800)); 36 catch ( InterruptedException e) { 38 40 class Moteur extends Thread { 42 private Assemblage myassemblage ; 44 public Moteur ( Assemblage myassemblage ) { this. myassemblage = myassemblage ; 46 48 public void run () { Random random = new Random (); 50 6

while ( myassemblage. i <= 500) { 52 Integer voiture = myassemblage. prendre (); try { 54 Thread. sleep (1800); catch ( InterruptedException e) { 56 58 Annexe IV import java. awt.*; 2 import java. awt. event.*; import javax. swing.*; 4 6 public class ProgressBarDemo extends JFrame { private static final long serialversionuid = 1 L; 8 int count = 0; JProgressBar jbar = new JProgressBar (); 10 GridLayout layout = new GridLayout (2, 1); JButton btnaction = new JButton (" Go!"); 12 public ProgressBarDemo () { 14 settitle (" Count and Go"); 16 Container contentpane = getcontentpane (); contentpane. setlayout ( layout ); 18 contentpane. add ( jbar ); contentpane. add ( btnaction ); 20 jbar. setminimum (0); 22 jbar. setmaximum (10); 24 btnaction. addactionlistener ( new ActionListener () { public void actionperformed ( ActionEvent e) { 26 count ++; jbar. setvalue ( count ); 28 if ( count == 10) System. exit ( -1); 30 ); 32 pack (); setvisible ( true ); 34 36 public static void main ( String [] args ) { new ProgressBarDemo (); 38 FIN DES ANNEXES 7