JAV – TD 3 bibliothèques standards composition

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

A propos de java Sun, fin 1995 C++ nettoyé semi-interprété
Introspection et Réflexion Manipulation dynamique de code Java.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Paquetages: Définitions Les classes Java sont regroupées en paquetages (packages en anglais) Ils correspondent aux « bibliothèques » des autres langages.
(Classes prédéfinies – API Java)
Introduction à Java - les paquetages -
Programmation Objet en JAVA Mise à Niveau
JAV - TD 6 Structures de données JAVA
Stéphane Frénot - - Dpt Télécommunications IJA20 JAVA Le cœur du langage.
Packages et résolution de noms
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
IJA - TD 2 Bases du langage
Stéphane Frenot - Département Télécommunication - SID - II - EjbServ 227 EJB Session.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Principes de programmation (suite)
Programmation orientée objet
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Langage Oriente Objet Cours 4.
Laboratoire d'Informatique de l’Université de Franche-Comté
Principes de programmation (suite)
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Langage Oriente Objet Cours 3.
POO : Objets et classes (Rappels)
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction à la programmation objet Langage Java
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Introduction au paradigme orienté-objet (suite)
P. Van Roy, LINF1251 LINF1251: Le Langage Java Peter Van Roy Département dIngénierie Informatique, UCL
1 Les paquetages («packages»). 2 L'objectif avec les paquetages («packages») est de rendre accessibles aux utilisateurs des classes définies par d'autres.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Cours 4 Héritage (suite).
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI1502 Principes fondamentaux en conception des logiciels
4 Introduction des objets. Les chaînes et tableaux
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
Cours 7 Classes locales Clonage Divers: tableaux.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
© 2005 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java Peter Van Roy Département d’Ingénierie Informatique, UCL
Tutorat en bio-informatique
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
IUT du Limousin L.U.P Michel Vergnaud Programmation Objet - Java.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Héritage Conception par Objet et programmation Java
IUT du limousin L.U.P Michel Vergnaud Programmation Objet - Java.
22 Concepts de base du langage Java. 2-2 Objectifs A la fin de ce cours, vous serez capables de : Identifier les éléments essentiels de Java Identifier.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Correction du TD Chapitre 3.
LES CLASSES ET LES OBJETS
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 3 IJA Bases du langage bibliothèques standards composition communication entre objets.
Transcription de la présentation:

JAV – TD 3 bibliothèques standards composition communication entre objets surcharge

Les tableaux Déclaration Création et initialisation Utilisation int[] array_of_int; // équivalent à : int array_of_int[]; Color rgb_cube[][][]; Création et initialisation array_of_int = new int[42]; rgb_cube = new Color[256][256][256]; int[] primes = {1, 2, 3, 5, 7, 7+4}; array_of_int[0] = 3; Utilisation int l = array_of_int.length;// l = 42 int e = array_of_int[40]; Les exceptions seront vues en TD4 . Ne pas insister dessus! Juste dire que ca sort du prog et que ca met l ’erreur sur la sortie std

Bibliothèques : d'où viennent les objets, les classes? Les objets n'apparaissent que s'ils sont fabriqués par quelque chose... et si l'on a obtenu une référence dessus (appel de méthode par exemple) Les classes Soit on les écrit nous-même Soit on nous les fournit (bibliothèque) Java fournit plus de 10 000 classes dans le kit de base (bibliothèque standard) La difficulté est de connaître leur existence

Bibliothèques standards Le Java Development Kit (JDK) comporte énormément de classes prédéfinies plus de 10 000 éléments dans l’API (Application Programming Interface) 1 archive (jdkxxx.jar) contient toutes les classes =>organisation hiérarchique des classes en paquetages (packages) correspondance directe package / répertoire

API du JDK http://tc-net.insa-lyon.fr java.lang : classes de bases (+reflect) java.io : entrées/sorties java.util : utilitaires (structures, dates, events) (+zip) java.net : réseau java.applet : gestion des applets java.awt : interface graphique (image, +datatransfert, +event) java.beans : définition de composants réutilisables java.math : entier de taille variable java.rmi : invocation distante (+dgc, +registry, +server) java.security : (+acl, +interfaces) java.sql : dialogue avec une base de données java.text : traduction, chaine=f(langue) etc...

Diagramme d’objets exemple Composition Une classe est un agrégat d'attributs et de méthodes : les membres COMPOSITION : quand un objet contient un attribut d’une autre classe Patient * ListePatients String String nom String prenom Patient lesPatients[] void afficheListeNoms() String getNom() Diagramme de classes Diagramme d’objets exemple :String unPatient:Patient nom maListe:ListePatients unPatient:Patient Durand unPatient:Patient unPatient:Patient :String prénom Paul

Communication entre objets message=appel de fonction d'un objet sur un autre on dit « Invoquer une méthode » ==> Unique manière de communiquer entre objets Syntaxe : référenceObjet.nomMethode(parametres); lePatient lePatient.getNom() laListePatients String nom prenom 0x234 Durand Insister sur getNom() n’a pas de paramètres (pas même l’objet à qui on demande) : l’objet est le réceptionnaire du message, et il connaît tout seul sa structure interne (si vous avez la question) Ox234 = valeur interne de la référence nom. Les références sont des adresses mémoire. Déréférencement automatique. String getNom() String Paul 0x234

Référence et this Pour pouvoir accéder à un objet, il faut avoir une référence sur cet objet (attribut ou variable) La référence est le nom qu'on lui donne localement Si on veut se parler à soi-même, on utilise « this » NB : les méthodes statiques peuvent-elles accéder à this ? //suite class Circle public void afficheToi() { System.out.println( "Je suis un cercle de surface"+this.getArea(); }

Synthèse communication Aucune instruction en dehors d’une classe Toute la communication se fait par échange de messages entre les objets public class MaClasse{ int i=12; String toto="Bonjour"; public static void main(String [] arg){ MaClasse unRepresentant=new MaClasse(); System.out.println("Je dis : "); System.out.println(unRepresentant.disBonjour()); } public String disBonjour(){return toto;}

Exo tableaux, composition, messages Créer une classe TableauCircles qui a un attribut tableau de 10 objets de la classe Circle faite en TD1 des méthodes addCircle, deleteCircle et AfficheCircles compiler, deboguer Faire une classe MonProgTableauCircle qui contient une méthode main qui: remplit le tableau avec 5 cercles prenez des x/y/r en dur demande l’affichage de l’ensemble des cercles compiler, deboguer, lancer

Encapsulation Ne rendre visibles de l'extérieur que certaines parties de l'objet L'utilisateur d'un objet n'accède qu'à sa partie publique. L'autre partie est dite privée. Intérêts une classe fournit un ensemble de services. C’est son problème de choisir comment elle fait : les clients n’ont pas besoin de connaître les détails => lisibilité du code Modification de la partie privée, tout en gardant la même définition publique D'une manière générale Tous les attributs d'une classe sont "private" Certaines méthodes sont "public", d'autres "private" Partie publique Partie privée

Exemple encapsulation public class ClientWeb { private void connect(String unServer){ /* ouvrir une connexion reseau */ } private String getDocument(){ /* Demander au serveur la page */ public String getPageWeb(String server){ this.connect(server); String tmp=this.getDocument(); return tmp; ClientWeb - void connect(String) - String getDocument() + String getPageWeb(String)

Exo encapsulation Reprendre la classe TableauCircles ajouter un attribut private qui compte le nombre d’éléments dans le tableau et passez l’attribut tableau public (c’est interdit mais c’est pour la bonne cause) modifier les fonctions addCircle, deleteCircle et AfficheCircles en conséquence Reprendre la classe MonProgTableauCircle modifier son main pour ajouter elle-meme un objet Circle dans le tableau de TableauCircle tester, expliquer les pb... Peut pas gérer correctement le nb elts dans le tableau et meme si cet attribut était public : dangereux, avec les « porcs de la programmation » que sont les humains… conclusion : protégeons nos données! Encapsulons! (référence au cours AGP sur le test-driven programming : « Malheureusement, pour moi en tout cas (et pas seulement pour moi), les tests vont à l’encontre de la nature humaine. Quand on lâche le porc qu’on a en soi, on s’aperçoit qu’on est capable de programmer sans tests. Ce n’est qu’au bout d’un moment que notre côté rationnel regagne le dessus, et qu’on commence à écrire des tests. […] la programmation en binômes réduit la probabilité que les deux partenaires lâchent leur porc respectif au même moment. »)

Surcharge de méthode La surcharge (overloading) permet à plusieurs méthodes ou constructeurs de partager le même nom. Pour que deux méthodes soient en surcharge il faut qu'elles aient le même nom, mais une signature différente (paramètres de la méthode)

Surcharge exemple class Point { private double x,y; public Point (){ this.x=0.0; this.y=0.0;} public Point (double x, double y){this.x=x; this.y=y} //Calcule la distance entre moi et un autre point public double distance(Point autre){ double dx=this.x-autre.getX(); double dy=this.y-autre.getY(); return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et une autre coordonnée public double distance(double x, double y){ double dx=this.x-x; double dy=this.y-y; public double distance(int x, int y){ double dx=this.x-(double)x; double dy=this.y-(double)y; //Calcule la distance entre moi et l'origine public double distance(){ return Math.sqrt(x*x+y*y);}}

Surcharge exemple Appel Quand une méthode est appelée, le nombre et le type des arguments permettent de définir la signature de la méthode qui sera invoquée. Point p1=new Point(); Point p2=new Point(20.0, 30.0); p2.distance(p1); p2.distance(50.0, 60.0); p2.distance(50, 60); p2.distance();

Passage de paramètres dans les méthodes Le mode de passage des paramètres dans les méthodes dépend de la nature des paramètres : par référence pour les objets les modifications faites par la méthode sont faites sur l’objet et sont donc persistantes par copie pour les types primitifs les modifications faites par la méthode sont faites sur la copie et ne sont donc pas visibles par l’appelante public class C {//à taper , tester, valider!! public void methode1(int i, StringBuffer s) { i++; s.append("d");} public void methode2() { int i = 0; StringBuffer s = new StringBuffer("abc"); methode1(i, s); System.out.println("i=" + i + ", s=" + s); // i=0, s=abcd }

découverte de la méthode toString() Ecrire une classe Patient avec des attributs String nom et prénom Ecrire une classe Client avec une méthode main avec une variable unPatient (Paul Durand) que donne la ligne System.out.println(unPatient); lancer, conclusion? Voir la documentation sur println! Ajouter une méthode dans la classe Patient public String toString() qui retourne une chaine comportant nom et prénom. Relancer le client. Conclusion? Premier essai, affiche l’adresse memoire de l ’objet (className@Ox…). Dur à expliquer sans avoir fait l’héritage : méthode println (Object)!!! + Utilisation du toString de la classe Object Second essai, affiche le résultat de toString => System.out.println fait automatiquement et implicitement un appel à toString (de la classe si existe, de Object sinon)