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.

Slides:



Advertisements
Présentations similaires
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Advertisements

Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
JAV - TD 6 Structures de données JAVA
Stéphane Frénot - - Dpt Télécommunications IJA20 JAVA Le cœur du langage.
JAV – TD 3 bibliothèques standards composition
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
IJA - TD 2 Bases du langage
Programmation orientée objet
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.
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Programmation objet La base.
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.
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 7 IJA Les interfaces graphiques JAVA.
Tableaux et Pointeurs Chaînes de Caractères Programmation Impérative II.
Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 1 TD 6 IJA Structures de données JAVA.
1- Introduction 1ère partie Le langage SQL 2- Connexion 3- Structure & Contenu 4- Requêtes.
1 Programmation en C++ Fonctions ● Déclaration et définition de fonctions ● Arguments ● Surcharge ● Arguments optionnels ● Fonctions constantes ● Fonctions.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Fonctions ● Namespace ● Tests ● Boucles ● Pointeurs, références.
1 Programmation en C++ C++ de base ● Programme C++ ● Variables, objets, types ● Types et opérations fondamentales ● Tests ● Boucles ● Pointeurs, références.
1 Observer le paramétrage d’un réseau. 2 Dans notre réseau téléphonique habituel, les postes, reliés à un auto-commutateur... …peuvent dialoguer, car.
Traitement d'images en Java avec JAI
Tableaux en C Mardi 2/05.
Présentation de Java 2006 INSA lyon
JAVA.
Ajouter le code dans une page html
Communication client-serveur
Les tableaux différencier les variables simples des variables indicées (ordonnées et numérotées) un identificateur unique désigne un ensemble, une collection.
Modèle objet : les classes
Notions de base de programmation et Objets
java : l'héritage (rappel)
Environnement de développement des BD
Les Instructions Itératives (Les Boucles)
Introduction au Langage Pascal
Pas de variable globale
Les notions de classe et d'objet
Pointeurs et langage C.
JavaScript.
Algorithmique et programmation de modèles numériques
Principes de programmation (suite)
Algorithmique Langage C
MOUTON Marielle - DUMETZ François - LEVECQUE Alain
Langages de programmation TP7
Semaine 11 Les pointeurs (suite)
Les fonctions.
Programmation en C++ Fonctions
Session 1 31 mai 2017 Plateforme ICONICS Justine Guégan
SIF-1053 Architecture de ordinateurs
Programmation en C++ Fonctions
Programmation en C++ C++ de base
Structure D’une Base De Données Relationnelle
Modélisation avec UML 2.0 Partie II Diagramme de classes.
Programmation Orientée Objet C# El Akel Bouchra ISMONTIC Tanger 2013/2014.
Eléments de base du langage C
Bases de données sous Access. Initiation aux bases de données  Structure d’une base de données.
Le Java premiers pas.
Les classes et les objets
Programmation par Objets et Java
Principes de programmation (suite)
Le langage C# : Partie 1.
STREAMS (et fichiers).
Variables et accès en Java
Analyse et programmation langage ADA
Eléments de base du langage C
TP N°6: Construction d’un Serveur Multi-Client
TP N°4 Développement d’ une application
Transcription de la présentation:

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 surcharge

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 2 Bases du langage Types dits primitifs (pas classes donc pas majuscules!) –byte : 1 octet –short : 2 octets –int : 4 octets –long : 8 octets –float : 4 octets –double : 8 octets –boolean : true false –char : 2 octets (Unicode) Opérateurs –Arithmétique : =+-*/% –Relationnels : <> = == != –Logiques : ! && || –Incréments : –Bit Wise : & | ^ ~ >> >> –Affectation : = += -= *= /= %= –Conditionnel : ?:

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 3 Bloc de programmation { } n ’importe où, mais la plupart du temps autour d’une classe ou d’une méthode Aucune instruction/déclaration en dehors d’un bloc Une variable peut être déclarée n’importe où dans un bloc. Elle possède la portée de ce bloc.

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 4 Exemples de blocs de programmation class Test2 { static { System.out.println("coucou"); } class Test3 { { System.out.println("coucou"); } class Test1 { private int i; public void fonction(){ int i=5; System.out.println("I1:"+i); { int j=10; System.out.println ("I2: "+i); } System.out.println("I3: "+j); System.out.println("I3:"+i); }

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 5 Les structures de contrôle et expressions Essentiellement les mêmes qu'en C –if, switch, for, while, do while –Fonctionnement du switch sur type primitif uniquement Constantes et booléens public static final boolean STATE_OK=true; protected static boolean myState=STATE_OK; if (MaClasse.myState){... } en C if (valeur==0){ /*Etat OK*/ } Eviter les constantes String (car ce sont des objets) (== ne fonctionne pas, il faut utiliser.equals)

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 6 Les tableaux Déclaration 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. Nb cases total - pas nb cases remplies! int e = array_of_int[50]; // Lève une ArrayIndexOutOfBoundsException

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 7 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 classes dans le kit de base (bibliothèque standard) La difficulté est de connaître leur existence

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 8 Bibliothèques standards Le Java Development Kit (JDK) comporte énormément de classes prédéfinies –plus de é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

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 9 API du JDK 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...

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 10 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 Durand Patient :String Paul String nom String prenom String getNom() Patient lesPatients[] void afficheListeNoms() ListePatients unPatient:Patient String Diagramme de classes Diagramme d’objets exemple maListe:ListePatientsunPatient:Patient nom prénom *

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 11 Durand lePatient String Paul nom prenom String getNom() laListePatients lePatient.getNom() 0x234 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);

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 12 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(); }

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 13 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;} }

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 14 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

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 15 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 Encapsulation

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 16 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; } - void connect(String) - String getDocument() + String getPageWeb(String) ClientWeb

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 17 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...

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 18 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)

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 19 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; return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et une autre coordonnée public double distance(int x, int y){ double dx=this.x-(double)x; double dy=this.y-(double)y; return Math.sqrt(dx*dx+dy*dy); } //Calcule la distance entre moi et l'origine public double distance(){ return Math.sqrt(x*x+y*y);}}

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 20 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(); 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.

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 21 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 }

Stéphane Frénot, Frederique Laforest, Frédéric Le-Mouël IJA 22 Exercice à la maison 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?