Exemple de questions en Programmation

Documents pareils
RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Chapitre 10. Les interfaces Comparable et Comparator 1

Vers l'orchestration de grilles de PC par les mécanismes de publicationsouscription

Projet de programmation (IK3) : TP n 1 Correction

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

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

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

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Une introduction à Java

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

Programmation par les Objets en Java

Langage Java. Classe de première SI

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

TP1 : Initiation à Java et Eclipse

PROJET : ETNIC ESB JANUS. Guide technique : WS-Notification - Clustering. BULL Services et Solutions

Introduction au langage de programmation Java

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

Android Publish/Subscribe, GCM, Google Cloud Messaging : une introduction

TP, première séquence d exercices.

Tp 1 correction. Structures de données (IF2)

ACTIVITÉ DE PROGRAMMATION

TP1 : Initiation à Java et Eclipse

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

Chapitre I Notions de base et outils de travail

Utiliser Java sans BlueJ

TD/TP PAC - Programmation n 3

4. Groupement d objets

Utilisation d objets : String et ArrayList

RMI le langage Java XII-1 JMF

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

IRL : Simulation distribuée pour les systèmes embarqués

OpenPaaS Le réseau social d'entreprise

Université de Bangui. Modélisons en UML

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

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

Composants Logiciels. Le modèle de composant de CORBA. Plan

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Chapitre VI- La validation de la composition.

Programmation Orientée Objet

Ingénérie logicielle dirigée par les modèles

Architecture Orientée Service, JSON et API REST

Présentation - Tableau de bord du CA Carrefour informationnel et documentaire des Laurentides

Chapitre 2. Classes et objets

Comment ouvrir un compte et accéder à la télédéclaration? Rendez-vous sur le site :

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Programme Compte bancaire (code)

Projet Active Object

Description de la formation

Contrôler plusieurs ordinateurs avec un clavier et une souris

JADE : Java Agent DEvelopment framework. Laboratoire IBISC & Départ. GEII Université & IUT d Evry nadia.abchiche@ibisc.univ-evry.

Comment utiliser la feuille de style «CMLF2010.dot»

Exercices sur les interfaces

Package Java.util Classe générique

Programmation en Java IUT GEII (MC-II1) 1

Les chaînes de caractères

Mode d'emploi de la newsletter

BUREAU VIRTUEL. Utilisation de l application sur ipad. Guide utilisateur. Sciences Po Utilisation du bureau virtuel sur ipad 1 / 6

Auto-évaluation Programmation en Java

Cursus Sage ERP X3 Outils & Développement. Le parcours pédagogique Sage ERP X3 Outils et Développement

Corrigés des premiers exercices sur les classes

Diagramme de classes

TP1. Outils Java Eléments de correction

Capture, Filtrage et Analyse de trames ETHERNET avec le logiciel Wireshark. Etape 1 : Lancement des machines virtuelles VMWARE et de Wireshark

Guide de l Administrateur

1. Introduction Création d'une requête...2

openarchitectureware & transformation de modèle Yannick Lizzi Architecte Logiciel itemis France Mail: lizzi@itemis.de

Version 7.1_5.1. Release Notes

Plateforme IoT flexible et configurable:

Guide de recherche documentaire à l usage des doctorants. Partie 1 : Exploiter les bases de données académiques

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Classeur de suivi de l auditeur. Architecture et Ingénierie des Systèmes et des Logiciels

NSY102. Conception de logiciels Intranet Introduction

SimpleOCR, un logiciel gratuit de reconnaissance de caractères

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

Programmation Objet I

Poker. A rendre pour le 25 avril

Guide de démarrage rapide. (pour la version 5.0.)

Landesk Service Desk

Contro ler plusieurs ordinateurs avec un clavier et une souris

Java Licence Professionnelle CISII,

TD2/TME2 : Ordonnanceur et Threads (POSIX et fair)

Guide de l Utilisateur

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

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Document de spécification du logiciel VALPO Définition du format des fichiers des

Android et le Cloud Computing

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Java c est quoi? Java pourquoi?

Programmation Par Objets

Bibliothèque PARTAGER ET STOCKER ATELIER DES FICHIERS

Expression des contraintes. OCL : Object C o n t r a i n t L a n g u a g e

Filtrage stochastique non linéaire par la théorie de représentation des martingales

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Aide à l utilisation

Remote Method Invocation en Java (RMI)

1. Cliquez sur dans le coin supérieur gauche de l'écran 2. Sélectionnez la Langue de l'interface désirée 3. Cliquez sur

Chapitre I : le langage UML et le processus unifié

Transcription:

Les seuls documents autorisés sont ceux distribués en cours et en TP, et mis à disposition sur le site Web du module, ainsi que vos notes personnelles. Notes en préambule : les questions qui suivent constituent un entraînement sur la partie «programmation» pour le contrôle final de la deuxième session du module CSC4102. Elles sont extraites d un ancien sujet. Dans le cadre du module CSC4102, pour couvrir l ensemble du programme, nous y ajouterions une question sur les «idiomes JAVA» (par exemple sur les méthodes equals et hashcode) ; la durée estimée pour répondre à toutes les questions qui suivent est 1h30 ; un barème est donné à titre indicatif ; soyez concis et précis, et justifiez vos réponses par des commentaires appropriés ; soyez rigoureux dans la syntaxe JAVA ; veillez à rendre une copie propre et lisible, avec une marge à gauche.

1 Sujet Étude de cas. Le système dont le diagramme de classes est présenté dans la figure 1 permet de communiquer en échangeant des événements de manière asynchrone : les producteurs et les consommateurs d événements n ont pas besoin de se connaître. Un événement est modélisé dans la classe Publication contenant un message, c est-à-dire une chaîne de caractères. Un consommateur désirant recevoir de l information, c est-à-dire des publications, construit un filtre et l enregistre (avec la méthode subscribe) auprès du courtier (la classe Broker). Un producteur désirant publier de l information construit une publication et appelle la méthode publish du courtier. Comme spécifié dans la figure 2, lors de l appel à la méthode publish, le courtier parcourt toutes les souscriptions et appelle la méthode consume de tous les consommateurs pour lesquels la publication «passe» le filtre : la méthode evaluate retourne true. Pour votre curiosité, c est le patron de conception «Publier/Souscrire» (en anglais, «Publish/Subscribe») qui est mis en œuvre. C est pour cela que le nom du paquetage dans le diagramme de classes est appelé pubsub. Les filtres sont soit des filtres simples (les classes FilterStringEndsWith, FilterStringEquals, FilterStringStartsWith), soit des filtres composites. Comme l indiquent le nom des classes des filtres simples ainsi que le type de l attribut message de la classe Publication, tous les filtres simples fonctionnent sur des chaînes de caractères. Comme spécifié dans la figure 2, la méthode evaluate du filtre récupère le message de la publication, puis, selon le type de filtre, applique la méthode endswith ou la méthode equals ou encore la méthode startswith. Un filtre composite (classe CompositeFilter) est composé de filtres et la méthode evaluate du filtre composite opère un ET logique sur les résultats des appels aux méthodes evaluate des filtres. Pour votre curiosité, nous mettons ici en œuvre le patron de conception «Composite». Explications sur la conception Voici quelques éléments supplémentaires : toutes les classes font partie du paquetage pubsub ; classe Broker : «souscrire» (méthode subscribe) consiste à créer une souscription et à l ajouter dans la collection en vérifiant qu elle ne l est pas déjà ; classe CompositeFilter : un filtre composite est une conjonction de filtres : dans l exemple de la figure 3, l évaluation du filtre f5 retourne true si et seulement si les filtres f3 et f4 retournent tous les deux true ; classe Consumer : deux objets de cette classe sont égaux (méthode equals) si et seulement si leurs noms sont égaux ; classe ConsumerDisplay : la méthode consume affiche la publication tel que montré dans l affichage de la figure 4 ; classe FilterStringEquals : la méthode evaluate utilise la méthode equals de la classe String pour comparer la chaîne de caractères du filtre avec le message de la publication ; classe Subscription : deux objets de cette classe sont égaux (méthode equals) si et seulement s ils ont les mêmes consommateurs et les mêmes filtres. Télécom SudParis Denis Conan Février 2017 CSC4102 2

2 Questions Les questions suivantes permettent de réaliser le système. Jusqu à la question 7 incluse, vous devez ignorer les cas d erreur, excepté ceux traités explicitement dans le diagramme de communications de la figure 2. Conseil : pensez à étudier le code de la méthode main dans la figure 3 pour connaître les prototypes des méthodes non montrés dans le diagramme de classes de la figure 1 : par exemple pour les constructeurs. Question 1 [2 pts] : écrivez tout le code de la classe Publication. Question 2 [2,5 pts] : écrivez le code de la classe Consumer, excepté les méthodes hashcode et equals. Question 3 [1,5 pts] : écrivez tout le code de la classe ConsumerDisplay. L affichage à l écran utilise la méthode tostring de la classe Publication. Question 4 [2,5 pts] : écrivez le code de la classe Subscription, excepté les méthodes hashcode et equals. Question 5 [3,5 pts] : écrivez tout le code de la classe Broker en évitant qu il y ait deux souscriptions identiques dans la collection. Question 6 [2 pts] : écrivez le code de la classe CompositeFilter. Question 7 [2 pts] : écrivez le code de la classe FilterStringEquals. Question 8 [2 pts] : réécrivez la méthode subscribe de la classe Broker pour qu elle lève l exception IllegalArgumentException lorsqu il existe déjà une souscription pour ce consommateur et ce filtre. L exception IllegalArgumentException est déjà disponible dans les classes de base de Java. Question 9 [2 pts] : écrivez la classe TestSubscribe qui contient un test écrit avec JUnit qui teste la levée d exception de la question précédente. Faites en sorte d avoir trois méthodes pour l initialisation, le test et le nettoyage. Télécom SudParis Denis Conan Février 2017 CSC4102 3

pubsub Broker +subscribe (Consumer c, Filter f):void +publish(publication p):void * Subscription +publish (Publication p):void +hashcode():int +equals(object o):boolean // getters et tostring * name: String <<abstract>> Consumer +<<abstract>> consume(publication p):void +hashcode():int +equals(object o):boolean // getters et tostring ConsumerDisplay +consume(publication p):void <<interface>> Filter CompositeFilter FilterStringEndsWith FilterStringEquals FilterStringStartsWith substring: String string: String substring: String Publication message: String +Publication(String message) +getmessage():string +tostring():string Figure 1 Diagramme de classes Télécom SudParis Denis Conan Février 2017 CSC4102 4

Main 1. publish(p) 1.1. *[i=1..subscriptions.size()]s=getsubscription():subscription broker:broker 1.2.i publish(p) Dans ce diagramme, f est un filtre simple. Pour un filtre composite, voir les indifcations dans l énoncé. 1.2.i.1. e=evaluate(p):boolean s:subscription 1.2.i.2 consume(p)[e=true] f:filter :Consumer 1.2.i.1.1 m=getmessage():string[p!=null] p:publication Figure 2 Diagramme de communications de la publication avec un filtre simple. Télécom SudParis Denis Conan Février 2017 CSC4102 5

1 import java. u t i l. L i s t ; 2 import java. u t i l. Vector ; 3 import pubsub. Broker ; 4 import pubsub. CompositeFilter ; 5 import pubsub. ConsumerDisplay ; 6 import pubsub. F i l t e r ; 7 import pubsub. FilterStringEndsWith ; 8 import pubsub. F i l t e r S t r i n g E q u a l s ; 9 import pubsub. F i l t e r S t r i n g S t a r t s W i t h ; 10 import pubsub. P u b l i c a t i o n ; 11 12 p u b l i c c l a s s Main { 13 p u b l i c s t a t i c void main ( f i n a l S t r i n g [ ] args ) { 14 ConsumerDisplay c1 = new ConsumerDisplay ( " c1 " ) ; 15 ConsumerDisplay c2 = new ConsumerDisplay ( " c2 " ) ; 16 ConsumerDisplay c3 = new ConsumerDisplay ( " c3 " ) ; 17 ConsumerDisplay c4 = new ConsumerDisplay ( " c4 " ) ; 18 Broker broker = new Broker ( ) ; 19 F i l t e r f 1 = new F i l t e r S t r i n g E q u a l s ( " h e l l o " ) ; 20 broker. s u b s c r i b e ( c1, f 1 ) ; 21 F i l t e r f 2 = new F i l t e r S t r i n g S t a r t s W i t h ( " h e l l o " ) ; 22 broker. s u b s c r i b e ( c2, f 2 ) ; 23 List <F i l t e r > f s 1 = new Vector<F i l t e r >(); 24 F i l t e r f 3 = new F i l t e r S t r i n g S t a r t s W i t h ( " h e l l o " ) ; 25 f s 1. add ( f 3 ) ; 26 F i l t e r f 4 = new FilterStringEndsWith ( " world " ) ; 27 f s 1. add ( f 4 ) ; 28 F i l t e r f 5 = new CompositeFilter ( f s 1 ) ; 29 broker. s u b s c r i b e ( c3, f 5 ) ; 30 List <F i l t e r > f s 2 = new Vector<F i l t e r >(); 31 f s 2. add ( new F i l t e r S t r i n g S t a r t s W i t h ( " h e l l o " ) ) ; 32 f s 2. add ( new FilterStringEndsWith ( " word " ) ) ; 33 F i l t e r f 6 = new CompositeFilter ( f s 2 ) ; 34 broker. s u b s c r i b e ( c4, f 6 ) ; 35 broker. p u b l i s h (new P u b l i c a t i o n ( " h e l l o world " ) ) ; 36 } 37 } Figure 3 Exemple de méthode main utilisant le système. c2 is notified: Publication [message=hello world] c3 is notified: Publication [message=hello world] Figure 4 Affichage correspondant à l exemple : le consommateur c1 n est pas notifié car «!"hello".equals("hello world")» et le consommateur c4 n est pas notifié car «!"hello world".endswith("word")». Télécom SudParis Denis Conan Février 2017 CSC4102 6