Programmation par les Objets en Java



Documents pareils
Cours 1: Java et les objets

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Package Java.util Classe générique

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

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

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

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

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

Programmation en Java IUT GEII (MC-II1) 1

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

Chapitre 10. Les interfaces Comparable et Comparator 1

TP, première séquence d exercices.

Java Licence Professionnelle CISII,

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

Programmation Orientée Objet

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

Initiation à JAVA et à la programmation objet.

Chapitre 2. Classes et objets

Premiers Pas en Programmation Objet : les Classes et les Objets

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

TP1 : Initiation à Java et Eclipse

Java c est quoi? Java pourquoi?

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

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

Chapitre VI- La validation de la composition.

Corrigé des exercices sur les références

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

Une introduction à Java

Projet de programmation (IK3) : TP n 1 Correction

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

Java Licence Professionnelle CISII,

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

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

Programmer en JAVA. par Tama

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

TD/TP PAC - Programmation n 3

Java 1.5 : principales nouveautés

Langage Java. Classe de première SI

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

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

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

RMI le langage Java XII-1 JMF

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 )

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

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

Programmation Objet I

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

Corrigés des premiers exercices sur les classes

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

PROGRAMMATION PAR OBJETS

2 e édition JAVA 5 et 6. Jérôme Bougeault. TSoft et Groupe Eyrolles, 2003, 2008, ISBN :

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

TD/TP PAC - Programmation n 3

TP1. Outils Java Eléments de correction

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

LOG4430 : Architecture logicielle et conception avancée

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Auto-évaluation Programmation en Java

Exercices sur les interfaces

Applet pour visualiser les variables «automate» notifiées

INF 321 : mémento de la syntaxe de Java

Bases Java - Eclipse / Netbeans

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

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

as Architecture des Systèmes d Information

Support de cours et TD Programmation Orientée Objet

Programmation avec des objets : Cours 7. Menu du jour

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

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

Programmation Orientée Objet

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

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Classe Interne, Anonyme & Enumération

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

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

Utilisation d objets : String et ArrayList

Programmation Objet - Cours II

TP SIN Programmation sur androïde Support : eclipse

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

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

Un ordonnanceur stupide

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

Programmation Objet et JAVA

Interfaces graphiques avec l API Swing

Java DataBaseConnectivity

INITIATION AU LANGAGE JAVA

1 Définition d une classe en Java

Synchro et Threads Java TM

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

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

Programmation Objet Java Correction

Remote Method Invocation (RMI)

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

Java Licence professionnelle CISII,

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Threads. Threads. USTL routier 1

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

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

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

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

Transcription:

Programmation par les Objets en Java Najib TOUNSI Les classes en Java (TD 3) I. Notion de classe I.1 Classe, champs, méthodes, instanciation, this, private vs. public. Créer une classe Point (coordonnée x,y) avec des méthodes setx(), sety(), getx(), gety() pour resp. affecter une coordonnée (x ou y) et accéder à sa valeur (x ou y). Mettre cette classe dans un ficher Point.java et le compiler. * Classe Point du plan avec ses cordonnées x et y public class Point extends Object{ private int x, y; * Methode qui affecte la valeur de son paramètre * au Point this. public void setx(int p) { x = p; public void sety(int p) { y = p; public int getx() { return x; ; public int gety() { return y; 1. Faire un programme test qui crée un point p, lui affecte des coordonnées et imprime ensuite ses coordonnées. Mettre ce programme dans un fichier TestPoint.java dans le même répertoire. public class TestPoint{ static public void main(string args[]){ 1 of 5

; Point p = new Point(); p.setx (3); p.sety (4); System.out.println( p.getx() ); System.out.println( p.gety() ); 2. Constater qu'on ne peut appeler aucune méthode sur un objet Point sans avoir initialisé par new Point(); ( constructeur déjà défini en Java et hérité de la classe Object ). 3. Remarquer que dans les méthodes on peut aussi écrire this.x ou this.y au lieu de x ou y tout court. 4. Dans votre programme de test main, essayer d'accéder directement à x, y par la notation p.x et p.y où p est une variable Point. Conclusion. 5. Dans la classe, mettre x, y public au lieu de private cette fois-ci. Conclusion. (Remettre ensuite x, y privés.) I.2 Autres méthodes 1. Rajouter à la classe Point d'autres méthodes de votre choix, par exemple déplacer un point d'une longueur sur l'axe des x et des y, ramener un point à l'origine par une méthode reset(), etc. ) 2. Définir aussi une fonction public double distance (Point b) qui calcule la distance entre le point this et le point b en paramètre. Tester en calculant la distance en les points (1,2) et (2,3). 3. Définir aussi une fonction (version-2) public static double distance (Point a, Point b) qui calcule la distance entre les points a et b en paramètres. Comment utiliser cette méthode? Quelle est la différence avec le cas 2 précédent? Quelle serait votre choix de conception d'une fonction distance, le cas 3. ou 2.? I.3 Egalité ou pas entre deux objets? 1. La fonction public boolean equals(object o), héritée aussi de Object, permet de tester «l'égalité» entre deux objets. Usage: p et q étant deux instances de Point. p.equals(q); permet de tester si les deux points p et q sont égaux ou pas. 2. Créer, toujours dans votre programme de test, deux points p et q et leur affecter les mêmes coordonnées. Vérifier le résultat de la méthode equals sur ces points. 2 of 5

3. 4. Conclusion? (La réponse est false, voir ci-après) Même question, mais cette fois-ci, le point p est initialisé normalement par new et q est initialisé par l'affectation q = p; Conclusion? Réponse: en 2. on compare en fait les références de deux points différents (même si ayant même valeurs). En 3. on compare deux références égales, car référence à un même objet. Passer outre la méthode equals héritée et la redéfinir soi-même dans la classe Point comme suit: public boolean equals(point a){ return (this.x==a.x && this.y==a.y); où on compare deux points par leur coordonnées. Refaire le test précédent. Conclusion? (Voir la réponse (*) en fin de TD) II. Documenter la classe 1. Rajouter des commentaires pour documenter votre classe et vos méthodes à la façon déjà donnée par... NB. Définir les commentaires des méthodes juste avant la méthode. 2. Créer un sous-répertoire (appelé docpoint par exemple) et faire ensuite la commande: javadoc -d docpoint Point.java 3. Les fichiers nécessaires à la documentation de la classe Point seront créés dans le répertoire donné docpoint sous forme de page Web. Un fichier index.html est le point d'entrée dans ce répertoire. Le visualiser. III. Notion de constructeur Reprendre la classe Point avec les deux nouvelles méthodes suivantes qui sont des constructeurs. * Initialise un point à l'origine public Point(){x = 0; y = 0; 3 of 5

* Initialise un point à a et b) public Point(int a, int b){x = a; y = b; 1. Dans les programmes, main(), utiliser Point p = new Point(); pour déclarer et initialiser un objet Point à (0, 0) par défaut Point q = new Point(5,2); pour déclarer et initialiser un objet Point à (5, 2). A noter: Avec new Point() il sera fait appel au constructeur sans paramètre défini juste ci-dessus, au lieu de celui hérité comme dans I.1. Important! Initialiser un point par constructeur, e.g. Point p = new Point (2,5), n'est pas la même chose que lui affecter des valeurs par les méthodes p.setx(2) et p.sety(5), même si dans les deux cas l'objet a la même valeur. En effet, dans le premier cas, initialisation, l'objet p n'existe pas avant son initialisation, alors que dans le deuxième cas, affectation, p est déjà créé mais ne fait que changer de valeurs. 2. Vérifier que si on omet le constructeur Point() sans paramètre, c'est une erreur de compilation. En effet, à partir du moment qu'un constructeur est déclaré, l'appel new Point(), ne cherche pas le constructeur défaut hérité précédemment, mais celui que l'utilisateur doit définir aussi. 3. Remplacer maintenant le code {x = 0; y = 0; du constructeur défaut, par {this (0,0);. Vérifier le résultat. L'instruction this(0,0) est un appel de l'instance courante au constructeur Point(int a, int b) avec ici 0 et 0 comme paramètres. C'est d'ailleurs la seule fois qu'un constructeur peut être appelé explicitement. 4. Exercices: a. Rajouter un constructeur avec un seul paramètre (initialisation de l abscisse) qui affecte ce paramètre à x, et 0 à y. b. Ecrire le code de ce constructeur de deux façons différentes. c. Vérifier qu'on peut réécrire le constructeur (défaut) par {this (0); qui fait appel au constructeur public Point(int a) nouvellement ajouté. IV Conversion vers texte. Comme pour la méthode equals (Point) (cf. I.3), on peut redéfinir la méthode tostring() héritée aussi de Object, pour convertir un objet Point vers une chaîne de caractères imprimable. Exemple: public String tostring() { return "(" + x + "," + y + ")" ; 4 of 5

Exemple d'usage: Point q = new Point (2,5); System.out.println(q.toString()); // imprime (2,5) Vérifier en changeant le message d'affichage avec un autre texte dans la méthode tostring(). (*): La fonction equals héritée de Object a été redéfinie par l'objet Point lui même. Cette dernière méthode est sensée passer outre ou recouvrir (override) la méthode héritée. C'est pour cela que deux objets Point distincts sont maintenant... égaux quand ils ont la même valeur (mêmes cordonnées). CQFD. Remarque: En réalité, cette solution marche quand on est sûr de comparer toujours deux objets déclarés Point. Or en Java, on peut écrire: Object p = new Point (2,5); aussi bien que Object q = new Point (2,5); Là, si on compare p et q, par p.equals(q), le résultat sera false! Justement, la surcharge va faire choisir la méthode boolean equals(object) héritée de la classe Object, qui compare les références, au lieu de la méthode boolean equals(point) déclarée dans Point! Il faut donc refaire le profile de cette dernière et ensuite la récrire : boolean equals(object a){ return (this.x == ((Point)a).x && this.y == ((Point)a).y ) ; où on convertit explicitement a à Point avant de comparer. recqfd. Hum...! Mais alors, rien n'empêche d'appeler equals avec n'importe quel objet en paramètre a, par exemple p.equals("toto"); Le compilateur ne relèvera pas l'erreur à la compilation. L'erreur sera détectée à l'exécution "java.lang.string cannot be cast to Point... ", lors de la conversion ((Point)a). Evaluation Certains exercices seront évalués à la demande et corrigés par l'encadrant du TP. 5 of 5