Licence Informatique Année TP n 4 - Correction. Révisions, suite et fin. Introduction à l héritage

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

Projet de programmation (IK3) : TP n 1 Correction

Premiers Pas en Programmation Objet : les Classes et les Objets

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

TD/TP PAC - Programmation n 3

Corrigé des exercices sur les références

Java Licence Professionnelle CISII,

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

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

Programmation par les Objets en Java

Chapitre 10. Les interfaces Comparable et Comparator 1

Programmer en JAVA. par Tama

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

Cours 1: Java et les objets

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

TP1 : Initiation à Java et Eclipse

TP, première séquence d exercices.

Chapitre VI- La validation de la composition.

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

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

Auto-évaluation Programmation en Java

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

Programmation avec des objets : Cours 7. Menu du jour

Corrigés des premiers exercices sur les classes

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

TD/TP PAC - Programmation n 3

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Bases Java - Eclipse / Netbeans

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

Synchro et Threads Java TM

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

Programmation Par Objets

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

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

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

TP1. Outils Java Eléments de correction

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)

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

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

RMI le langage Java XII-1 JMF

Héritage presque multiple en Java (1/2)

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

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

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Architecture Orientée Service, JSON et API REST

Langage Java. Classe de première SI

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

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

INITIATION AU LANGAGE JAVA

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

Le langage C. Séance n 4

Cours de Programmation Impérative: Zones de mémoires et pointeurs

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

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

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

Package Java.util Classe générique

Développement Logiciel

Cours d initiation à la programmation en C++ Johann Cuenin

Remote Method Invocation (RMI)

Programmation Orientée Objet

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

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

Les arbres binaires de recherche

Utilisation d objets : String et ArrayList

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Cours de Systèmes d Exploitation

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

Programmation Orientée Objet application au langage Java Version Novembre 2007

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

TP3 : Manipulation et implantation de systèmes de fichiers 1

Remote Method Invocation en Java (RMI)

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

Chapitre 2. Classes et objets

Cours 14 Les fichiers

OpenPaaS Le réseau social d'entreprise

Programme Compte bancaire (code)

NFP 121. Java et les Threads. Présentation : Thierry Escalarasse Mai 2007

Une introduction à Java

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

2. Comprendre les définitions de classes

Exercices sur les interfaces

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

Utiliser Java sans BlueJ

Généralités sur le Langage Java et éléments syntaxiques.

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

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)

Création d objet imbriqué sous PowerShell.

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

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

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Java c est quoi? Java pourquoi?

Programmation Objet Java Correction

F. Barthélemy. 17 mai 2005

Projet gestion d'objets dupliqués

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

as Architecture des Systèmes d Information

Classes et Objets en Ocaml.

Flux de données Lecture/Ecriture Fichiers

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Transcription:

Université Paris Diderot Programmation Orientée Objet Licence Informatique Année 2009 2010 TP n 4 - Correction Révisions, suite et fin. Introduction à l héritage On modélise une application devant servir à l inventaire d une bibliothèque. Elle devra traiter des documents de nature diverse : des livres, des dictionnaires, et autres types de documents qu on ne connaît pas encore précisément mais qu il faudra certainement ajouter un jour (bandes dessinées, dictionnaires bilingues,...). On définira une classe Bibliotheque réduite à la seule méthode main pour tester les différentes classes de ce TP. Exercice 1 Tous les documents possèdent un titre. Quand un document est créé, son titre est donné à la création et par la suite, il ne change plus. 1. Définir la classe Document avec son constructeur public, et la propriéte titre privée et son accesseur. 2. On veut attribuer un numéro d enregistrement unique dès que l on crée un objet Document. On veut que le premier document créé ait le numéro 0, et que ce numéro s incrémente de 1 à chaque création de document. Quelles propriétés faut-il ajouter à la classe Document? Lesquelles doivent-être static? Les ajouter sans leurs accesseurs, et modifier le constructeur. Puis ajouter une méthode getnumero renvoyant le numéro d enregistrement du document. 3. Ajouter un second constructeur public permettant de définir aussi, en plus du titre, le numéro d enregistrement (supposé positif ou nul) lors de la création d un document. Quelles restrictions peut-on prendre afin d éviter que deux documents créés aient le même numéro? Dans les cas de restriction, on prendra le numéro suivant prévu, à la place du numéro indiqué par l utilisateur. 4. Redéfinir la méthode tostring renvoyant la chaîne de caractères constituée du numéro d enregistrement et du titre du document. Il faut prendre garde à ce que, si on ajoute un document en indiquant son numéro, ce numéro soit plus grand que le numéro suivant prévu. Il faut de plus mettre à jour le numéro suivant. public class Document { static private int numerosuivant = 0; private int numero; private String titre; public Document(String titre) { this.numero = numerosuivant; numerosuivant++; this.titre = titre; public Document(String titre, int numero) { if (numero < numerosuivant) { numero = numerosuivant; 1

this.numero = numero; numerosuivant = numero + 1; this.titre = titre; public int getnumero(){ return numero; public String gettitre(){ return titre; return ("numero: "+numero+" titre: "+titre); Exercice 2 On veut implémenter une liste de documents dans laquelle on veut pouvoir ajouter des documents petit à petit, et y accéder par leur numéro d enregistrement. Mais plutôt que d utiliser les structures de collections Java (ArrayList, Vector, etc. que l on verra dans une séance ultérieure), on veut programmer soi-même en dur une structure de données. Pour implémenter cette structure, on va créer une classe ListeDeDocuments avec un tableau de documents tableau contenant les documents de la liste. Cependant, pour éviter d avoir à augmenter la taille du tableau à chaque ajout, on va fixer initialement sa taille à 1 et doubler sa taille dès qu on veut ajouter un document dont le numéro d enregistrement est plus grand que la taille du tableau. 1. Définir la classe ListeDeDocuments avec la propriété privée tableau et la méthode ajouter qui ajoute un document à la place indiquée par son numéro d enregistrement, ainsi qu une méthode getdocument qui prend en argument un numéro et renvoie le document de la liste ayant ce numéro (null s il n est pas dans la liste). 2. Dans cette classe, redéfinir la méthode tostring pour qu elle renvoie les descriptions de tous les documents de la liste, séparées par un saut de ligne "\n". 3. Modifier la classe Document pour faire en sorte que tous les documents créés puissent être retrouvés en utilisant une méthode statique accesdocument dans la classe Document. public class ListeDeDocuments { private Document[] tableau; public void ajouter(document doc) { if (tableau.length <= doc.getnumero()) { Document[] t = new Document[tableau.length * 2]; t[i] = tableau[i]; tableau = t; 2

tableau[doc.getnumero()] = doc; public Document getdocument(int index) { if (index >= tableau.length) { return null; return tableau[index]; public ListeDeDocuments() { tableau = new Document[1]; String resultat = ""; resultat += d + "\n"; L inconvénient de cette représentation est qu il est difficile de parcourir la liste des documents. Cela est dû au fait que cette liste, optimisée pour l accès direct aux documents par leur numéro, peut ainsi comporter des trous. Exercice 3 La bibliothèque est appelée à traiter des documents de nature diverse : des livres, des dictionnaires, et autres types de documents. À chaque livre est associé, en plus, un auteur et un nombre de pages, les dictionnaires ont, eux, pour attributs supplémentaires une langue et un nombre de tomes. On veut manipuler tous les articles de la bibliothèque au travers de la même représentation : celle de document. 1. Définissez les classes Livre et Dictionnaire étendant la classe Document. Définissez pour chacune un constructeur permettant d initialiser toutes ses variables d instances respectives. 2. Redéfinissez la méthode tostring() dans les classes Livre et Dictionnaire pour qu elle renvoie une chaîne de caractères décrivant unun livre ou un dictionnaire, en plus de la description normale d un document. public class Livre extends Document{ private String auteur; private int nbpages; public Livre(String titre, String auteur, int nbpages) { super(titre); this.nbpages = nbpages; this.auteur = auteur; 3

public String getauteur() { return auteur; public int getnombredepages() { return nbpages; public String tostring(){ return (super.tostring()+" auteur: "+getauteur()+" pages: "+getnombredepages()); public class Dictionnaire extends Document { private int nbtomes; private String langue; public Dictionnaire(String titre, int nbtomes, String langue) { super(titre); this.nbtomes = nbtomes; this.langue = langue; public int getnombredetomes() { return nbtomes; public String getlangue() { return langue; return (super.tostring()+" tomes: "+getnombredetomes()+" langue: "+getlangue()); 3. Dans la classe ListeDeDocuments, définissez une méthode touslesauteurs qui renvoie la chaîne des auteurs de tous les livres de la liste. 4. Dans la classe ListeDeDocuments définissez une méthode touslesdicos qui renvoie une liste de documents (sous la forme d une nouvelle instance de la classe ListeDeDocuments) contenant tous les dictionnaires de la liste. public ListeDeDocuments touslesdicos() { ListeDeDocuments resultat = new ListeDeDocuments(); if (d instanceof Dictionnaire) { resultat.ajouter(d); public String touslesauteurs() { String resultat = ""; if (d instanceof Livre) { resultat += ((Livre) d).getauteur() + "\n"; 4

5. Définissez ensuite quelques classes supplémentaires, par exemple BandeDessinee, Manga, DictionnaireBilingue, etc. avec des propriétés en plus. Pour chacune de ces nouvelles classes, quelle classe étend-elle? Exercice 4 Dans l exercice suivant nous allons utiliser la classe FileWriter pour générer un fichier. Pour l utiliser il faut l importer import java.io.filewriter;. D autre part, l utilisation des constructeurs de cette classe, peuvent générer des exceptions du type IOException. Il convient donc : d importer la classe IOException avec import java.io.ioexception;, d ajouter throws IOException à la déclaration des méthodes dans lesquelles nous utilisons FileWriter. Un cours et un TD seront consacrés à la gestion des exceptions. Enfin différents constructeurs existent pour FileWriter. Nous allons utiliser le constructeur prenant en argument une chaine de caractères. Notez que cette chaîne de caractères peut spécifier le chemin vers le dossier dans lequel nous voulons générer nos fichiers. Par exemple : FileWriter w = new FileWriter( /local/home/monom/file ); génère un fichier file.txt vide dans mon dossier /local/home/monom/. Pour ecrire dans un tel fichier, on utilise entre autres les méthodes : write(string s) qui ecrit la chaîne s dans le fichier, close() pour mettre fin à l écriture dans ce fichier. Si vous utilisez write(string s), il est nécessaire de terminer l ecriture du fichier en utilisant close(). Dans la classe ListeDeDocuments, définissez une fonction sauvegarde permettant d écrire la liste des documents dans un fichier. public void sauvegarde(string filename) throws IOException { FileWriter w = new FileWriter(filename); Document undocument; for (int i=0; i<lesdocuments.size(); i++){ undocument = lesdocuments.elementat(i); w.write(undocument.tostring()+ "\n"); w.close(); 5