Les exercices sont totalement indépendants et l ordre dans lequel ils apparaissent ne préjuge pas de leur difficulté réelle ou supposée.

Documents pareils
Chapitre 10. Les interfaces Comparable et Comparator 1

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

RMI le langage Java XII-1 JMF

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

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

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

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

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

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

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

Chapitre VI- La validation de la composition.

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Cours Bases de données 2ème année IUT

Formulaire de candidature pour les bourses de mobilité internationale niveau Master/ Application Form for International Master Scholarship Program

Génie Logiciel avec Ada. 4 février 2013

ACTIVITÉ DE PROGRAMMATION

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Corrigé des exercices sur les références

Programmation Par Objets

TD/TP PAC - Programmation n 3

Recherche dans un tableau

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

Threads. Threads. USTL routier 1

Programmer en JAVA. par Tama

Package Java.util Classe générique

TP1 : Initiation à Java et Eclipse

M1 : Ingénierie du Logiciel

Cours de Programmation 2

as Architecture des Systèmes d Information

Programmation par les Objets en Java

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig

4. Groupement d objets

Projet de programmation (IK3) : TP n 1 Correction

UML Diagramme de communication (communication diagram) Emmanuel Pichon 2013

PHOTO ROYAUME DE BELGIQUE /KINDOM OF BELGIUM /KONINKRIJK BELGIE. Données personnelles / personal data

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

I. Programmation I. 1 Ecrire un programme en Scilab traduisant l organigramme montré ci-après (on pourra utiliser les annexes):

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)

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

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

Once the installation is complete, you can delete the temporary Zip files..

Vous incarnez un surdoué en informatique qui utilise son ordinateur afin de pirater des comptes bancaires un peu partout dans le monde et s en mettre

Ensimag 1ère année Algorithmique 1 Examen 2ième session 24 juin Algorithmique 1

Calcul Parallèle. Cours 5 - JAVA RMI

Développement Logiciel

Paginer les données côté serveur, mettre en cache côté client

Remote Method Invocation Les classes implémentant Serializable

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

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

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

OpenPaaS Le réseau social d'entreprise

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

Exercices sur les interfaces

équipement radio Procédure

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

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

Instructions pour mettre à jour un HFFv2 v1.x.yy v2.0.00

Application web de gestion de comptes en banques

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

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

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

Projet Active Object

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Corrigés des premiers exercices sur les classes

Remote Method Invocation en Java (RMI)

Une introduction à Java


Efficient Object Versioning for Object- Oriented Languages From Model to Language Integration

Programmation avec des objets : Cours 7. Menu du jour

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

TESTS D HYPOTHÈSE FONDÉS SUR LE χ².

EXERCICES UML. Modéliser cette situation par un diagramme de cas d utilisation. Consulter planning

AMENDMENT TO BILL 32 AMENDEMENT AU PROJET DE LOI 32

Plan. Department of Informatics

Java Licence Professionnelle CISII,

Arbres binaires de recherche

Auto-évaluation Programmation en Java

DOCUMENTATION MODULE BLOCKCATEGORIESCUSTOM Module crée par Prestacrea - Version : 2.0

OUTIL DE TRAVAIL COLLABORATIF

Université de XY University of XY. Faculté XY Faculty of XY

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

Évaluation de la mise en oeuvre des recommandations issues des audits effectués à l Université Nationale du Bénin par la Banque mondiale et l UNESCO

Guide d installation de SugarCRM Open Source version 4.5.1

.NET - Classe de Log

Encryptions, compression et partitionnement des données

TD/TP PAC - Programmation n 3

Remote Method Invocation (RMI)

INSCRIPTION MASTER / MASTER S APPLICATION

Optimisation Discrète

F-7a-v3 1 / Bourses de mobilité / Mobility Fellowships Formulaire de demande de bourse / Fellowship Application Form

Cours 1: Java et les objets

Les Triggers SQL. Didier DONSEZ. Université de Valenciennes Institut des Sciences et Techniques de Valenciennes

SCHOLARSHIP ANSTO FRENCH EMBASSY (SAFE) PROGRAM APPLICATION FORM

Surveillance de Scripts LUA et de réception d EVENT. avec LoriotPro Extended & Broadcast Edition

POLICY: FREE MILK PROGRAM CODE: CS-4

Transcription:

Université Lille1 Licence mention Informatique Semestre 4 UE Programmation Orientée Objet Examen première session 27 mai 2011 3 heures - notes et polycopiés de cours/td/tp autorisés livres, calculatrices et appareils de communication interdits dictionnaires de langue autorisés pour candidats étrangers Les exercices sont totalement indépendants et l ordre dans lequel ils apparaissent ne préjuge pas de leur difficulté réelle ou supposée. Exercice 1 : Un monde de blocs (Sauf indication contraire, les types de cet exercice appartiendront au paquetage blocs.) Nous considérons dans cet exercice un environnement constitué de blocs avec lesquels il est possible de construire des empilements. Les blocs sont définis par l interface suivante : interface gethauteur fournit la hauteur du bloc, Bloc + gethauteur() : int getcouleur fournit la couleur du bloc, + getcouleur() : Couleur estempilable indique si il est ou non possible d empiler + estempilable() : boolean quelque chose sur ce bloc, Il y a 4 couleurs possibles pour les blocs : bleu, rouge, vert, jaune. Q 1. Q 2. Donnez le code Java pour le type Couleur du package blocs.util. Donnez le code Java de l interface Bloc Il existe des blocs de différentes formes : cubes, cylindres et cônes, auxquelles correspondent les classes : Cube, Cylindre et Cone. Les cônes ont la particularité de ne pas être empilables (on ne peut rien poser dessus). Q 3. Donnez un code Java pour la classe Cube. Hauteur et couleur d un cube sont fixées à la création. Q 4. La classe Empilement permet de représenter des empilements de blocs. La pile des blocs est gérée par un attribut de type java.util.stack<bloc> (voir l annexe pour la classe java.util.stack<e> où E représente le type des éléments). Cette classe dispose des méthodes : gethauteur qui renvoie la hauteur de l empilement. Cette hauteur correspond au cumul des hauteurs des blocs qui composent l empilement. ajoute qui permet d ajouter au sommet de l empilement un bloc passé en paramètre. Une exception EmpilementImpossibleException est déclenchée si le bloc au sommet n est pas empilable 1. retire qui retire le bloc au sommet de l empilement, le bloc retiré est renvoyé en résultat, une exception java.util.emptystackexception est déclenchée si l empilement est vide. raz qui retire un par un tous les blocs Donnez un code Java pour cette classe Empilement (un empilement est initialement vide). Q 5. Donnez le code d une méthode main d une classe Test qui 1 Cette classe d exception dispose d un constructeur qui prend en paramètre un message sous forme d une chaîne de caractères.

1. crée 1 cube bleu de hauteur 4, 1 cylindre rouge de hauteur 2 et un cone bleu de hauteur 5, 2. crée un empilement pile 3. tente d ajouter à pile successivement le cube, le cone et le cylindre ci-dessus, si un des ajouts est impossible un messsage est affiché, sans interruption du programme, 4. affiche la hauteur de l empilement créé, Exercice 2 : Tournois et classements (Les types de cet exercice appartiendront au paquetage competition.) Des disciplines sont organisées en fédérations qui gèrent ses adhérents en leur délivrant une licence, on parle alors de licenciés d une fédération. Cette licence donne le droit de participer aux tournois organisés par la fédération. Dans certains cas (tennis, tennis de table, échecs, etc.) un joueur se voit attribuer des points en fonction des résultats qu il obtient à l occasion de sa participation à ces tournois, en fonction des matchs qu il y remporte. On s intéressera donc dans cet exercice à la gestion de tournois et à l attribution de ces points. Les Joueurs Un joueur est caractérisé par un nom, un prénom, un numéro de licence (une chaîne de caractères composée de chiffres et de lettres et supposée unique) et un nombre de points (initialement 0). Q 1. Donnez le code Java d une classe Joueur conforme à cette description : Les matchs attributs, constructeurs (à partir des nom, prénom et numéro de licence), méthodes accesseurs et la méthode tostring (reprenant les valeurs des différents attributs), des méthodes equals et hashcode adaptées, une méthode pour ajouter des points au joueur, enfin cette classe implémente l interface Comparable, un joueur sera considéré plus petit qu un autre si son nombre de points est inférieur (NB : on accepte ici que cette comparaison ne soit pas consistante dans le cas de l égalité avec equals). Un match se joue entre 2 joueurs et se conclut nécessairement par un vainqueur. La classe Match est conforme au diagramme UML suivant : Match - joueur1 : Joueur - joueur2 : Joueur - vainqueur : Joueur + Match(j1 : Joueur, j2 : Joueur) + getjoueur1() : Joueur + getjoueur2() : Joueur + getvainqueur() : Joueur + getvaincu() : Joueur + setvainqueur(vainqueur : Joueur) Les méthodes getvainqueur et getvaincu lèvent une exception java.lang.illegal- StateException si le match n a pas encore été joué et donc que le vainqueur n est pas encore connu. La méthode setvainqueur lève une exception java.lang.illegalargumentexception si son paramètre n est pas l un des deux joueurs du match. Q 2. Donnez la JavaDoc et le code Java des méthodes getvainqueur et setvainqueur.

Les tournois Un tournoi est organisé en tours (cf. image ci-dessous). On joue les tours les uns après les autres, un tour ne pouvant être commencé avant que tous les matchs du tour précédent ne soient terminés. Chaque tour comporte un nombre de matchs égal à une puissance de 2. Les matchs d un tour sont calculés en fonction des résultats du tour précédent : le premier match oppose les vainqueurs des matchs 1 et 2 du tour précédent, le second les vainqueurs des matchs 3 et 4, etc. A chaque tour on a donc 2 fois moins de matchs qu au tour précédent. On parle de 1 ème 32 lorsqu il y a 32 matchs à jouer, puis de 1 ème 16 pour les 16 matchs du tour suivant et ainsi de suite jusqu aux 1 2 finales et enfin la finale dont le vainqueur est le vainqueur du tournoi. La classe Tournoi permet de modéliser de tels objets. Les attributs suivants sont définis dans cette classe Tournoi : /** le nombre de points forfaitaire bonus attribué au vainqueur d un tournoi public static final int NB_POINTS_VICTOIRE = 20; /** vaut true si et seulement si ce tournoi est terminé private boolean fini; /** liste des matchs qui ont déjà été joués dans ce tournoi, (NB : les matchs * ayant été joués leurs vainqueurs sont donc connus) private List<Match> lesmatchsjoues; /** tableau de tous les matchs du tour en cours, lorsque le tournoi est * fini, ce tableau ne contient que le match de la finale private Match[] tourencours; Q 3. Un objet de cette classe Tournoi est construit à partir d un paramètre de type List<Joueur> qui contient la liste des joueurs participant au tournoi. On supposera que la taille de cette liste est une puissance de 2, sans le vérifier. A la construction, le tableau des matchs du premier tour est créé par tirage aléatoire des joueurs (cf. en annexe un extrait de la documentation de la classe java.util.random). Donnez un code Java pour un tel constructeur de Tournoi. Q 4. Donnez le code d une méthode joueuntour qui, si le tournoi n est pas fini, 1. fait jouer tous les matchs de tourencours, ce qui revient à déterminer le vainqueur de chacun de ces matchs. Dans votre réponse, le vainqueur sera choisi aléatoirement entre les deux joueurs. Les matchs sont alors ajoutés aux matchs joués. 2. si le tour en cours était la finale indique que le tournoi est fini sinon, construit les matchs du tour suivant en mettant à jour le tableau des matchs pour le tour suivant. La méthode n a aucun effet si le tournoi est fini. Q 5. Donnez le code d une méthode getvainqueur qui renvoie le joueur vainqueur du tournoi si le tournoi est fini, sinon une exception TournoiNonFiniException est levée. On suppose que la classe Tournoi dispose également de la méthode : matchsjoues()

/** renvoie la liste des matchs joués pour un tournoi fini * * @return la liste de tous les matchs joués pour ce tournoi * @exception TournoiNonFiniException si le tournoi n est pas fini * (càd qu il reste des matchs à jouer) La classe d exception TournoiNonFiniException est supposée défini. constructeur sans paramètre. Elle contient un La fédération et le classement. La fédération regroupe les différents joueurs licenciés et est chargée de l attribution des points en fonction du résultat aux tournois. Les joueurs sont stockés dans une table de hachage, leslicencies qui associe à un numéro de licence le joueur correspondant. La classe Federation dispose d une méthode public static String getnouveaunumerolicence() qui à chaque appel fournit un nouveau numéro de licence unique (quelque soit la fédération). Avec les objets de la classe Federation, on souhaite pouvoir inscrire un nouveau licencié à partir d un nom et d un prénom. Le joueur est alors créé et le numéro de licence du nouveau joueur est alors fixé à l aide de la méthode ci-dessus. Il faut également à partir d un numéro de licence pouvoir : supprimer un licencié, connaître le nom du joueur licencié associé au numéro de licence, obtenir le nombre de points du joueur associé au numéro de licence. Comme cela a été dit la fédération attribue des points aux joueurs en fonction de leurs résultats dans les tournois auxquels ils participent 2. Si le tournoi est fini, pour chacun des matchs joués pendant le tournoi, on attribue 5 points au vainqueur du match. De plus si avant le tournoi, le vainqueur du match avait moins de points que le vaincu, ce vainqueur reçoit 1 point par tranche entière de 25 points d écart. Ainsi, par exemple, si tim qui avait 132 points avant le tournoi est vainqueur d un match contre oleon qui lui avait 197 points avant le tournoi, alors pour ce match tim reçoit 5 points de victoire plus 2 points pour les 65 points d écart initial, donc en tout 7 points. Ce calcul est réalisé par la méthode : private int calculpointsgagnes(joueur vainqueur, Joueur vaincu) Pour gérer correctement la prise en compte des points avant le tournoi, il faut calculer une table des points acquis par les joueurs pendant le tournoi. Ce qui est réalisé par la méthode : private Map<String,Integer> calculpointsacquis(tournoi tournoi) Dont la table (Map) résultat fournit en fonction du numéro de licence le nombre de points acquis pour le tournoi indiqué. L attribution effective aux joueurs des points gagnés au cours d un tournoi est réalisé par la méthode attribuepoints qui prend en paramètre un objet Tournoi. Cette méthode déclenche l exception TournoiNonFiniException si le tournoi n est pas fini. La méthode attribuepoints utilise les deux méthodes privées ci-dessus pour ajouter les points gagnés par les joueurs dans la table leslicencies de la fédération. Le vainqueur du tournoi reçoit en plus le nombre de points bonus défini dans NB POINTS VICTOIRE de la classe Tournoi. Q 6. Donnez le code Java d une telle classe Federation. NB : Aucun code n est demandé pour la méthode getnouveaunumerolicence(), mettre {... } pour le corps de méthode. 2 Le calcul de point proposé ici ne correspond a priori à aucune situation réelle.

Annexe Extrait de la javadoc de java.util.stack<e> La classe java.util.stack<e> implémente les interfaces Collection<E> et Iterable<E>. En plus de ces méthodes de ces interfaces, les méthode suivantes sont ajoutées à la classe Stack<E> : Stack() Creates an empty Stack. boolean empty() Tests if this stack is empty. E peek() Looks at the object at the top of this stack without removing it from the stack. Throws EmptyStackException if this stack is empty. E pop() Removes the object at the top of this stack and returns that object as the value of this function. Throws EmptyStackException if this stack is empty. E push(e item) Pushes an item onto the top of this stack. Extrait de la javadoc de java.util.random Random() Creates a new random number generator. This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor. int nextint(int n) Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive), drawn from this random number generator s sequence.