Exercice 1 (API Java)



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

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

Java Licence professionnelle CISII,

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

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

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

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

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Une introduction à Java

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

RMI le langage Java XII-1 JMF

Programmation par les Objets en Java

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

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

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

Utilisation d objets : String et ArrayList

TP1 : Initiation à Java et Eclipse

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII,

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

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

4. Groupement d objets

as Architecture des Systèmes d Information

TD/TP PAC - Programmation n 3

Java - la plateforme

INITIATION AU LANGAGE JAVA

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Langage Java. Classe de première SI

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

Java 1.5 : principales nouveautés

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

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

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

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

Premiers Pas en Programmation Objet : les Classes et les Objets

Introduction au langage Java

Application web de gestion de comptes en banques

Recherche dans un tableau

Chapitre VI- La validation de la composition.

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

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Auto-évaluation Programmation en Java

Présentation du langage et premières fonctions

Cours 1: Java et les objets

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

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

Supervision et infrastructure - Accès aux applications JAVA. Document FAQ. Page: 1 / 9 Dernière mise à jour: 15/04/12 16:14

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Création d objet imbriqué sous PowerShell.

TD/TP PAC - Programmation n 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

PROGRAMMATION PAR OBJETS

Initiation à JAVA et à la programmation objet.

Compte-rendu de projet de Système de gestion de base de données

F. Barthélemy. 17 mai 2005

Java Licence Professionnelle CISII,

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

RN2-Programmation Orientée Objet - JAVA CH 1 Introduction à la POO et Java

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

Bases de données Oracle Virtual Private Database (VPD) pour la gestion des utilisateurs d applications

Remote Method Invocation (RMI)

Introduction à JDBC. Accès aux bases de données en Java

Programmation avec des objets : Cours 7. Menu du jour

Threads. Threads. USTL routier 1

Développement Logiciel

Création d'un site dynamique en PHP avec Dreamweaver et MySQL

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

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 Objet I

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

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

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 )

Traduction des Langages : Le Compilateur Micro Java

I. Introduction aux fonctions : les fonctions standards

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Généricité. en Java. (polymorphisme paramétrique) Philippe GENOUD UJF Janvier

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

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

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Le stockage local de données en HTML5

Chapitre 2. Classes et objets

Java c est quoi? Java pourquoi?

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

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

Programmation Orientée Objet Java

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

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

JAVA. Introduction à la programmation objet avec java 1/4. Nadir BOUSSOUKAIA

Cours 1 : La compilation

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

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

Java DataBaseConnectivity

Cours 14 Les fichiers

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

OCL - Object Constraint Language

Remote Method Invocation Les classes implémentant Serializable

Introduction au langage de programmation Java

Transcription:

Programmation orientée objet TP 3 L2 MPCIE API Java, Paquetages Exercice 1 (API Java) 1. Écrire la classe Ensemble comme étant une collection d'éléments ne contenant pas de doublon. Elle sera donc implémentée à l'aide d'une ArrayList d'object et de ses méthodes (voir annexe). 2. Cette classe doit permettre l'utilisation des opérations suivantes : estvide() : retourne true si l'ensemble est vide ou false sinon ; taille() : retourne le nombre d'éléments dans l'ensemble ; contient( ) : retourne true si l'élément passé en paramètre appartient à l'ensemble ou false sinon ; obtenir( ) : renvoie l'élément situé à l'emplacement envoyé en paramètre ; ajouter( ) : ajoute un élément à l'ensemble et renvoie un booléen indiquant si l'ajout a réussi (on rappelle qu'il n'y a jamais de doublon dans un ensemble) ; copie() : retourne un ensemble contenant les mêmes éléments ; retournerenlever( ) : retourne l'élément de l ensemble situé à l'emplacement indiqué en paramètre (ou null si l'élément n'est pas présent) et l enlève de l ensemble ; intersection( ) : renvoie un nouvel ensemble ne contenant que les éléments contenus à la fois dans l'ensemble courant et dans l'ensemble envoyé en paramètre. 3. Écrire un programme pour tester l'implémentation. 4. Modifier la classe Bureau en utilisant la classe Ensemble plutôt qu'un tableau pour représenter l'ensemble des garages liés à un bureau. 5. Ajouter une méthode contient( ) à Bureau qui renvoie true si le bureau contient le garage envoyé en paramètre ou false sinon. 6. Dans la méthode main(), créer deux garages identiques g0 et g0b (tous leurs attributs sont équivalents). Ajouter g0 à un bureau et vérifier si ce bureau contient g0b. 7. Redéfinir la méthode equals(object) pour la classe Garage de telle manière que g0 et g0b soient équivalents et revérifier si le bureau contient g0b. Exercice 2 Écrire la classe représentant l Entreprise de location en entier comme elle est proposée dans l exercice 2 du TD3 en utilisant la classe Ensemble précédemment codée. Exercice 3 (Packages) 1. Effectuer les modifications demandées dans les exercices 2 et 3 du TD 3 (champs privés, classe abstraite, variable de classe ). 2. Modifier l'organisation des fichiers écrits jusque là concernant l'application "Location de véhicules". On créera un répertoire TPVehicule qui contiendra un répertoire mobiles contenant les classes Vehicule, Voiture, Camion et Autocar, un répertoire business contenant les classes Entreprise, Agence, Bureau et Garage et un répertoire outils contenant la classe Ensemble. 3. Réaliser différents fichiers de tests (méthode main()) placés soit dans TPVehicule, soit dans un des sous répertoires précédents et voyez comment vous devez demander la compilation et l'exécution. L2 MPCIE Programmation orientée objet TP 3 1/5

Annexes Paquetages (packages an anglais) Un paquetage est une collection de classes et d'interfaces. Un paquetage regroupe des classes ayant des liens entre elles, parce qu'elles travaillent sur un même domaine, qu'elles concernent un même sujet Une classe se trouve dans le paquetage nom_paquetage si la première ligne du fichier source de la classe contient l'annonce : package nom_paquetage; Le nom d un paquetage est une suite d identificateurs séparés par des points, comme par exemple java.util. Dans le système de fichiers, un paquetage correspond à un répertoire, par exemple, le paquetage de nom projet.location doit être placé dans un répertoire projet/location/ (ou projet\location\ sous Dos). Les points sont remplacés par un slash (ou anti slash) au niveau de l'arborescence. Tous les fichiers de bytecode (fichiers.class) du paquetage projet.location doivent se trouver dans le répertoire projet/location/. Pour cela, on peut, lors de la compilation, utiliser l'option d qui permet de spécifier le répertoire dans lequel seront stockés les fichiers.class. javac d repertoire file.java Remarque : si un fichier source ne contient pas de déclaration package ;, les classes sont dans un paquetage par défaut (paquetage sans nom) qui correspond au répertoire courant. Au sein d'un paquetage on a accès aux classes de ce paquetage. Les classes des autres paquetages ne sont accessibles que si elles sont déclarées publiques (public). Une classe qui n'est pas déclarée publique n'est donc accessible qu au sein de son paquetage. Une classe nommée C qui se trouve au sein du paquetage p a pour nom complet p.c. L'accès à cette classe depuis un autre paquetage se fait par son nom complet ou en utilisant la directive import en tête du fichier source : import p.c; ou import p.*; API Java La bibliothèque standard de classes Java 6 1 est accessible en ligne sur : http://docs.oracle.com/javase/6/docs/api/ Elle est organisée en paquetages thématiques : java.lang : classes de base du langage (chaînes, maths, processus, exceptions ) java.util : structures de données (vecteurs, piles, tables, parcours ) java.io : entrées sorties classiques (texte sur clavier écran, fichiers ) java.awt : interfaces graphique (fenêtrage, événements ) java.net : communications Internet (manipulation d'url, de sockets ) java.applet : insertion de programmes dans des documents HTML Le paquetage java.lang Ce paquetage contient la classe Object et la plupart des autres classes courantes de Java (String, Exception ). Il contient aussi les classes enveloppes (wrappers) associées aux types simples : classe Double associée à double, classe Integer associée à int Égalité d objets On rappelle que tous les objets (et tableaux) en Java sont manipulés par références. Utilisé sur des références, l opérateur == compare les valeurs de références. Par exemple, si s1 et s2 sont deux chaînes de caractères (deux références sur des String), if (s1 == s2) comparera les références (la condition est vraie ssi s1 et s2 repèrent le même objet). Or, il est souvent nécessaire de comparer les contenus des objets. Pour savoir si deux objets d'une classe A ont des contenus identiques, on pourra définir dans A sa propre méthode d'égalité mais il est mieux de redéfinir la méthode equals() héritée de Object. Par exemple, la classe String redéfinit la méthode equals() et on trouve dans la documentation de la classe String : 1 Différentes versions de Java se sont succédées qui ont chacune apporté leurs nouveautés. La version actuelle est la version 7. La documentation de l'api Java précise depuis quand chacune des fonctionnalités a été ajoutée. L2 MPCIE Programmation orientée objet TP 3 2/5

equals public boolean equals(object anobject) Compares this string to the specified object. The result is true if and only if the argument is not null and is a String object that represents the same sequence of characters as this object. Overrides: equals in class Object Parameters: anobject the object to compare this String against. Returns: true if the String are equal; false otherwise. Une méthode equals(object) convenablement codée est généralement de la forme : public class A { public boolean equals(object o) { if (this == o) // si l'objet o est l'object courant, return true; // alors ils sont égaux if (o == null) // si l'objet o est null return false; // on est sûr qu'ils ne sont pas égaux // si les classes des deux objets ne sont pas les mêmes if (this.getclass()!= o.getclass()) 2 return false; // ils ne peuvent être égaux A a = (A)o; // on peut mainternant convertir l'objet en une instance de la classe courante return (this.champ1 == a.champ1) // on compare les champs && (this.champ2.equals(a.champ2) // un à un && ; Le paquetage java.util On y trouve aussi des classes permettant la représentation de collections d'objets. La classe java.util.arraylist 3 permet de représenter des collections d objets sous la forme d une liste. Son principal avantage par rapport à un tableau est qu elle se redimensionne automatiquement : en appelant la méthode add( ), la liste est automatiquement redimensionnée pour contenir un nouvel élément. Il existe dans l API Java d autres classes permettant de représenter des collections d objets telles que java.util.linkedlist ou java.util.hashset. Elles servent toutes à contenir des éléments. Cependant, les algorithmes d'ajout, d'accès ou de suppression varient d'une structure de données à l'autre. Dans le cadre de ce cours, nous nous limiterons à ArrayList. À noter que java.util.vector était auparavant utilisée à la place d'arraylist mais cette classe est depuis considérée comme obsolète. ArrayList est différente des tableaux. En premier lieu, c est une classe, et il est donc nécessaire de passer par des méthodes pour accéder aux éléments du vecteur (on ne peut pas utiliser les [], il faut utiliser la méthode get(int)). De plus, alors qu il est possible de déclarer des tableaux de n importe quel type (int[], Vehicule[], etc.), une ArrayList ne peut contenir que des références à des Object. Cependant, cette classe étant la racine de l arbre d héritage, il est possible de stocker dans un ArrayList des instances de n importe quelle classe. La méthode get(int) retourne un Object et il est donc nécessaire d effectuer une conversion explicite pour pouvoir stocker le résultat de get(int) dans la bonne classe. On appelle parfois cette opération un cast. ArrayList agences = new ArrayList(); agences.add(new Agence( )); // correct agences.add(new Bureau( )); // correct agences.add(new Object()); // correct /!\ Agence a = agences.get(0); // incorrect Bureau b = agences.get(0); // incorrect Object o = agences.get(0); // correct Agence a = (Agence)(agences.get(0)); // correct, conversion Object Agence Bureau b = (Bureau)(agences.get(0)); // correct, conversion Object Bureau On voit clairement que la ligne 3 risque de poser problème lors de la lecture du contenu de la liste plus tard dans le code. Depuis Java 1.5, il est possible de spécifier le type des objets contenus dans la liste au moyens des 2 getclass() est une méthode héritée de Object qui renvoie un objet qui représente la classe de l'objet. 3 http://docs.oracle.com/javase/6/docs/api/java/util/arraylist.html L2 MPCIE Programmation orientée objet TP 3 3/5

chevrons (<>). La liste de l'exemple précédent ne peut contenir que des agences. On imposer à la liste de ne contenir que ce type d'objet lors de la déclaration. Cette méthode a de nombreux avantages parmi lesquels : les éléments de la liste seront nécessairement des agences; par conséquent, ajouter autre chose qu'un bureau dans la liste crée maintenant une erreur ; il est toujours possible d'ajouter des instances de sous classes de Agence ; il n'est en revanche pas possible d'ajouter des instances de super classes de Agence ; la méthode get(int) renvoie une instance de Agence au lieu de Object précédemment ; la conversion Object Agence devient donc inutile. De nombreuses erreurs uniquement repérables à l'exécution peuvent ainsi être corrigées dès la compilation. L'exemple précédent devient alors : ArrayList<Agence> agences = new ArrayList<Agence>(); agences.add(new Agence( )); // correct agences.add(new Bureau( )); // correct agences.add(new Object()); // incorrect Agence a = agences.get(0); // correct Bureau b = agences.get(0); // incorrect Object o = agences.get(0); // correct, conversion Agence Object Agence a = (Agence)(agences.get(0)); // correct mais inutile Bureau b = (Bureau)(agences.get(0)); // correct, conversion Agence Bureau Cette déclaration est à préférer par rapport à la déclaration «brute» : correctement utilisée, elle n'a que des avantages. En effet, la déclaration brute n'est aujourd'hui acceptée que pour des raisons de rétro compatibilité avec les anciennes version de Java : il n'est pas impossible qu'elle soit interdite dans les versions futures. Actuellement, elle indique simplement un avertissement (warning). Recherche des bytecodes des classes Soit le fichier Exemple.java suivant : import java.util.*; import projet.location.*; class A { // utilise une classe C C inst1 = new C(); Si on compile ce fichier source depuis le répertoire courant, le compilateur doit trouver le fichier C.class. Pour cela, il va considérer successivement que la classe C peut appartenir : au paquetage par défaut et donc que C.class est dans le répertoire courant ; au paquetage java.lang (recherche de java/lang/c.class dans tools.jar du JDK). En effet la recherche se fait systématiquement dans le paquetage java.lang qui n a donc pas besoin d être importé ; au paquetage java.util ; au paquetage projet.location : on cherche donc un fichier projet/location/c.class dans le répertoire courant. Option classpath et variable d environnement CLASSPATH Dans la commande de compilation javac, l option classpath chemin permet d indiquer un ou plusieurs chemins de recherche (plusieurs chemins sont séparés par ':' sous Unix et par ';' sous Dos). Si on lance depuis le répertoire courant : javac classpath../ Exemple.java le compilateur va considérer que la classe C peut appartenir : au paquetage par défaut et donc la chercher dans le répertoire père du répertoire courant (chemin../). Attention on ne cherche plus dans le répertoire courant ; au paquetage java.lang ; au paquetage java.util ; au paquetage projet.location : on cherche donc un fichier projet/location/c.class dans le répertoire père du répertoire courant (chemin../). L2 MPCIE Programmation orientée objet TP 3 4/5

On indiquerait javac classpath../:./ Exemple.java pour chercher dans le répertoire courant et dans son père. De la même manière, java classpath chemin test cherche, dans le répertoire indiqué par chemin les classes et ressources nécessaires pour exécuter le programme principal de la classe Test. La variable d environnement CLASSPATH permet d énumérer les chemins d accès aux classes qui devront être localisées. Paquetages et niveaux de visibilité Pour une classe ou une interface : Modificateur Visibilité aucun paquetage Accessible seulement dans son paquetage public publique Accessible de partout Pour un champ (attribut, méthode ou classe interne) d une classe A : Modificateur Visibilité private privé Accessible seulement depuis sa propre classe aucun paquetage Accessible seulement dans le paquetage de A protected protégé De partout dans le paquetage de A et si A est public dans les classes héritant de A dans les autres paquetages public publique Accessible de partout dans le paquetage de A et partout ailleurs si A est public L2 MPCIE Programmation orientée objet TP 3 5/5