2015 - Programmation Orientée Objet en Java

Embed Size (px)

DESCRIPTION

poo

Citation preview

  • Programmation Oriente Objet en Java

    M. L. BALDE 1re Anne IPSL

  • GENERALITES

  • Cest quoi Java ? Langage orient objet dvelopp par Sun en 1990. Java est portable.

    Le compilateur Java gnre un pseudo-code (appel bytecode) excut par un interpreteur.

    ==> Langage ddi Internet grce lattrait des applets.

    Les applets sont des programmes Java encapsuls dans des pages Web et qui permettent par exemple lanimation des pages oulinteractivit entre le serveur et le client Web.

    Grande richesse des APIs proposes : interfaces graphiques, bases de donnes, rseau, ...

    Syntaxe proche de C++

  • C++ / Java C++ : langage compil

    la compilation du source permet dobtenir des instructions natives excutables. le code excutable obtenu est trs performant

    Java : langage interprt qui utilise une machine virtuelle Machine virtuelle : simulation dun ordinateur rel La compilation dun source Java permet dobtenir un code excutable, le bytecode, par la machine virtuelle Java. La machine virtuelle Java est capable de comprendre les instructions contenues dans le bytecode et de les excutereffectivement dans lenvironnement rel courant.

  • Code Java.java

    Compilateur Java pour PC

    Compilateur Java pour PowerPC

    Compilateur Java pour

    Sun Solaris

    Pseudo-code Java

    indpendantde la plate-

    forme.class

    Interprteur Java pour PC

    Interprteur Java pour PowerPC

    Interprteur Java pour

    Sun Solaris

    Java est portable

  • JVM

    Application Java

    +

    Fichiers

    .class

    Application

  • Kit de dveloppement Java (1)

    3 choix sont possibles :

    Choix 1 : Le JDK(http://www.oracle.com/technetwork/java/javase/downloads/index.html )

    rfrence pour dvelopper en Java. comporte tous les outils indispensables la ralisation etl'excution d'un programme Java totalement gratuit ne comporte pas de vritable environnement de dveloppement.

  • Kit de dveloppement Java (2)

    Choix 2 : Freeware ou shareware offrent une interface graphique au JDK des outils supplmentaires (gnrateurs d'interface...) exemples : Eclipse, NetBeans

    Choix 3 : Environnement de dveloppement professionnel trs puissants trs chers exemples:Jbuilder de Inprise (anciennement Borland) Visual J++ de Microsoft

  • SYNTAXE DE BASE

  • Syntaxe de base : les commentaires

    Les commentaires qui tiennent sur une ligne :// tout le reste de la ligne est un commentaire

    Les commentaires qui sont multilignes :/* ceci est un commentaire

    tenant sur deux lignes*/

    Les commentaires destins au systme javadoc pour la gnration dune documentation API partir du code :

    /** ceci est un commentaire spcial destin au systme JavaDoc */

  • Syntaxe de base : les identificateurs Mmes rgles de formation des identificateurs quen C. Recommandations dcriture : Java Code Conventions

    (http://www.oracle.com/technetwork/java/index.html ) Le nom dune classe ou dune interface est fait dun mot ou

    de la concatnation de plusieurs mots.Chacun commence par une majuscule : Etudiant,EtudiantBoursier, etc.

    Les noms des mthodes et des variables commencent parune minuscule.Lorsquils sont forms dune concatnation de mots, chacun,sauf le premier, commence par une majuscule : afficher,toString(), nom, numeroInscription, etc.

    Les constantes de classe (variables static final) sont critesentirement en majuscules : Integer.MAX_VALUE

  • Syntaxe de base : les types de donnes primitifs

    byte (8 bits) short (16 bits) int (32 bits) long (64 bits) float (32 bits) double (64 bits) char (16 bits)

    Possibilit de faire du casting comme en Cdouble d; int i;i = (int) d; // troncation de d en un entier

  • Syntaxe de base : Linstruction IF

    Syntaxe:if (condition)

    { instruction1} else{ instruction2}

    Exemple:

    If ( x > 0){System.out.println(positif );

    x-- ;}elseSystem.out.print(ngatif );

  • Syntaxe de base : Linstruction FORSyntaxe:

    for (initialisation; condition; expression) {

    instructions }

    Exemple:

    for (int i=0 ; i

  • Syntaxe de base : Linstruction While

    Syntaxe:while (condition)

    { instructions }

    do{ instructions }

    while (condition);

    Exemple:

    int i = 10 ;while ( i>0){

    System.out.println(i);i-- ;

    }

  • Syntaxe de base : Linstruction Switch

    Syntaxe:

    switch (expression) { case valeur1: instructions; break; case valeur2: instructions; break; ... default: instructions }

    Exemple:switch (i) {

    case 10 : System.out.println(x gale 10 ) ; break ;

    case 100 : System.out.println(x gale 100 ) ; break ;

    default : System.out.println(x est diffrent de 10 et de 100 ) ;

    }

  • CLASSES ET OBJETS EN JAVA

  • Dfinition dune classepublic class NomDeLaClasse {

    dclarations des champs (attributs, proprits)dclarations des mthodes

    }

    public class Fraction {// champspublic int num ;public int den ;// mthodespublic void afficher () {

    if (this.num % this.den == 0)System.out.println(this.num/this.den ) ;

    else System.out.println(this.num+/+this.den) ;

    }}

  • Le dsignateur (ou auto-rfrence) this

    this est une pseudo-variable qui permet : de faire rfrence lobjet courant (celui quon est entrain de dfinir). ou de dsigner ses attributs ou ses mthodes.

    this est gnralement utilis pour lever lambiguit sur unidentificateur lorsque le paramtre dune mthode porte lenom de lattribut de lobjet quil est charg de modifier.

    Exemple :void fixerNumerateur (int num) {

    this.num = num ; }

  • Utilisation dune classe

    public class FractionUtil {public static void main (String[] args) {

    Fraction f = new Fraction();f.num = 8; f.den = 5;f.afficher();

    }}

    Instanciation avec loprateur new

    Java soccupe de la destruction des objets non utiliss(mcanisme de garbage collector). pas besoin de destructeurs.

  • Exemple dapplication Java avec le JDK

    Le fichier source prend le nom de la classe quil dfinitavec lextension .java==> FractionUtil.java.

    La compilation gnre un fichier binaire Java avec lextension .class.

    javac FractionUtil.java==> FractionUtil.class

    Ce fichier peut tre excut grce un interprteur java.java FractionUtil

  • Constructeurs spcifiques

    public class Fraction {public int num, den ;

    public Fraction (int n, int d) { this.num=n; this.den=d;} public Fraction (int n) { this.num=n; this.den=1;}

    public Fraction inverser() {if (this.num == 0) return null;return new Fraction(this.den,this.num);

    }}

    Les divers constructeurs doivent avoir des signatures diffrentes (nombredarguments ou types des arguments diffrents).

  • La mthode main(1)

    Premier sous-programme excut au lancement duneapplication Java.

    Signature:public static void main (String[] args) {

    }

    Le paramtre est un tableau de chanes utilis pour lesarguments transmis partir de la ligne de commande.

  • La mthode main(2)

    Exemple avec arguments:public class Somme{

    public static void main(String[] args){int x = Integer.parseInt(args[0]);int y = Integer.parseInt(args[1]);System.out.println(la somme de +x+ et +y+ est:

    +(x+y));}

    }

    Utilisation:java Somme 12 14==> la somme de 12 et 14 est: 26

  • Entres/Sorties simplifies

  • La mthode printf

    La classe java.io.PrintStream contient une mthode printf qui fonctionne presque de la mme faon quen C.

    Exemple : int degre = 28;System.out.printf("Il fait %d degres\n", degre); // %d indicateur de format pour des entiersSystem.out.printf("Le %2$s %1$s", "Java", "langage"); // le 2$ du %2$s indique quil sagit decrire le 2nd paramtre de // susbstitution en premier sur cet exemple,// le s indique quil sagit dune chane de caractres.

    Comme en C on utilise des indicateurs de format commenantpar le symbole %. (Consulter la doc de la classe java.util.Formatter)

  • La classe java.util.Scanner

    La classe Scanner permet de lire un flux de donnes formates.

    Exemplepublic static void main(String arg[]){

    Scanner entree = new Scanner(System.in);System.out.println("Donner votre prenom et votre nom:");String prenom = entree.next(); String nom = entree.next();System.out.println("Donner votre age:");int age = entree.nextInt();entree.nextLine();System.out.println("Donner une phrase:");String phrase = entree.nextLine();System.out.printf("%s %s, %d ans, dit%s\n", prenom, nom, age, phrase);

    }

  • La classe java.util.Scanner

    Offre des mthodes pour lire un flux de donnes formates :

    int nextInt() : lecture de la prochaine valeur de type int.

    long nextLong() : lecture de la prochaine valeur de type long.

    float nextFloat() : lecture de la prochaine valeur de type float.

    double nextDouble() : lecture de la prochaine valeur de type double.

    String nextLine() : lecture de tous les caractres se prsentantdans le flux dentre jusqu une marque de fin de ligne et renvoide la chane ainsi construite. La marque de fin de ligne estconsomme, mais nest pas incorpore la chane produite.

  • La classe Scanner

    Offre aussi toute une srie de mthodes boolennes pour tester le type de la prochaine donne disponible, sans lire cettedernire :

    boolean hasNext() : Y a-t-il une donne disponible pour la lecture

    boolean hasNextLine() : Y a-t-il une ligne disponible pour la lecture

    boolean hasNextInt() : La prochaine donne lire est-elle de type int

    boolean hasNextLong() : La prochaine donne lire est-elle de type long

    boolean hasNextFloat() : La prochaine donne ` lire est-elle de type float

    boolean hasNextDouble() : La prochaine donnee `a lire est-elle de type double

  • Visibilit des champs et mthodes

    Le principe dencapsulation permet dintroduire celuide protection des attributs et mthodes.

    Les Modificateurs de visibilit en Java : public : accessible par toutes les classes. Hrit par les sousclasses. private : accessible que par les seules mthodes de sa classe. Non hrit. protected : accessible par les classes du mme package. Hrit par les sous classes. par dfaut : accessible par les classes du mme package.Hrit par les sous classes seulement si elles se trouvent dansle mme package.

  • Visiblit : exemplepublic class Etudiant {

    public String nom;private String numIns;

    public Etudiant(String nom) {this.nom = nom;

    }

    // methodes accesseurspublic String getNumIns() { return this. numIns; }public void setNumIns(String numIns) {

    if (numIns==null || numIns.length()!=11) return; this.numIns = numIns;

    }

    public void afficher(){System.out.println(etudiant :+ nom);

    }}

  • Les variables (1)

    variables dinstance : elles dterminent les attributs ou ltatdun objet donn (attributs dinstance)

    variables de classe : elles dterminent les attributs ou ltatdune classe donne (attributs de classe) variables locales : dclares et utilises dans les dfinitions demthodes.

    Syntaxe:

    Type_de_la_variable identificateur_de_la_variable;

    Exemples:

    int annee;

    String nom, prenom, adresse;

  • Les variables (2)

    class Une_Classe {dclarations des variables de classe et dinstancepublic void une_Methode (dclarations des paramtres) {

    dclarations des variables locales

    }}

  • Rfrences et objets

    Un objet doit tre considr comme accessible par rfrence.L'identificateur d'un objet dsigne une rfrence l'objet etnon l'objet lui-mme. Ce sont ces rfrences qui sont affectes ou passes commearguments lors des appels de mthodes. Exemple:

    Fraction f1, f2;f1 = new Fraction();f2 = f1;

    f1 et f2 sont des variables qui se rfrent au mme objet.Cet objet existe en un seul exemplaire mais avec deuxrfrences.

  • Les membres de classe

    Les attributs ou mthodes sont accessibles: soit via une instance de la classe: membres dinstance soit via la classe elle-mme: membres de classe oumembres statiques.

    Les membres de classe :sont introduits par le mot staticexistent en un seul exemplairesont partags par toutes les instances de la classe.

    Ils ne peuvent tre invoqus que sur la classe.

  • Attributs de classe

    Ils sont initialiss au moment du chargement de la classe.

    Ils sont modifiables par tous les objets de la classe.

    Toute modification est rpercute au niveau des autresobjets.

    Ils permettent dviter la duplication de certains types dattributs (comme les constantes) dans chaque instance.

    ExempleLattribut out est un attribut de la classe java.lang.System

    System.out.println( Salut! );

  • Les mthodes de classe

    Elles ne peuvent pas modifier des attributs dinstance. Lorsquune mthode ne manipule que des attributs (oumthodes) de classe, elle doit tre dclare statique.

    Exemples exit() est une mthode statique de la classejava.lang.System

    System.exit(); sqrt() est une mthode statique de la classe java.lang.Math

    System.out.println(Math.sqrt(100));

  • Les tableaux (1)

    Les tableaux se comportent un peu comme des objets.

    Deux syntaxes pour la dclaration:TypeDesElements[ ] NomDuTableau;

    TypeDesElements NomDuTableau[ ];

    Exemple :int[ ] tab_entiers; ou int tab_entiers[ ];String[ ] tab_chaines;

    Le type des lments du tableau peut tre une classeexistante.

  • Les tableaux (2)

    InstanciationTypeDesElements[ ] NomDuTableau = new TypeDesElements[TailleDuTableau];Exemple

    int[ ] tab_entiers = new int[15]; String[ ] chaines = new String[3];

    MatricesTypeDesElements[ ][ ] NomDuTableau; TypeDesElements NomDuTableau[ ][ ];

    Exempleint [ ][ ] matriceou int matrice [ ][ ];

  • Les tableaux (3)

    Exemple de saisie dun tableau:

    public static void main(String[] args) {

    int[] t = new int[5];

    Scanner entree = new Scanner(System.in);

    for (int i=0; i

  • Dclaration dun type numr (1/2)

    qualifieurs enum identif { identif, identif, ... identif }

    Exemples :

    public enum PointCardinal { NORD, SUD, EST, OUEST }

    public enum JourSemaine { LUNDI, MARDI, MERCREDI, JEUDI, VENDREDI, SAMEDI, DIMANCHE }

    Ces dclarations crent 2 nouveaux types publics PointCardinalet JourSemaine.

    Elles doivent tre crites dans 2 fichiers spars, respectivement nomms PointCardinal.java et JourSemaine.java.

  • Dclaration dun type numr (2/2)

    La dclaration :public enum PointCardinal { NORD, SUD, EST, OUEST }

    est presque identique :

    public class PointCardinal {public static final PointCardinal NORD = new PointCard();public static final PointCardinal SUD = new PointCard();public static final PointCardinal EST = new PointCard();public static final PointCardinal OUEST = new PointCard();

    }

    Un type numr est donc une classe dont les seulesinstances sont les valeurs du type numr.

  • La classe java.lang.Enum

    En fait, tout type numr est sous-classe de la classejava.lang.Enum.

    java.lang.Enum introduit quelques mthodes : String name(), String toString()

    Exemple :public enum PointCardinal {

    NORD, SUD, EST, OUEST;public String toString() {

    return "";}

    }

  • Type numr et switch

    Une expression de type enum peut piloter un switch :

    PointCardinal direction;...switch(direction) {

    case NORD: System.out.print(PointCardinal.NORD.name());

    break;case SUD:

    System.out.print(PointCardinal.SUD.name()); break;

    default:

    ...}

  • Type numr : Exemplepublic enum PointCardinal {

    NORD, SUD, EST, OUEST ;

    public String toString() {return "";

    }

    public static void main(String arg[]){PointCardinal direction = PointCardinal.NORD;

    javax.swing.JOptionPane.showMessageDialog(null,direction.name() + " "+ direction);

    }

    }

  • Emballage et Deballage pour les classes enveloppes

    Les donnes de types primitifs (byte, short, int, long, float, double, char et boolean), ne sont pas des objets en Java.

    A chaque type primitif, correspond une classe dite classe enveloppe : Byte, Short, Integer, Long, Float, Double, Character et Boolean.

    Chaque instance dune de ces classes se compose dune unique donne membre qui est une valeur du type primitif que linstance enveloppe.

  • Emballage et Deballage pour les classes enveloppes

    Emballage : opration consistant construire un objet enveloppant une valeur v dun type primitif

    int v;... // emballage de vInteger unInteger = new Integer(v);

    Dballage : opration inverse....// dballage de vv = unInteger.intValue();

  • Emballage et Deballage pour les classes enveloppes

    Java (depuis la version 5) permet de confondre dans lcriture une variable et lobjet du type enveloppe associ :

    l o un objet est attendu on peut mettre un type primitif

    l o un type primitif est attendu on peut mettre un objet

    Le compilateur dduit le type de la variable (par exemple int ou Integer) selon le contexte.

  • Emballage et Deballage pour les classes enveloppes

    Exemple:

    Integer n = 1;

    n = n + 5;

    String s = n.toString();

    System.out.println(s);

    if (n == 10)

    Integer n = new Integer(1);

    n est considr comme un int

    n est considr comme un objet de type Integer

    if (n.intValue() == 10)

  • La boucle for each

  • La boucle for each

    Nouvelle (Java 5) syntaxe de la boucle for pour parcourir leslments dun tableau ou dune collection.

    Exemple 1:

    // somme des elements dun tableaudouble[ ] t = {3.2, 5.3, 6.2}; double som = 0;for (double d : t)

    som += d;// d va prendre successivement les valeurs contenues dans le tableau

  • La boucle for each

    Exemple 2: affichage dune matrice.

    double[][] matrice = new double[NL][NC];...for (double[] ligne : matrice) {

    for (double x : ligne)System.out.print(x + " ");

    System.out.println();}

  • PACKAGES

  • Les packages : dfinition et utilitDfinition Un package est un ensemble de classes et d'autres packagesregroups sous un nom. C'est l'adaptation du concept de librairie ou de bibliothque.

    Utilit Servent structurer lensemble des classes et interfaces. Augmentent la lisibilit des applications en structurantlensemble des classes selon une arborescence.Faciltent la recherche de lemplacement physique des classes Empchent la confusion entre des classes de mme nom etc.

  • Les packages : gnralits

    Lors de la dfinition d'un fichier source Java, on peut prciserson appartenance un package en utilisant le mot-cl package:

    package mon_package;

    Toutes les classes dfinies dans ce fichier font ainsi partie dupackage mon_package.exemple: package formesGeo;

    Si la classe Carre se trouve dans un package formesGeo, son nom complet est formesGeo.Carre; le fichier Carre.class doit tre plac dans unrpertoire nomm formesGeo.

  • Les packages : importation

    Pour pouvoir utiliser une classe d'un package dans un autrefichier, il faut l'importer :

    import nom_du_package.nom_classe;import formesGeo.Carre;

    On peut importer toutes les classes d'un package en mmetemps:

    import nom_du_package.*;import java.io.*;

    Le package java.lang qui gre les types de donnes et leslments de base du langage est automatiquement import.

  • Les packages : compilation

    Pour compiler une classe contenant linstruction suivante, ilfaut indiquer le chemin au compilateur.

    import monPackage.ClasseImportee;

    soit : Option classpath de javacjavac classpath chemin_du_fichier MaClasse.java

    soit : Variable denvironnement CLASSPATHdoit contenir le chemin daccs au rpertoire racine du

    package.

  • Les packages : excution

    Pour excuter la commande java monPackage.MaClasse :

    soit : Se placer dans le rpertoire contenant le rpertoiremonPackage

    soit : Utiliser loption classpath de la commande java

    soit : Variable denvironnement CLASSPATHdoit contenir le chemin daccs au dossier monPackage.

  • Les packages prdfinis (1/2)

    Les API Java sont organises en deux parties :

    Java Core API : API de base implante dans tout interprteurJava. Ces classes appartiennent au package java.

    Java Standard Extension API : extensions normalises parSun/Ora au travers dinterfaces et implantes par les diteurs.Ces classes appartiennent aux packages javax et org.

    Documentation sur toutes les classes Java disponible sur le siteofficiel de Java :http://www.oracle.com/technetwork/java/index.html

  • Les packages prdfinis (2/2)

    Les classes sont regroupes par thmes dans des packages. Exemples :

    java.lang : types de donnes et lments de base du langage (classesObject, String, Boolean, Integer, Float, Math, System (fonctionssystme), Runtime (mmoire, processus), etc.) java.util: structures de donnes et utilitaires (Dates, Collections, etc.) java.io: bibliothque des entres / sorties, fichiers. java.net: bibliothque rseau java.awt: librairie graphique java.applet: librairie des applets. java.security: scurit (contrle daccs, etc.) java.rmi: applications distribues. java.sql: acces aux BD (JDBC)

  • EXCEPTIONS

  • Les exceptions (1/7)

    Une exception est un signal qui indique qu'un vnement exceptionnelcomme une erreur est survenue au cours de lexcution dun programme :

    FileNotFoundException survient lorsquon tente douvrir un fichierinexistant IOException survient lorsquon fait une lecture incorrecte, lorsquunfichier ne peut tre ferm, etc.

    Java permet de grer les erreurs par exception, i.e. de prvoir dans sonapplication des blocs de code o sera traite systmatiquement, telle outelle condition d'erreur.

    Une exception est un objet de la classe java.lang.Exception.

    Pour les grer, on utilise l'instruction try.

  • Les exceptions (2/7)

    try {// bloc d'instructions protger

    }

    catch ( Exception e) {// traitement de l'exception

    }

    finally {// excuter quelque soit la faon dont on sort du try

    }

  • Les exceptions (3/7)

    Un bloc d'instructions try permet de regrouper une ou plusieursinstructions de programme (appel de mthode, instructions de contrle,etc.) o des exceptions peuvent se produire et tre traites.

    Un bloc try est suivi d'instructions catch et finally.

    catch spcifie le traitement associ aux exceptions, i.e ce que l'on fait siune exception se produit (afficher un message d'erreur par exemple).

    finally est excut inconditionnellement, quelle que soit la faon dont onsort du bloc try (pour fermer par exemple un fichier ouvert dans le bloc try).

  • Les exceptions (4/7)

    import java.io.FileReader;public class lectureFichier {

    public static void main(String[] args) {try{

    FileReader f=new FileReader(fic.txt);System.out.println(Le fichier existe !);f.close();System.out.println(Le fichier a ete ferme !);

    }catch(FileNotFoundException fe) {

    System.out.println(Fichier inexistant !);}catch(IOException ie) {

    System.out.println(Erreur de fermeture !);}

    }}

  • Les exceptions (5/7)Chaque mthode susceptible de gnrer une exception qui lui est propredoit la dclarer dans son en-tte. On utilise l'instruction throws pour cela :

    public class Pile {final int taille_max = 100 ;private int sommet ;private int[ ] elements ;

    public void empiler (int x) throws ErreurPilePleine {if (sommet == taille_max)

    throw new ErreurPilePleine()else elements[++sommet] = x ;

    }}

    class ErreurPilePleine extends java.lang.Exception {

    ErreurPilePleine(){ System.out.println(Pile Pleine);}

    }

  • Les exceptions (6/7)Controle de saisie avant de calculer la factorielle dun nombre :

    public static void main(String arg[]){String s = null;do

    try {s = JOptionPane.showInputDialog("Entrez un nbre: ");if (s != null) {

    long n = Long.parseLong(s);long factN = factorielle(n);JOptionPane.showMessageDialog(null, n + "! = "+

    factN);}

    }catch(NumberFormatException ex){

    JOptionPane.showMessageDialog(null, s + " n'est pas un entier");

    }

  • Les exceptions (7/7)

    Controle de saisie avant de calculer la factorielle dun nombre :

    finally {reponse = JOptionPane.showConfirmDialog(null, "Voulez-

    vous quitter ?");}

    while (reponse == JOptionPane.NO_OPTION);}

    // methode factoriellepublic static long factorielle(long n){if (n

  • La classe Scanner et InputMismatchException

    Scanner gnre une exception de type InputMismatchExceptionen cas derreur de saisie. Cela permet de contrler la saisie:

    java.util.Scanner entree = new java.util.Scanner(System.in);int x = 0;for ( ; ;) {

    System.out.print("Donnez un entier x: ");try{

    x = entree.nextInt(); break; }catch (java.util.InputMismatchException ime) {

    entree.nextLine();System.out.print("Erreur - Recommencez"); }

    }System.out.print("x = " + x);...

  • HERITAGE

  • Lhritage

    Lhritage permet de dfinir une nouvelle classe partird'une (ou plusieurs) classe(s) existante(s).

    Les classes sont souvent organises en hirarchies;toutes les classes Java hritent de la classejava.lang.Object.

    Java nautorise que lhritage simple.

    Lhritage multiple est remplac par la notion dinterface.

  • Lhritage simple : exempleEtudiant

    +nom : StringnumIns : String

    setNumIns()getNumIns()

    afficher()

    EtudiantBoursier

    +bourse : double

  • Lhritage simple : exemple

    public class EtudiantBoursier extends Etudiant {

    public double bourse;

    public EtudiantBoursier(String nom, double bourse) {super(nom); //appel au constructeur Etudiant(String)this.bourse = bourse;

    }public EtudiantBoursier(String nom) {

    this(nom, null); //appel au constructeur prcdant}

    public void afficher() { // redefinitionSystem.out.println(etudiant :+ this.nom);System.out.println(bourse :+ this.bourse);

    }}

  • La pseudo-variable super

    En faisant hriter une classe dune autre, on peutdfinir une mthode dont lidentificateur est le mmeque celui de sa classe mre.

    masquage de la mthode de la classe mre.

    La pseudo-variable super permet daccder lamthode masque de la classe mre.

  • La pseudo-variable super : exemple

    Maison

    -surface : int-adresse : String

    +saSurface()+sonAdresse()

    Pice

    -surface : int-locataire : String

    +saSurface()+sonLocataire()

  • La classe Object

    Toutes les classes hritent de la classe Object qui contient certainesproprits et mthodes intressantes permettant, par exemple :

    Connatre la classe dun objet : getClass() Comparer des objets : equals() Afficher des objets : toString()

    Exemple :public class Fraction {

    public int num, den ;public Fraction (int n, int d) { this.num=n; this.den=d;} public String toString() {return this.num + / + this.den;

    }}

  • Exemple dhritage : compte et compte depargne(1/3)

    class Compte {

    private String id;private float solde;

    public Compte (String id, float depot){this.id = id;this.solde = depot;

    }public String getId (){

    return this.id;}public float getSolde (){

    return this.solde;}

    }

  • Exemple dhritage : compte et compte depargne (2/3)

    class CompteEpargne extends Compte {private float taux;private int annees;public CompteEpargne (String id, float depot, float taux){

    super (id, depot);this.taux = taux;

    }public void setAnnees (int annees){

    if (annees >= 0) this.annees = annees;}public int getAnnees(){ return this.annees; }public float getTaux(){ return this.taux; }public float getSolde (){

    float solde = super.getSolde();for (int i=0; i

  • Exemple dhritage : compte et compte depargne (3/3)

    class CalculInterets{public static void main(String arg[]){

    Compte compte1 = new Compte("A01", 100000f);CompteEpargne compte2 = new CompteEpargne("E99", 100000f,

    0.1f);compte2.setAnnees(5);

    Compte c;String s = "L'argent qui dort ne rapporte rien:";c = compte1;s += "\n solde du compte n " + c.getId() + ":" + c.getSolde();

    c = compte2;s += "\n solde du compte n " + c.getId() + ":" + c.getSolde();javax.swing.JOptionPane.showMessageDialog(null,s);}

    }

  • Les classes abstraites (1/2)

    Elles permettent de dfinir linterface des mthodes.

    Elles contiennent au moins une mthode abstraite.

    Exemple :

    abstract class FormeGeometrique {abstract double perimetre();abstract double surface();

    }

  • Les classes abstraites (2/2)

    Une mthode abstraite est prcde du mot-cl abstract et nepossde pas de corps.

    Elles ne peuvent pas tre instancies.

    Elles doivent tre drives en sous-classes fournissant uneimplmentation toutes les mthodes abstraites.

    Elles sont dfinies par lintroduction du mot-cl abstract.

  • Les interfaces : gnralits (1/2)

    Classes abstraites dont linstanciation serait sans intrt. Ellesne peuvent donc pas tre instancies.

    Une interface Java contient une liste de mthodes abstraitesque doit implmenter une classe pour rendre un service.

    Exemple :

    public interface FormeGeometrique {public double perimetre();public double surface();

    }

  • Les interfaces : gnralits (2/2)

    Lorsquune classe implmente une interface, elle doitimplementer toutes les mthodes dfinies dans linterface.

    Une classe peut implmenter une ou plusieurs interfaces.

    Exemple :

    public class Rectangle implements FormeGeometrique {public double larg, long;...public double perimetre() {return 2*(larg+long);}public double surface() {return larg*long;}

    }

    Une inetrface peut hriter dautres interfaces (hritage simple).

  • Les interfaces : dclaration

    Une interface Java se dclare comme une classe en faisantprcder son identificateur du mot-cl interface.

    public interface UneInterface {// dclaration des champs et des mthodes

    }

    Tous les champs sont des constantes dont les modificateurssont implicitement public static final

    Toutes les mthodes sont publiques et non implmentes; ellesutilisent implicitement des modificateurs public abstract et sontsuivies dun ;.

  • Les interfaces : implmentation

    Une interface doit tre implmente par une ou plusieursclasses.

    Une classe peut implmenter une ou plusieurs interfaces.

    Lorsquune classe implmente une interface, elle doitimplementer toutes les mthodes dfinies dans linterface.

    class UneClasse implements UneInterface {

    // champs et mthodes de la classe UneClasse

    // et implmentation des mthodes de linterface UneInterface

    }

  • Les interfaces : exemple

    public interface FormeGeometrique {public double perimetre();public double surface();

    }

    public class Rectangle implements FormeGeometrique {public double larg, long;public Rectangle(double long, double larg) {

    this.long=long; this.larg=larg; }public double perimetre() {return 2*(larg+long);}public double surface() {return larg*long;}

    }

  • Les interfaces : exemple

    public class Carre implements FormeGeometrique {public double cote;public Carre(double cote) {this.cote = cote;}public double perimetre() {return 4*cote;}public double surface() {return cote*cote;}

    }public class Cercle implements FormeGeometrique {

    public final static double PI = 3.1416; public double rayon;public Cercle (double rayon) {this.rayon = rayon;}public double perimetre() {return 2*PI*rayon;}public double surface() {return PI*rayon*rayon;}public void afficher() {

    System.out.println(cercle de rayon+rayon); }}

  • Les interfaces : exemple

    public class Figures {public static void main (String[] args) {

    FormeGeometrique[] formes;formes = new FormeGeometrique[3];formes[0] = new Cercle(10);formes[1] = new Carre(4);formes[2] = new Rectangle(5,8);for (int i=0;i

  • COLLECTIONS

  • Limites des tableaux (1 /2)

    Simples programmer et peu gourmands en mmoire, les tableaux sont utiliss pour grer des ensembles dont la taille est

    connue lavance.

    Les tableaux sont inadquats pour grer une quantitimportante dinformations du mme type lorsque leur nombre

    nest pas connu lavance.

  • Limites des tableaux (2/2)

    Les tableaux ne sont pas redimensionnables.

    Linsertion dun lment au milieu dun tableau nest pas aise.

    La recherche dun lment dans un grand tableau est longue silnest pas tri.

    Les indices pour accder aux lments dun tableau doivent treentiers.

  • Collections Java La package java.util fournit un ensemble dinterfaces et de classes facilitant la manipulation de collections dobjets.

    Une collection est un objet qui sert stocker dautres objets. Interfaces sur les collections organises en deux catgories : Collection et Map.

    Collection

    Set List

    SortedSet

    Map

    SortedMap

  • Collections Java : interfaces Collection : groupe dobjets o la duplication peut tre autorise.

    Linterface Collection spcifie des mthodes comme add, remove, addAll, removeAll, contains, containsAll, size, etc.

    Set : objets collections non ordonnes et sans doublons. SortedSet est un Set tri.

    List : collections ordonnes autorisant des doublons. Chaque objet possde une position dans la squence et linterface offre des mthodes permettant laccs direct un objet donn.

    Map : tableaux associatifs (dictionnaires) permettant de retrouver une information grce un index. SortedMap est un Map tri.

  • Collections Java : implmentations

    Classes dimplmentation

    Table de Hachage

    Tableau (Vecteur)

    Arbre Liste chane

    Interfaces

    Set HashSet TreeSet

    List ArrayList LinkedList

    Map HashMap TreeMap

  • Les classes du package java. util ArrayList : pour ajouter la suite les uns des autres des lments dans un ensemble ordonn.

    LinkedList : pour insrer de nombreux lments au milieu dun ensemble ordonn.

    HashSet : pour grer un ensemble dont chaque lment doittre unique. Les performances de recherche sont amliores.

    TreeSet : pour grer un ensemble tri dobjets uniques. HashMap : pour accder aux lments dun ensemble grce une cl.

    TreeMap : pour grer un ensemble dlments tri dans lordrede leur cl daccs.

  • Collections Java : Itrateurs Les collections peuvent tre parcourues laideditrateurs : interface Iterator.

    Exemple :import java.util.*;public class test_iterateur {

    public static void main (String[] args) {Set ufrs = new TreeSet();ufrs.add(sat); ufrs.add(seg); ufrs.add(sjp);// itererIterator iter = ufrs.iterator();while (iter.hasNext()) {

    String ufr = (String) iter.next();System.out.println(ufr);

    }}

    }

  • La boucle for each et les collections

    La boucle for each permet le parcours dune instance duneclasse implmentant linterface java.util.Iterable.

    // affichage des elements dun ensembleSet ufrs = new TreeSet();ufrs.add("sat"); ufrs.add("seg"); ufrs.add("sjp"); ufrs.add("lsh");

    for (Object s : ufrs) System.out.print(s + " ");

    // s va prendre successivement les valeurs contenues dans ufrs

  • Collections Java : MapLinterface Map offre des mthodes permettantditrer sur les cls, les valeurs et sur les paires:

    Map m = new HashMap();// sur les clsfor (Iterator i = m.keySet().iterator(); i.hasNext();)

    System.out.println(i.next());// sur les valeursfor (Iterator i = m.values().iterator(); i.hasNext();)

    System.out.println(i.next());// sur les paires cl/valeurfor (Iterator i = m.EntrySet().iterator(); i.hasNext();) {

    Map.Entry e = (Map.Entry)i.next();System.out.println(e.getKey() + / + e.getValue());

    }

  • Exemple : grer un glossaire avec HashMapimport java.util.HashMap;import javax.swing.JOptionPane;

    public class Glossaire {public static void main (String arg[]){String definitionInstance = "Objet cree a partir d'une classe";String definitionCollection = "Instance d'une classe gerant un ensemble

    d'elements";String definitionSousClasse = "Classe heritant d'une autre classe";

    HashMap glossaire = new HashMap();glossaire.put("instance",definitionInstance);glossaire.put("collection",definitionCollection);glossaire.put("sous classe",definitionSousClasse);glossaire.put("classe derivee",definitionSousClasse);

  • Exemple : grer un glossaire avec HashMapwhile (true){

    String motCherche = JOptionPane.showInputDialog("Que cherchez vous ?");if (motCherche == null) System.exit(0);String definition = (String)glossaire.get(motCherche);

    if (definition != null) {JOptionPane.showMessageDialog(null, motCherche + " : " + definition, "Resultat de la recherche",JOptionPane.INFORMATION_MESSAGE);

    } else {JOptionPane.showMessageDialog(null, motCherche + " : " + "non defini", "Resultat de la recherche",JOptionPane.WARNING_MESSAGE); }

    }}

    }

  • Gnricit

  • Classes gnriques

    On peut dfinir et utiliser des classes et des mthodesgnriques.

    Exemple : grer un couple dobjets

    public class Couple{A elt1, elt2;

    Couple(A elt1, A elt2) {this.elt1 = elt1;this.elt2 = elt2;

    }

  • Classes gnriques

    public static void main(String args[]){Couple c = new Couple("Adja","20");String nom = c.elt1;Integer age1 = Integer.parseInt(c.elt2);Integer age2 = (Integer)c.elt2; // ne passe pas la compilation

    }}Principal intrt :permettre au compilateur deffectuer des contrles de type plus nombreux et plus fins.

    Cela augmente la qualit et la fiabilit des programmes.

  • Gnricit et collections

    Prsente encore plus dintrt avec lutilisation des collections.

    Toutes les interfaces et les classes collections de la bibliothque Java ont t remplaces par une nouvelle forme paramtre (depuis la version Java 5):

    Collection, Vector, Iterator, etc.

  • Gnricit et collectionsExemple 1:

    public class Ufrs{public static void main(String arg[]){

    ArrayList ufrs = new ArrayList();ufrs.add("sat");ufrs.add("seg");ufrs.add("sjp");ufrs.add("lsh");for (String ufr : ufrs)

    System.out.print(ufr + " ");System.out.println();

    }}

  • Gnricit et collectionsExemple 2 : public class Frequence {

    public static void main(String[] args) {

    Map tab = new TreeMap();

    for (String mot : args) {

    Integer freq = tab.get(mot);

    tab.put(mot, freq == null ? 1 : freq + 1);

    }

    System.out.println(tab);

    }

    }

  • Mthodes gnriques

    Les mthodes peuvent elles aussi dpendre dune liste de types paramtres.qualifieurs type-du-rsultat nom-mthode (args)

    Exemple 1:import java.util.*;

    public class MethodesGeneriques{static void ecrire(A a){

    System.out.println(a);}

    }

  • Mthodes gnriques

    public static void main(String args[]){Scanner entree = new Scanner(System.in);System.out.println("Donner votre nom:");String nom = entree.nextLine();ecrire(nom);System.out.println("Donner votre age:");int age = entree.nextInt();ecrire(age);

    }}

  • Mthodes gnriques

    Exemple 2:static void echangerGenerique(CoupleGen c){

    T tmp;tmp = c.elt1;c.elt1 = c.elt2;c.elt2 = tmp;

    }

    public static void main(String args[]){CoupleGen mots =

    new CoupleGen("club","info");echangerGenerique(mots);ecrire(mots);

    }

  • Mthodes gnriques

    class CoupleGen{

    A elt1, elt2;

    CoupleGen(A elt1, A elt2){this.elt1 = elt1;this.elt2 = elt2;

    }

    public String toString(){return "(" + elt1 + "," + elt2 + ")";

    }}

  • Mthodes avec nombre darguments variable

  • Mthodes avec nombre darguments variable

    Permet dappeler une mme mthode avec une listedarguments variable.

    Exemple 1 :public class MultiArgs {

    static void ecrireLesMots (String ... mots){for (String mot : mots)

    System.out.print(mot + " ");System.out.println();

    }public static void main(String arg[]){

    ecrireLesMots("UGB UFR SAT");ecrireLesMots("M2ITIC INFO );

    }}

  • Mthode avec nombre darguments variable

    Exemple 2 :public class MultiArgs {

    static double moyenne(String nom, Number... notes) {int nombre = notes.length;if (nombre > 0) {

    double somme = 0;for (Number x : notes)

    somme += x.doubleValue();return somme / nombre;

    }return -1;}public static void main(String arg[]){

    double moy = moyenne("Amy",10, 12.4, 18);System.out.println(moy);

    }}

  • Importation de membres statiques

  • Importation de membres statiques

    Classiquement, on nimporte que des noms de classes. On peut aussi importer des membres statiques (Java 5).

    Exemple :

    import static java.lang.System.out;import static java.lang.Math.random;

    public class TestImportStatic {public static void main(String arg[]){

    out.println("voici un nb aleatoire :"+random());}

    }

  • INTERFACES GRAPHIQUES

  • Interfaces graphiques : AWT & Swing AWT (Abstract Window Toolkit)permet de crer des fentres (Frame), dutiliser : des boutons de commandes (Button),

    des zones de texte (TextField),

    des zones de liste,

    de dessiner, etc.

    lapparence de certains composants dpend de la plate-forme dexcution (utilise des objets de lenv. dexcution).

  • Interfaces graphiques : AWT & Swing Swing propose des composants indpendants de la plate-forme (crits en Java)analogues ceux de AWT JFrame,

    JButton,

    JTextField, etc.

    avancs : JTabbedPane (onglets),

    JTree (arbres), etc.

  • Ma premire application avec IHM (GUI)import java.awt.Frame;

    public class SimpleGUI

    {

    public static void main(String args[]){

    Frame cadre = new Frame(Ma premiere fenetre);

    cadre.setSize(300,200);

    cadre.setVisible(true);

    }

    }

  • Hirarchie des composants AWT

    Component

    ContainerButton

    Window Panel

    AppletFrameDialog

    FileDialog

    TextField

    JComponent

    Comp. Swing

  • Interfaces graphiques : Composants

    classe java.awt.Component

    Comportement dun objet Component :

    se dessiner (paint) dfinir / obtenir taille et position du composant (setSize, setMinimumSize, etc.) dfinir / obtenir proprits graphiques (setBackground, setForeground, setFont, etc.) tre source dvnements

  • Interfaces graphiques : Conteneurs (1 /2)

    classe java.awt.Container

    Espaces graphiques destins recevoir plusieurs composants (boutons, zones de texte, autres conteneurs ) :

    Frame,Panel, Dialog, Applet

  • Interfaces graphiques : Conteneurs (2/2)

    La mise en page dun conteneur est confie un gestionnaire qui se charge du placement des

    composants ajouts par la mthode add().

    Les panneaux (Panel) doivent tre placs dans un espace existant (autre conteneur, browser Web).

  • Interfaces graphiques : Fentres (1 /2)

    java.awt.Window : sous-classe de Container

    Possibilit dtre visible sans ncessiter dtre incluse dans un autre composant.

    Sous-classes de Window :

    java.awt.Dialog (botes de dialogue)

    java.awt.Frame (cadres)

  • Interfaces graphiques : Fentres (2/2)

    Cadre : fentre avec bord, titre et, ventuellement, menu.

    Une application contient, en gnral, un seul cadre

    utilis pour modifier la taille et la forme de lIHM.

    Bote de dialogue : fentre utilise pour afficher un message, poser une question, etc.

  • Interfaces graphiques : Exemple 1import java.awt.*;public class Fenetre extends Frame {

    public Panel p; public TextField texte; public Button bouton1, bouton2;public Fenetre() {

    super(exemple de fenetre);p = new Panel(); this.add(p);p.add( new Label(nbre a multplier par 2) );p.add( texte = new TextField(20) );p.add( bouton1 = new Button(doubler) );p.add( bouton2 = new Button(fin) );this.pack();

    }public static void main(String[] args){

    Fenetre f = new Fenetre(); f.show();}

    }

  • Interfaces graphiques : vnements Modle des vnements de Java (1.2)

    source

    couteurLutilisateur agit sur un composant

    La source notifie lvnement

    Lcouteur senregistre auprs de la source

    Objet Evt

  • Interfaces graphiques : vnementsUn vnement fait interagir trois objets :

    Lobjet source de lvnement (bouton cliqu)

    Un objet (classe ActionEvent) mmorisant lvnement (date, source, )

    Un couteur dvnement (listener) capable de traiter lvnement (senregistre en implmentant

    linterface correspondante)

  • Interfaces graphiques : types dvnements (1 /2)

    ActionListener : actions (clic sur un bouton, choix dansune liste, etc.) sur un composant.

    Linterface contient une seule mthode appele

    lorsquune action est effectue.

    void actionPerformed(ActionEvent e)

    MouseListener : vnements souris (clics)

    MouseMotionListener : mouvements de la souris

  • Interfaces graphiques : types dvnements (2/2)

    KeyListener : vnements clavier (touchepresse/relche).

    FocusListener : acquisition ou perte focus par un composant.

    WindowListener : actions sur une fentre.

  • Interfaces graphiques : Exemple 1 (suite)import java.awt.*; import java.awt.event.*;public class Fenetre extends Frame implements ActionListener{

    public Panel p; public TextField texte; public Button ...public Fenetre() {

    bouton1.addActionListener(this); // la fenetre devient ecouteurbouton2.addActionListener(this);

    }public void actionPerformed(ActionEvent e){

    if (e.getSource()==bouton1){double x = Double.parseDouble(texte.getText());

    x = 2*x; texte.setText(+x);}else if (e.getSource()==bouton2){

    this.dispose(); System.exit(0); // destruction fenetre et arret progr.}

    }public static void main(String[] args){ }

    }

  • Interfaces graphiques : Exemple 2 : Dtecter la souris

    Les vnements souris sont notifis par les mthodes suivantes de linterface MouseListener :

    o void mousePressed (MouseEvent e)o void mouseReleased (MouseEvent e)o void mouseClicked (MouseEvent e)o void mouseEntered (MouseEvent e)o void mouseExited (MouseEvent e)

    Un couteur dvnements souris senregistre par :o void addMouseListener (MouseListener l)

  • Interfaces graphiques : Exemple 2 (suite)import java.awt.*; import java.awt.event.*;

    public class CadreSensible extends Frame implements MouseListener {CadreSensible(){

    addMouseListener(this);setBounds(100, 100, 300, 200);setVisible(true);

    }

    public void mouseClicked(MouseEvent e){System.out.println("Clic en ("+ e.getX() + "," + e.getY() + ")");

    }

    public void mousePressed (MouseEvent e){}public void mouseReleased(MouseEvent e){}public void mouseEntered(MouseEvent e){}public void mouseExited(MouseEvent e){}

    public static void main(String args[]){new CadreSensible();

    }}

  • Interfaces graphiques : Gestonnaires de positionnement (1 /4)

    La disposition des composants dans un conteneur est assure par un gestionnaire de positionnement qui se charge de les placer correctement.

    Cela permet de rester indpendant de la plate-forme et dviter des calculs fastidieux.

    Le gestionnaire par dfaut est FlowLayout qui se contente de placer les composants les uns derrire les autres.

  • Interfaces graphiques : Gestonnaires de positionnement (2/4)

    Avec FlowLayout on peut utiliser un paramtre indiquant le type d'alignement utiliser :

    FlowLayout.RIGHT pour droite, FlowLayout.LEFT pour gauche, FlowLayout.CENTER pour centr qui est l'alignement par dfaut.

  • Interfaces graphiques : Gestonnaires de positionnement (3/4)

    BorderLayout permet de placer les composants en faisant rfrence une position de type gographique.

    Pour ajouter un composant, on utilisera la mthode add en prcisant la position gographique :

    North, South, East, West ou Center.

  • Interfaces graphiques : Gestonnaires de positionnement (4/4)

    GridLayout permet de placer les composants dans une grille forme de cases de mme taille.

    Chaque composant prend la taille d'une case. Le constructeur de GridLayout attend 2 paramtres : nb de lignes et nb de colonnes de la grille.

    Lors de leur ajout avec la mthode add, les composants remplissent alors la grille ligne par ligne.

  • Interfaces graphiques : Gestonnaires de positionnement

    (exemple FlowLayout)import java.awt.*;public class TestFlowLayout1 extends Frame{

    public TestFlowLayout1(){setLayout(new FlowLayout());for (int i=1; i

  • Interfaces graphiques : Gestonnaires de positionnement (exemple BorderLayout)

    public class Fenetre extends Frame {public Panel p, p_sud; public TextField texte; public Button ...

    public Fenetre() {super(exemple de fenetre);p = new Panel(new BorderLayout()); this.add(p);p.add( new Label(nbre a multplier par 2),BorderLayout.NORTH);p.add( texte = new TextField(20) ,BorderLayout.CENTER);

    p_sud=new Panel(new FlowLayout());p.add(p_sud, BorderLayout.SOUTH);

    p_sud.add( bouton1 = new Button(doubler) );p_sud.add( bouton2 = new Button(fin) );this.pack();

    }

    }

  • Interfaces graphiques : Gestonnaires de positionnement (exemple GridLayout)

    import java.awt.*;public class TestGridLayout extends Frame{

    public TestGridLayout(){setLayout(new GridLayout(3,2));for (int i=1; i

  • Interfaces graphiques : Gestonnaires de positionnement (autre exemple GridLayout)

    import java.awt.*;public class TestGridLayout1 extends Frame{public TestGridLayout1(){

    setLayout(new GridLayout(3,2));Panel p;for (int i=1; i

  • Interfaces graphiques : Composants Swing de saisie et de choix

    JTextField : champ de saisie simple (zone de texte)JPasswordField : champ de saisie pour les passwordsJTextArea : champ de saisie multiligneJButton : boutonJCheckBox : boite cocherJRadioButton : bouton radioJList : liste de valeursJComboBox : liste droulanteetc.

  • Interfaces graphiques : Composants Swing arbre et tableau

    JTree : arbre hirarchiqueJTable : tableau capable dafficher diffrents types de donnes

  • Interfaces graphiques : Composants Swing conteneurs

    JFrame : fentre avec bord et barre de titreJWindow : fentre sans dcorationJDialog : bote de dialogueJPanel : panneau videJTabbedPane : panneau ongletsJSplitPane : panneau partag (horizontalemt ou verticalemt)JScrollPane : panneau ascenseurEtc.

  • Interfaces graphiques : Composants Swing botes de dialogue

    JFileChooser : choix de fichierJOptionPane : dialogues standards : message, confirmationEtc.

  • Interfaces graphiques : Composants Swing menus

    JMenuBar : barre de menuJMenu : menuJMenuItem : lment de menuJPopupMenu : menu contextuelEtc.

  • Interfaces graphiques : Exemple Swing (1 /3)

  • Interfaces graphiques : Exemple Swing (2/3) import java.awt.*; import javax.swing.*;class Authentification {public static void main (String[] args){

    JFrame fen = new JFrame("Identification");Container p = fen.getContentPane();p.setLayout(new BorderLayout());

    JPanel p_nord = new JPanel();p.add(p_nord,BorderLayout.NORTH);p_nord.add(new JLabel("Login :"));p_nord.add(new JTextField(10));

    JPanel p_centre = new JPanel();p.add(p_centre,BorderLayout.CENTER);p_centre.add(new JLabel("Mot de passe :"));p_centre.add(new JPasswordField(10));

  • Interfaces graphiques : Exemple Swing (3/3)

    JPanel p_sud = new JPanel();p.add(p_sud,BorderLayout.SOUTH);p_sud.add(new JButton("Valider"));p_sud.add(new JButton("Annuler"));

    fen.pack();

    fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    fen.setVisible(true);} }

  • APPLETS

  • Les applets (1)

    Une applet est un programme Java interactif, prsent sur leserveur Web, qui peut tre tlcharg sur le client Web ets'excute dans une page Web.

    Elle permet d'amliorer la prsentation de cette dernire oude remplir une fonction spcifique.

    Les applets sont considres comme des objets des pagesHTML qui les contiennent.

    Les applets n'ont pas accs, comme les applications Java, toutes les ressources du systme sur lequel elles s'excutent.

  • Les applets (2)

    Pour des raisons de scurit, une applet ne peut pas:

    - lire ou crire le systme de fichiers de la machine oelle s'excute,

    - excuter des programmes,

    - communiquer avec d'autres machines, part leserveur partir duquel elle a t tlcharge.

  • Les applets (3)

    Pour pouvoir crer et excuter une applet, il faut crire deux fichiers diffrents:

    un fichier source .java et un fichier .html.

    Exemple: une applet qui affiche "Bonjour Bonjour.java Bonjour.html

  • Les applets (4)Bonjour.java:

    import java.awt.*;import javax.swing.*;

    public class Bonjour extends JApplet{

    public void init {Container p = getContentPane();p.setLayout(new FlowLayout());Jlabel label = new Jlabel(Bonjour!);p.add(label);

    }}

  • Les applets (5)

    Bonjour.html

    Une applet simple

    Voici le rsultat :

  • La classe JApplet

    Se trouve dans le package javax.swing

    Hrite de la classe java.awt.Applet.

    La classe Applet tend la classe Panel qui tend laclasse Container.

    Les objets JApplet sont des conteneurs.

  • La classe Applet (1)

    La classe Applet est une classe drive de la classe java.awt.Component qui dcrit les objets graphiques.

    Elle surcharge des mthodes de cette classe:

    - paint(), update() (pour dessiner et afficher dans la fentrede l'applet)

    - et handleEvent() (gestion d'vnements relatifs la souriset au clavier).

  • La classe Applet (2)

    Elle contient aussi quatre mthodes pour traiter les vnementscorrespondant la vie de l'applet:

    init(): appele au moment du chargement de l'applet

    start(): pour dmarrer l'excution de l'applet

    stop(): pour arrter l'excution de l'applet

    destroy(): pour librer les ressources ou interrompre certaines activits (animation par exemple)

  • La balise HTML Applet (1)

    Elle permet d'introduire une applet dans un document HTML. Lorsque le browser rencontre la balise Applet, il fait charger le bytecode (fichier .class) depuis le serveur Web.

    On peut passer des arguments une applet en utilisant la baliseHTML PARAM et la mthode getParameter() de Applet.

  • Applet avec paramtres (1)

    import java.awt.*;import java.applet.*;

    public class Bonjour extends Applet{

    String s1, s2;public void init() {

    s1 = getParameter("param1");s2 = getParameter("param2");

    }public void paint (Graphics g){

    g.drawString(s1 + " " + s2, 50, 20);}

    }

  • Applet avec paramtres (2)

    ...

  • LA PERSISTANCE EN JAVA

  • La persistance des donnes

    Fait dexister dans le temps pour un objet.

    Capacit dun objet rester en ltat lorsquil est sauvegard, puis recharg plus tard.

    Traite des aspects de stockage et de rcupration des donnes applicatives.

  • La persistance en Java

    JDBC: API Java permettant laccs aux SGBDR. Difficile utiliser.

    Srialisation.

    Mapping objet-relationnel (ORM).

  • Srialisation (1 /2)

    Sauvegarde de ltat dun objet en mmoire sur un flux de donnes (vers un fichier, par exemple).

    Ce concept permettra aussi de reconstruire, ultrieurement, l'objet en mmoire l'identique de ce qu'il pouvait tre initialement partir de la sauvegarde: dsrialisation.

  • Srialisation (2/2)

    Mthode simple et transparente.

    Pour quun objet Java soit srialisable, il faut quil implmente linterface java.io.Serializable et possder des attributs srialisables.

    Mcanisme rarement utilis car pas de langage de requtes, ni dinfrastructure professionnelle.

  • Mapping objet- relationnel

    Laccs aux donnes est dlgu un outil externe : Frameworks : Hibernate, Toplink. APIs: JDO, JPA.

    Avantage : propose une vue OO dune structure de donnes relationnelles.

    Les outils de mapping O-R mettent en correspondance les objets et les donnes de la base.

  • JDBC

  • JDBC

    Java Database Connectivity

    API Java permettant laccs aux SGBDR (MS Access, SQL Server, MySQL, PostgreSQL, Oracle)

    Fonctionne en client/serveur (appl. Java / SGBD)

    Les classes de lAPI JDBC se trouvent dans le package java.sql

  • JDBC : architecture

    Application Java

    JDBC Driver Manager

    JDBC-ODBC

    bridge driver

    JDBC Driver

    Pour MySQL

    JDBC Driver

    pour Oracle

    ODBC driver

    MS Access

    SQLServer

    MySQL Oracle

  • JDBC : architecture

    Application Java

    JDBC Driver Manager

    JDBC Driver

    Pour MySQL

    MySQL

  • JDBC : architecture

    JDBC Driver Manager : Gestionnaire de drivers permettant chaque application de charger le(s) driver(s) dont il a besoin.

    Driver JDBC : gre les dtails de communication avec un type de SGBD.

    Un driver par SGBD (Oracle, MySQL, ...) JDBC-ODBC : driver gnrique pour toutes les sources accessibles via ODBC (Open DataBase Connectivity. interface Microsoft permettant la communication entre des clients bases de donnes fonctionnant sous Windows et les SGBD du march).

  • JDBC : le driver JDBC

    Chaque diteur de SGBDR fournit un driver JDBC sous la forme dune archive jar.

    Cest un ensemble de classes qui implmentent les interfaces du package java.sql.

    Il faut ajouter larchive au CLASSPATH afin de pouvoir y accder dans vos programmes.

  • JDBC : fonctionnement

    JDBC fonctionne comme suit :

    Cration dune connexion la BD Envoi de requtes SQL (pour rcuprer ou maj des donnes)

    Exploitation des rsultats provenant de la base Fermeture de la connexion

  • JDBC : connexion une BD (1 /2)

    1. Charger la classe du driver JDBC

    Cette classe implmente linterface java.sql.Driver et

    peut tre charge en appelant la mthode forNamede java. lang. Class

    Exemple avec le driver de MySQLClass.forName(org.gjt.mm.mysql.Driver);

  • JDBC : connexion une BD (2/2)

    2. Appeler la mthode getConnection de java.sql.DriverManager

    java.sql.Connection co; co =

    DriverManager.getConnection(jdbc:mysql://localhost/MABD);

    co = DriverManager.getConnection(jdbc:mysql://localhost/MABD, admin, passer);

  • JDBC : exemple de connexionimport java.sql.*; import javax.swing.JOptionPane;

    public static Connection initConnection() {Connection co = null;String url = jdbc:mysql://localhost/MABD;try{

    Class.forName(org.gjt.mm.mysql.Driver);co = DriverManager.getConnection(url,root,null);JOptionPane.showMessageDialog(null,Connection OK);// co.close();return co;

    }catch (ClassNotFoundException fe) {

    System.out.println(driver introuvable : +fe.getMessage());}

    catch (SQLException se) {System.out.println(connexion impossible : +se.getMessage());}

    }

  • JDBC : requtes SQL

    JDBC permet divers types de requtes SQL : interrogation, maj, cration de tables.

    Les objets suivants sont disponibles :ResultSet : contient des informations sur une table (noms des colonnes) ou le rsultat dune requte SQL.

    Statement st = co.createStatement();ResultSet rs = (ResultSet)st.executeQuery(Select );

    ResultSetMetaData : contient des informations sur le nom et le type des colonnes dune table

    ResultSetMetaData rsmd = rs.getMetaData(); int nbre_Colonnes = rsmd.getColumnCount();

    DataBaseMetaData : contient les informations sur la BD (noms des tables, index, etc.)

  • JDBC : linterface java. sql. Connection (1 /2)

    createStatement : retourne une instance de java.sql.Statement utilise pour xecuter une instruction SQL sur la base de donnes

    prepareStatement :prcompile des instructions SQL paramtres et retourne une instance de java.sql.PreparedStatement

    prepareCall : prpare lappel une procdure stocke et renvoie un instance de java.sql.CallableStatement

  • JDBC : linterface java. sql. Connection (2/2)

    setAutoCommit, commit, rollback : grent les transactions

    getMetaData : renvoie une instance de java.sql.DatabaseMetaData pour obtenir des informations sur la base de donnes

    close, isClosed : grent la fermeture de la connection

  • JDBC : java. sql. Statement

    La mthode createStatement dune connection retourne une instance de java.sql.Statement dont les mthodes les plus utilises sont :

    executeUpdate : permet de mettre jour les donnes dune base en excutant des instructions SQL de maj

    executeQuery : permet dexcuter des requtes slection; renvoie une instance de java.sql.ResultSet

  • JDBC : java. sql. ResultSet (1 /2)

    Permet de rcuprer et dexploiter les rsultats dune requte Slection

    Des mthodes next, first, last permettent de parcourir la liste des enregistrement retourns par la slection SQL

    java.sql.ResultSet rs = st.executeQuery(Select );while (rs.next()) {

    // interrogation des infos de lenregistrement courant

    }

  • JDBC : java. sql. ResultSet (2/2)

    Des mthodes getXXX() renvoient la valeur dun des champs de lenregistrement :getString()getInt()getDate()getObject()etc.

    Exemple : System.out.println(rs.getString(1), rs.getString(prenom), rs.getDouble(3));

  • JDBC : exemple de requte SQLpublic test_jdbc {public static void main (String[] args) {

    Connection maCo = initConnection();if (maCo == null) return;String req = Select nom, prenom, age from Personne;try{

    Statement st = maCo.createStatement();ResultSet rs = st.executeQuery(req);while (rs.next()) {

    System.out.print(nom :+rs.getString(nom));System.out.print(prenom:+rs.getString(2));System.out.println(age :+rs.getDouble(3));

    }rs.close(); st.close(); maCo.close();

    }catch (SQLException se) {

    System.out.println(connexion impossible);}

    }}

  • JPA

  • Mapping objet- relationnel (rappel)

    Laccs aux donnes est dlgu un outil externe : Frameworks : Hibernate, Toplink. APIs: JDO, JPA.

    Avantage : propose une vue OO dune structure de donnes relationnelles.

    Les outils de mapping O-R mettent en correspondance les objets et les donnes de la base.

  • JPA (Java Persistence API)

    Spcification de Sun sortie en mai 2006. Abstraction au-dessus de JDBC. Permet de saffranchir de SQL. Package javax.persistence Gre la persistance des objets de lapplication sur des

    BD relationnelles par lintermdiaire dun ORM.

    Permet de mapper les objets Java (POJO) avec les tables de la base de donnes.

  • Services de JPA

    Mcanisme permettant de dfinir le mapping O/R de faon dclarative avec : des annotations des descripteurs XML

    API permettant deffectuer les oprations de base pour la persistance des donnes (CRUD) en manipulant simplement des objets Java.

    Langage de requtes standard pour la rcupration des objets : JPQL.

  • Architecture de JPA

    Couche dAccs aux donnes

    Interface JPA

    Implmentation JPA (Toplink/Hibernate)

    JDBC

    BD

  • Fournisseur de persistence

    JPA ncessite un fournisseur de persistance qui implmente lAPI.

    JPA est implmente par deux produits de rfrences : TopLink de Oracle, produit commercial devenu

    libre.

    Hibernate, projet open-source.

  • Entits

    Une classe dont les instances peuvent tre persistantes est appele Entit (Entity).

    Une entit rprsente gnralement une table dans une BD relationnelle.

    Chaque instance dune entit reprsente une ligne dans la table asocie lentit.

  • Classe Entit (1 /4)

    On indique quune classe est une entit en lui associant lannotation @Entity

    Exemple :

    import javax.Persistence.Entity;

    @Entitypublic class Personne {

    }

  • Classe Entit (2/4)

    Une classe entit doit respecter certaines rgles :

    Les proprits et les mthodes ne doivent pas tre

    finales.

    Les variables dinstance de persistance doivent tre

    dclares private ou protected.

  • Classe Entit (3/4)

    Si une instance de lentit peut tre envoye un client

    distant, la classe doit implmenter java.io.Serializable (RMI

    utilise la srialisation pour passer les arguments entre le

    client et le serveur).

    Doit possder un constructeur sans argument mais peut

    possder aussi dautres constructeurs spcifiques.

  • Classe entit (4/4)

    Tout champ non statique est automatiquement considr comme persistant par le conteneur.

    Les annotations peuvent se placer :

    soit sur les proprits

    soit sur les accesseurs

  • Exemples dentit (1 /3)

    @Entitypublic class Personne {

    @Id @GeneratedValueprivate int id;

    private String nom;private String prenom;private int getId(){ return id; }

    }

  • Exemples dentit (2/3)

    @Entitypublic class Personne implements Serializable {

    private int id;private String nom;private String prenom;@Id @GeneratedValueprivate int getId(){ return id;}

    }

  • Exemples dentit (3/3)

    @Entitypublic class Personne implements Serializable {

    public Personne() {}

    public Personne(String prenom, String nom) {

    this.prenom = prenom;

    this.nom = nom;

    }}

  • Entit - Table

    Gnralement, une table correspond une classe : le nom de la table est le nom de la classe.

    les noms des colonnes correspondent aux noms des attributs persistants.

    Par exemple, les donnes de la classe Personne sont enregistres dans la table Personne dont les colonnes

    seront id, nom, prenom.

  • Entit - Table

    @Entitypublic class Personne {

    @Id private int id;private String nom;private String prenom;

    // methodes get et set}

    CREATE TABLE PERSONNE (

    ID INT NOT NULL,NOM VARCHAR(255),PRENOM VARCHAR(255),

    PRIMARY KEY(ID))

  • Annotations lmentaires du mapping OR (1 /2) @Table : pour spcifier le nom de la table par dfaut cest le nom de la classe

    @Entity

    @Table(name=t_Personne, schema=MaBD)

    public class Personne { }

  • Annotations lmentaires du mapping OR (2/2)

    @Column : pour dfinir les proprits dun champ

    @Entity

    public class Personne {

    @Column(name=t_nom, nullable=false, length=32)

    private String nom;

    }

  • Associations

    Les 4 relations possibles entre entits sont signales par des annotations : Un Un :

    Annotation : @OneToOne Un plusieurs :

    Annotation : @OneToMany Plusieurs Un

    Annotation : @ManyToOne Plusieurs Plusieurs

    Annotation : @ManyToMany

  • Exemple dassociation

    @OneToMany(mappedBy=section")public Collection getEnseignants() {

    return enseignants;}

    public void setEnseignants(Collectionens) {

    this.enseignants = ens;}

  • Entity Manager (1 /2)

    Service qui centralise toutes les actions de persistance. Pour rendre les entits persistentes, on le prcise via

    linterface javax.persistence.EntityManager.

    Correspond ltat dune connexion avec la BD. Offre des mthodes dajout, modification,

    suppression, recherche et un accs au langage de requtes.

  • Entity Manager (2/2)

    Lorsquune entit est prise en compte par lEM, on dit quil est attach ou manag (managed bean).

    Ds quun objet est manag, on peut alors effectuer des oprations de persistance via lEM.

    Lensemble des entits manages par lEM est appel contexte de persistance.

    Le contexte de persistance permet de prciser : le type de base de donnes utiliser les paramtres de connexion.

  • Cration dune Entity Manager

    Une EM est obtenue partir de linterface

    EntityManagerFactory

    EntityManagerFactory emf =

    Persistence.createEntityManagerFactory(unite_de_persistance);

    EntityManager em = emf.createEntityManager();

    Client JPA Entity Manager

    Contexte de persistance

    BD

  • Cycle de vie dune entit

  • Oprations principales sur les entits

    Persistance dune entit

    Recherche dentits

    Suppression dune entit

    Mise jour dune entit

    Gestion des transactions

  • Persistance dune entit

    Insrer lentit dans la BD.

    Mthode void persist(Object o)

    Exemple : Personne p = new Personne();p.setNom(Balde);p.setPrenom(Lamine);em.persist(p);

  • Recherche dune entit

    Retrouver une entit stocke dans la BD partir du nom de la classe et de la cl primaire.

    Mthode T find(Class entityClass, Object primaryKey)

    Exemple :

    public Personne trouverPersonne(int id){return em.find(Personne.class, id);

    }

  • Suppression dune entit

    Supprimer une entit stocke dans la BD partir du nom de la classe et de la cl primaire.

    Mthode void remove(Object entity)

    Exemple :public void supprimerPersonne(int id) {

    Personne p = em.find(Personne.class, id);if (p != null)

    em.remove(p);}

  • Mise jour dune entit

    Mettre jour une entit stocke dans la BD.

    Exemple :

    public Personne modifierPassword (int id, String newPwd){Personne p = em.find(Personne.class, id);if (p != null)

    p.setPassword(newPwd);return p;

    }

  • Exemple de contexte de persistence

  • Le langage de requtes JPQL

    Java Persistence Query Language. Dclaratif et inspir de la syntaxe de SQL. Manipule des objets dans sa syntaxe de requtes et

    retourne des objets en rsultat.

    Exemple :String req = "SELECT p FROM Personne p WHERE

    p.Nom = 'Lo'";Query query = em.createQuery(req); List resultat = (List)query.getResultList();

  • Exemples de Requtes JPQL (1 /2)

    String requete = SELECT e FROM Personne e";

    Query query = em.createQuery(requete);

    Collection pers = query.getResultList();

    for (Personne p : pers)

    System.out.println(" Personne trouvee : " + p);

  • Exemples de Requtes JPQL (2/2)

    String requete = SELECT e FROM Personne e + WHERE e.salaire >= :salaire;

    Query query = em.createQuery(requete);Query.setParameter(salaire, 4000000);List pers = query.getResultList();

    for (Personne p : pers)System.out.println(" Personne : " + p.getNom());

  • Transactions

    LEntity Manager offre des mthodes pour la gestion des transactions.

    Exemple :// creation et persistance dune entit personneem.getTransaction().begin();Personne p = new Personne();p.setNom(Balde); p.setPrenom(Lamine); em.persist(p);em.getTransaction().commit();

    Programmation Oriente Objet en JavaDiapositive numro 2Diapositive numro 3Diapositive numro 4Diapositive numro 5Diapositive numro 6Diapositive numro 7Diapositive numro 8Diapositive numro 9Diapositive numro 10Diapositive numro 11Diapositive numro 12Diapositive numro 13Diapositive numro 14Diapositive numro 15Diapositive numro 16Diapositive numro 17Diapositive numro 18Diapositive numro 19Diapositive numro 20Diapositive numro 21Diapositive numro 22Diapositive numro 23Diapositive numro 24Diapositive numro 25Diapositive numro 26Diapositive numro 27Diapositive numro 28Diapositive numro 29Diapositive numro 30Diapositive numro 31Diapositive numro 32Diapositive numro 33Diapositive numro 34Diapositive numro 35Diapositive numro 36Diapositive numro 37Diapositive numro 38Diapositive numro 39Diapositive numro 40Diapositive numro 41Diapositive numro 42Diapositive numro 43Diapositive numro 44Diapositive numro 45Diapositive numro 46Diapositive numro 47Diapositive numro 48Diapositive numro 49Diapositive numro 50Diapositive numro 51Diapositive numro 52Diapositive numro 53Diapositive numro 54Diapositive numro 55Diapositive numro 56Diapositive numro 57Diapositive numro 58Diapositive numro 59Diapositive numro 60Diapositive numro 61Diapositive numro 62Diapositive numro 63Diapositive numro 64Diapositive numro 65Diapositive numro 66Diapositive numro 67Diapositive numro 68Diapositive numro 69Diapositive numro 70Diapositive numro 71Diapositive numro 72Diapositive numro 73Diapositive numro 74Diapositive numro 75Diapositive numro 76Diapositive numro 77Diapositive numro 78Diapositive numro 79Diapositive numro 80Diapositive numro 81Diapositive numro 82Diapositive numro 83Diapositive numro 84Diapositive numro 85Diapositive numro 86Diapositive numro 87Diapositive numro 88Diapositive numro 89Diapositive numro 90Diapositive numro 91Diapositive numro 92Diapositive numro 93Diapositive numro 94Diapositive numro 95Diapositive numro 96Diapositive numro 97Diapositive numro 98Diapositive numro 99Diapositive numro 100Diapositive numro 101Diapositive numro 102Diapositive numro 103Diapositive numro 104Diapositive numro 105Diapositive numro 106Diapositive numro 107Diapositive numro 108Diapositive numro 109Diapositive numro 110Diapositive numro 111Diapositive numro 112Diapositive numro 113Diapositive numro 114Diapositive numro 115Diapositive numro 116Diapositive numro 117Diapositive numro 118Diapositive numro 119Diapositive numro 120Diapositive numro 121Diapositive numro 122Diapositive numro 123Diapositive numro 124Diapositive numro 125Diapositive numro 126Diapositive numro 127Diapositive numro 128Diapositive numro 129Diapositive numro 130Diapositive numro 131Diapositive numro 132Diapositive numro 133Diapositive numro 134Diapositive numro 135Diapositive numro 136Diapositive numro 137Diapositive numro 138Diapositive numro 139Diapositive numro 140Diapositive numro 141Diapositive numro 142Diapositive numro 143Diapositive numro 144Diapositive numro 145Diapositive numro 146Diapositive numro 147Diapositive numro 148Diapositive numro 149Diapositive numro 150Diapositive numro 151Diapositive numro 152Diapositive numro 153Diapositive numro 154Diapositive numro 155Diapositive numro 156Diapositive numro 157Diapositive numro 158Diapositive numro 159Diapositive numro 160Diapositive numro 161Diapositive numro 162Diapositive numro 163Diapositive numro 164Diapositive numro 165Diapositive numro 166Diapositive numro 167Diapositive numro 168Diapositive numro 169Diapositive numro 170Diapositive numro 171Diapositive numro 172Diapositive numro 173Diapositive numro 174Diapositive numro 175Diapositive numro 176Diapositive numro 177Diapositive numro 178Diapositive numro 179Diapositive numro 180Diapositive numro 181Diapositive numro 182Diapositive numro 183Diapositive numro 184Diapositive numro 185Diapositive numro 186Diapositive numro 187Diapositive numro 188Diapositive numro 189Diapositive numro 190Diapositive numro 191Diapositive numro 192Diapositive numro 193Diapositive numro 194Diapositive numro 195Diapositive numro 196Diapositive numro 197Diapositive numro 198Diapositive numro 199Diapositive numro 200Diapositive numro 201Diapositive numro 202Diapositive numro 203Diapositive numro 204Diapositive numro 205Diapositive numro 206Diapositive numro 207Diapositive numro 208Diapositive numro 209Diapositive numro 210Diapositive numro 211Diapositive numro 212Diapositive numro 213Diapositive numro 214Diapositive numro 215Diapositive numro 216Diapositive numro 217Diapositive numro 218