Introduction à la programmation objet avec java

Slides:



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

Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 8 Langage HTML.
Sérialisation des objets
Le mécanisme des exceptions
Au programme du jour …. Ce que vous navez pas encore vu Constantes et variables de classe Main et Tests Utilisation de lAPI Existence des packages Existence.
Au programme du jour …. Introduction à lhéritage Un concept important de la programmation objet Livraison de code Organisation des répertoires et packages.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Communication par diffusion : Multicast Clientn Serveur Client1 Client2 Gr.
Les Sockets et Java Cours Harmonisation Anne-Marie Déry.
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
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.
Approfondissement du langage
Introduction à Java - les paquetages -
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Programmer en JAVA par Tama
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance

1 Le mécanisme des exceptions Qu'est-ce qu'une exception? Comment définir et signaler des exceptions? Comment récupérer des exceptions?
Traitement des erreurs en Java
Principes de programmation (suite)
COURS DE PROGRAMMATION ORIENTEE OBJET :
Récursivité.
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.
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Système d’Exploitation
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 5 – Héritage, Interfaces et Listes génériques.
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 au paradigme orienté-objet (suite)
Gestion et levée dexception. Une exception est un message envoyé par une méthode à une autre méthode. La méthode qui la reçoit a le choix de soccuper.
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
COURS DE PROGRAMMATION ORIENTEE OBJET :
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
1 Fichers Binaires, Accès Direct et Objets. 2 Données binaires. Il s'agit ici de lire et écrire des données binaires par opposition à du texte. Pour ce.
LIFI-Java 2004 Séance du Mercredi 22 sept. Cours 3.
La notion de type revisitée en POO
Java : Exceptions H Batatia. 5/03/2004Java12: H.Batatia2 Exemple 1 public class Bonjour { public static void main(String[] args) { System.out.println("Bonjour.
11/04/ L'héritage Cours 7 Cours 7.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
Créer des packages.
Cours Les flux ou streams. Cours 162 Flux : objet possédant des méthodes capables de lire ou écrire des flots d’octets sur tout support (mémoire,
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique
12/04/ Les exceptions Cours 11 Cours 11.
Entrées / Sorties.
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.
Les sockets.
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.
Schéma de conception Factory Method Exemple Sylvain Giroux.
C# de plus près.  Ce sont globalement les mêmes que Java : ◦ Int(int16, int32), float, double, bool,…  Les classe « communes » sont également les mêmes.
Cours du 5 novembre.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Héritage Conception par Objet et programmation Java
Traitement des erreurs en Java: les exceptions
Architecture Client/Serveur
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Transcription de la présentation:

Introduction à la programmation objet avec java

SOMMAIRE Packages, Visibilités (15mn) les exceptions (50mn) java.io: entrées/sorties fichiers (15mn) java.net: entrées/sorties réseaux (20mn)

Partie 1 Packages, Visibilités

Les packages Un package regroupe un ensemble de classes sous un même espace de nommage L'intérêt est de regrouper les classes par thème, lien logique, dépendance… un package équivaut à un répertoire contenant des fichiers classes un package peut contenir des sous-packages pour utiliser des classes contenues dans un package, il faut soit : utiliser leur nom long package.souspackage.classe utiliser la clause import (avec ou sans « * ») le * n ’est pas récursif !

Packages personnalisés L'instruction package indique à quel package appartient la ou les classe(s) du fichier. package doit être la première instruction du fichier source Par défaut (si pas d'instruction package dans le fichier) une classe appartient au package anonyme. Exemple : package forme; class Circle { double x, y, r; void Circle(double x, double y, double r) { this.x = x; this.y = y; this.r = r; } ...

Packages personnalisés L'arborescence des répertoires contenant les classes doit être identique à l'arborescence des packages les noms des packages/répertoires sont case sensitifs par defaut le package anonyme est le repertoire courant Une classe Circle appartenant au package Forme.2D doit se trouver dans le fichier Forme/2D/Circle.class Le compilateur sait créer automatiquement les sous-répertoires pour y placer les fichiers classes Les répertoires contenant les packages doivent être dans la variable d'environnement CLASSPATH. Package Forme; ... Package Forme.2D; ... Package Forme.3D; ... packages sources répertoires

Rappel: Principe d’encapsulation message Méthodes comportement Attributs état Interface = partie publique Un objet est composé de 2 parties : partie publique : opérations qu'on peut faire dessus partie privée : partie interne (intime) = données sensibles de l'objet (les attributs et les autres méthodes) Les utilisateurs de l'objet ne voient (cad ne peuvent utiliser et ceci est contrôlé par le compilateur) que la partie publique (qui est un ensemble de méthodes)

Encapsulation & Visibilité Mots clés utilisable pour gérer les droits d’accès pour un membre (variable ou méthode) : public visible par toutes les autres méthodes à l’intérieur de l’objet ou à l’extérieur. protected visible uniquement dans sa classe ou sous classe (et dans le package) private private sera visible uniquement dans sa classe. <sans> visible uniquement dans le package en cours - Equivalent à public mais pour le package

Encapsulation & Visibilité class c1 { public int A; protected int B; int C; private int D; } Package P1 Package P2 class c4 extends c1 { ... } class c2 extends c1 { ... } class c3 { ... } class c5 { ... } A B C D Accessible par c2 o o o - Accessible par c3 o o o - Accessible par c4 o o - - Accessible par c5 o - - -

Partie 2 Les exceptions Définition Traiter une exception Types d'exceptions Méthodes de la classe Exception Propager une exception Définir ses classe d'Exception

Les exceptions Comment peut t’on gérer les erreurs ? Etablir une convention sur le code retour par exemple : 0 ou !0 en C (qui est ok?) renvoyer un booleen ou un String ou autre positionner la valeur d’une variable globale les shells Unix (et C) font ca : “errno” en Java on pourait utiliser un champs static lancer (lever) une exception, l’attraper ailleurs dans le programme et faire une action corrective Java offre la possibilité des exceptions une manière de gérer les erreurs plus orientée objet plus puissant et plus flexible que des return Une exception correspond à un événement anormal ou inattendu mots clés : try, catch, throw, throws, finally

Les exceptions Elles permettent de séparer un bloc d'instructions de la gestion des erreurs pouvant survenir dans ce bloc. Format: try { // Code pouvant lever des Exception // (exemple : ouverture de fichier) } catch (Exception e) { // Gestion des Exceptions // on ecrit ici le code pour recupérer le programme // malgré cette erreur // on peut se contenter d’afficher un message et // poursuivre le programme

Les exceptions Principe d’utilisation: Emetteur: code où il faut anticiper un problème: détecter l’erreur, probablement avec un if … créer une nouvelle Exception et la lancer (throw ) ou laisser la JVM détecter l’erreur, créer et lancer une Exception Recepteur: code dans l’appelant (quelque part dans la pile d’appel) tenter un « try », en espérant que ca marche comme prévu (ecrire le code comme si tout marchait) se préparer à attraper (catch) une Exception (et recoller les morceaux si nécessaire!)

Les exceptions Une exception est toujours une instance d’une classe fille de Throwable java.lang.Error: Erreur fatale erreur qui va entrainer la fin du programme à ne pas gérer (inutile) java.lang.Exception : erreur que l’on peut traiter sous Exception, il y a par exemple IOException qui n’est pas une RuntimeException java.lang. RuntimeException: erreur d'exécution erreurs comme la division par zéro, débordement…

Traiter les exceptions Quant une exception est lancée, toutes ou une partie des instructions suivantes sont ignorées. La levée d'une exception provoque une remontée dans l'appel des méthodes jusqu'à ce qu'un bloc catch acceptant cette exception soit trouvé Si aucun bloc catch n'est trouvé, l'exception est capturée par l'interpréteur (JVM) qui l’affiche et le programme s'arrête. Un bloc optionnel finally peut-être posé à la suite des catch. Son contenu sera exécuté qu’il ait eu une exception ou pas. Notamment après un catch ou après un break, un continue ou un return dans le bloc try

Les exceptions (3) Exemple de séquencement : 1 2 4 6 7 5 8 3 Object getContent() { try openConnection(); } catch(IOException e) { ... finaly { 1 void openConnection() throws IOException { openSocket(); sendRequest(); receiveResponse(); } 2 4 6 7 5 void sendRequest() throws IOException { write(header); write(body); //ERREUR } 8 3

Exemple : try Exécution : int[] tableau = new int[30] ; // Initilialisation du tableau avec une boucle infinie try { for (int i = 0 ; /* Tant que vrai */; i ++) tableau[i] = i ; } catch (ArrayIndexOutOfBoundsException e) { // ou e est une instance de la classe // ArrayIndexOutOfBoundsException System.out.println (e + “ : Erreur : dépassement d’indice : ” + e.getMessage ( ) ) ; // Les instructions suivantes sont exécutées System.out.println (“Taille du tableau : ” + tableau.length) ; System.out.println (“Fin”) ; Exécution : Java.lang.ArrayIndexOutOfBoundsException : Erreur : dépassement d’indice : null Taille du tableau : 30 Fin

Exemple : finally Programme : Exécution si max>30: int[] tableau = new int[30] ; // Initilialisation du tableau avec // une boucle infinie d’où ArrayIndexOutOfBoundsException try { for (int i = 0 ; i<max; i ++) tableau[i] = i ; } catch (ArrayIndexOutOfBoundsException e) { System.out.println ( “Erreur : dépassement d’indice” ) ; finally { System.out.println (“Taille du tableau : ” + tableau.length) ; Exécution si max>30: Erreur : dépassement d’indice Taille du tableau : 30 Exécution si max=30: Taille du tableau : 30

Traiter plusieurs exceptions Un même bloc peut générer plusieurs types d’exception. Plusieurs blocs catch peuvent co-exister : try { instructions pouvant générer une ou plusieurs exceptions ; } catch (MonException1 e) { … catch (MonException2 e) {

Throw: lancer une exception Il est possible de lancer et propager une exception Mot clef throw qui permet lancer une instance d’exception sur une instruction donnée void Stock ( ) throws PlusDeStockException { if (Quantite == 0) throw new PlusDeStockException (“Je n’ai plus de stock pour l’article ” + Designation) ; return (Quantite) ; } on peut aussi lancer les exceptions natives de l’API Java si l ’exception ne dérive pas de RuntimeException, on est obligé de la déclarer dans l'entête: Mot clef throws dans l’entete de la fonction on peut en déclarer plusieurs, séparés par des virgules

Définir une exception Les exceptions héritent toutes de la classe Exception définie dans java.lang. On peut définir une exception personnalisé en l’héritant de cette classe Elle peut contenir deux constructeurs qui appellent à l’aide du mot clef super le constructeur de la classe Exception. La String passée au 2ième constructeur est obtenue lors d’une exception (déclenchement) par la méthode getMessage définie dans la classe Exception Exemple : class MonException extends Exception { public MonException ( ) { super ( ) ; } public MonException ( String S ) { super ( S ) ; On peut évidemment dériver MonException en Sous Exceptions

Les exceptions : résumé Les exceptions de manière générale doivent être traitées Traitement des exceptions : Dans le bloc d’instructions en cours avec try, catch, [finally] En répercutant l’exception dans la méthode appelante en ajoutant à la suite de la déclaration de la méthode en cours le mot clef throws Le traitement des exceptions est identique pour une exception native ou une exception personnalisée

Entrées/sorties fichiers (java.io) Partie 3 Entrées/sorties fichiers (java.io)

Rappel : Les core API Equivalent des librairies standards de C/C++: java.lang : Types de bases, Threads, Exception, Math, ... java.util : Hashtable, Vector, Stack, Date, ... java.applet java.awt : Interface graphique portable java.io : accès aux i/o par flux (fichiers, stdin, stdout,..) java.net : Socket (UDP, TCP, multicast), URL, ... java.lang.reflect : introspection sur les classes et les objets java.beans : composants logiciels java.sql (JDBC) : accès homogène aux bases de données java.security : signature, cryptographie, authentification

Le modèle des Stream Un stream doit être vu comme un tuyau Données entrantes Données sortantes Programme Un stream doit être vu comme un tuyau la data peut etre de type characters, lines, bytes, objects,… les Streams se connectent à des fichiers , des terminaux, des chaines de caractères, le réseau, … utilise toujours les même méthodes : read, write (polymorphisme)

Les API java: java.io.* ByteArrayInputStream BufferedInputStream Tout ce qu’il faut pour lire ByteArrayInputStream BufferedInputStream FileInputStream DataInputStream FilterInputStream LineNumberInputStream InputStream PipedInputStream PushbackInputStream SequenceInputStream File StringBufferInputStream Object Accès en R/W et positionnement RandomAccessFile ByteArrayOutputStream OutputStream BufferedOutputStream FileOutputStream DataOutputStream FilterOutputStream PrintStream Tout ce qu’il faut pour écrire PipedOutputStream

Les API java: java.io.File Information sur les fichiers (taille, chemin..) Constructeurs File(String path) ou (String path, String name) ou (File dir, String name) Methods boolean exists(), isFile(), isDirectory(), canRead(), canWrite(); long length(), lastModified(); boolean delete(), mkdir(), mkdirs(), renameTo(File dest); String getName(), getParent(), getPath(), getAbsolutePath() : retourne le nom du fichier, le nom du répertoire père

Les API java: java.io.File Cette classe fournie une description plateforme-independante des fichiers et des répertoires. File f = new File("/etc/passwd"); System.out.println(f.exists()); // --> true System.out.println(f.canRead()); // --> true System.out.println(f.canWrite()); // --> false System.out.println(f.getLength()); // --> 11345 File d = new File("/etc/"); System.out.println(d.isDirectory()); // --> true String[] files = d.list(); for(int i=0; i < files.length; i++) System.out.println(files[i]);

Les API java: java.io.File(Input|Output)Stream Ces classes permettent d'accèder en lecture et en écriture à un fichier. FileInputStream fis = new FileInputStream("source.txt"); byte[] data = new byte[fis.available()]; fis.read(data); fis.close(); FileOutputStream fos = new FileOutputStream("cible.txt"); fos.write(data); fos.close();

Les API java: java.io.Data(Input|Output)Stream Ces classes permettent de lire et d'écrire des types primitifs et des lignes sur des flux. FileInputStream fis = new FileInputStream("source.dat"); DataInputStream dis = new DataInputStream(fis); int i = dis.readInt(); double d = dis.readDouble(); String s = dis.readLine(); FileOutputStream fos = new FileOutputStream("cible.dat"); DataOutputStream dos = new DataOutputStream(fos); dos.writeInt(123); dos.writeDouble(123.456); dos.writeChars("Une chaine");

Les API java: java.io.PrintStream Cette classe permet de manipuler un OutputStream au travers des méthode print() et println(). PrintStream ps = new PrintStream(new FileOutputStream("cible.txt")); ps.println("Une ligne"); ps.println(123); ps.print("Une autre "); ps.print("ligne"); ps.flush(); ps.close();

Lire au clavier import java.io.*; try { InputStreamReader isr = new InputStreamReader (System.in); BufferedReader br = new BufferedReader (isr); String ligne = br.readLine(); } catch (IOException e) {…}

Entrées/sorties réseaux (java.net) Partie 4 Entrées/sorties réseaux (java.net)

Entrées/sorties réseaux (java.net) URLConnection DatagramPacket DatagramSocket InetAddress Object ServerSocket Socket URL URLConnection URLEncoder

Socket Java gère les protocoles UDP et TCP Requis coté Serveur: Attente d’une connexion cliente : Utilisation d’un port local sur lequel les connexions sont attendues Requis coté Client: Connexion à un serveur donné : Connaissance du nom ou de l’adresse IP du serveur Connaissance du port ouvert par le serveur (+ allocation dynamique par le système d’un port sur le client) La communication est ensuite bi-directionnelle Client Code Server Code Socket P O R T P O R T Server Socket

Class java.net.InetAddress Class Methods InetAddress[] getAllByName(String host) InetAddress getByName(String host) InetAddress getLocalHost() Instance Methods byte[] getAddress() String getHostAddress() String getHostName() boolean isMulticastAddress() boolean equals(obj) int hashCode() String toString()

InetAddress : exemple // Find out the IP name and address of the machine on // which this is running. import java.net.*; public class WhereAmI { public static void main( String[] argv ) { try { System.out.println(InetAddress.getLocalHost()); } catch(UnknownHostException e) { System.out.println(e); }}

TCP: java.net.ServerSocket Cette classe implémente une socket TCP coté serveur. int port_d_ecoute = 1234; ServerSocket socket_d_ecoute = new ServerSocket(port_d_ecoute); while(true) { Socket socket_de_connexion = socket_d_ecoute.accept(); Traitement(socket_de_connexion); } void Traitement(Socket s){ PrintStream ps = new PrintStream(s.getOutputStream()); DataInputStream dis = new DataInputStream(s.getInputStream()); ps.println(”hello"); String line = dis.readLine(); System.out.println(line);

TCP: java.net.Socket Cette classe implémente une socket TCP coté client. String serveur = "www.serveur.fr"; int port = 80; Socket s = new Socket(serveur, port); PrintStream ps = new PrintStream(s.getOutputStream()); DataInputStream dis = new DataInputStream(s.getInputStream()); ps.println("GET /index.html"); String line; while((line = dis.readLine()) != null) System.out.println(line);

Lecture / Ecriture Tout socket possède un flux de lecture et un flux d’écriture: java.io.Socket :: getInputStream ( ) java.io.Socket :: getOutputStream ( ) utiliser les classes suivantes pour y accéder: java.io.BufferedReader BufferedReader ( Reader in ) où Reader est remplacé par la classe java.io.InputStream java.io.BufferedWriter BufferedWriter ( Writer out ) où Writer est remplacé par la classe java.io.OutputStream ( )

Lecture / Ecriture Lecture Ecriture BufferedReader::readLine ( ) throws IOException Ecriture BufferedWriter::write (String msg) throws IOException BufferedWriter::flush ( ) throws IOException

Socket TCP: résumé Ouverture d’une socket : Fermeture des sockets: Serveur : java.net.ServerSocket ServerSocket ( int port ) throws IOException Socket accept() throws IOException Client : java.net.Socket Socket ( String Host, int port ) throws UnknownHostException, IOException où Host peut être un nom de machine “serveur” ou une Adresse IP “194.167.106.245” Fermeture des sockets: Socket::close ( ) throws IOException ServerSocket::close ( ) throws IOException il est recommandé de vider et fermer les buffers de lecture et d’écriture avant !

UDP: java.net.DatagramSocket(1) Cette classe implémente une socket UDP // Client Byte[] data = "un message".getBytes(); InetAddress addr = InetAddress.getByName("www.site.fr"); DatagramPacket packet = new DatagramPacket(data, data.length, addr, 1234); DatagramSocket ds = new DatagramSocket(); ds.send(packet); ds.close();

UDP: java.net.DatagramSocket(2) // Serveur DatagramSocket ds = new DatagramSocket(1234); while(true) { DatagramPacket packet = new DatagramPacket(new byte[1024], 1024); s.receive(packet); System.out.println("Message: " + packet.getData()); }

java.net.URL URL url = new URL("http://www.site.fr/index.html"); DataInputStream dis = new DataInputStream(url.openStream()); String line; while ((line = dis.readLine()) != null) System.out.println(line);