1 Support poo java premire partie 1

Embed Size (px)

Citation preview

  • 7/25/2019 1 Support poo java premire partie 1

    1/128

  • 7/25/2019 1 Support poo java premire partie 1

    2/128

    IntroductionQualit logicielle

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    3/128

    Rappels :Qualit dun Logiciel La qualit dun logiciel se mesure par rapport

    plusieurs critres : Rpondre aux spcifications fonctionnelles :

    Une application est cre pour rpondre , tout dabord, aux besoinsfonctionnels des entreprises.

    Les performances: La rapidit dexcution et Le temps de rponse

    o re e sur une arc ec ure ro us e. Eviter le problme de monte en charge

    La maintenance: Une application doit voluer dans le temps. Doit tre ferme la modification et ouverte lextension Une application qui nvolue pas meurt. Une application mal conue est difficile maintenir, par suite

    elle finit un jour la poubelle.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    4/128

    Qualit dun Logiciel La qualit dun logiciel se mesure par rapport plusieurs

    critres : (Suite) Scurit

    Garantir lintgrit et la scurit des donnes

    Portabilit Doit tre capable de sexcuter dans diffrentes plateformes.

    Capacit de communiquer avec dautres applications distantes. Disponibilit et tolrance aux pannes

    apac e ourn r e serv ce ren s ype e c en s : Client lourd : Interfaces graphiques SWING Interface Web : protocole Http Tlphone : SMS .

    Design des ses interfaces graphiques Charte graphique et charte de navigation Accs via diffrentes interfaces (Web, Tlphone, PDA, ,)

    Cot du logiciel

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    5/128

    Serveur dapplication : TOMCAT

    Couche WEB CoucheMtier

    CoucheDAO

    Architecture J2EE

    DonnesMtier

    ContrleurServlet

    Vue

    ModleJavaBeans

    1

    2

    3

    4

    5

    6

    Client Lger

    HTML

    CSS

    Java Script

    XML

    Ajax

    DAOHTTP

    SGBDJSPFlash

    erna e

    JDBC

    Client Lourd

    AWT

    SWING

    SWT

    RMI/EJB/CORBA/SOAP

    STRUTSJSFSpring MVC

    Intgration avec Spring ou EJB

    Coucheservice

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    6/128

    Programmation Oriente Objet

    Java

    6

    M.Youssfi

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    7/128

    Programme Java? Programmation oriente Objet Java

    Objet et Classe Hritage et accessibilit Polymorphisme Collections

    Exceptions et Entres Sorties Interfaces graphique AWT et SWING Accs aux bases de donnes Threads et Sockets

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    8/128

    Quest ce que java?

    Langage de programmation orient objet (Classe, Objet,Hritage, Encapsulation et Polymorphisme)

    Avec java on peut crer des applicationmultiplateformes. Les applications java sont portables.Cest--dire, on peut crer une application java dans une

    8

    p a e orme onn e e on peu ex cu er sur n mpor equelle autre plateforme. Le principe de java est : Write Once Run Every Where Open source: On peut rcuprer le code source de java.

    Ce qui permet aux dveloppeurs, en cas de besoin, dedvelopper ou modifier des fonctionnalits de java.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    9/128

    Quest ce que java?

    Java est utilis pour crer : Des applications Desktop Des applets java (applications java destines sexcuter dans une page web) Des applications pour les smart phones Des applications embarques dans des cartes puces Des application JEE (Java Entreprise Edition)

    Pour crer une application java, il faut installer un kit de dveloppementjava

    9

    JSDK : Java Standard Developpement Kit, pour dvelopper les applicationDeskTop JME : Java Mobile Edition, pour dvelopper les applications pour les

    tlphones potables JEE : Java Entreprise Edition, pour dvelopper les applications qui vont

    sexcuter dans un serveur dapplication JEE (Web Sphere Web Logic,JBoss). JCA : Java Card Editon, pour dvelopper les applications qui vont

    sxcuter dans des cartes puces.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    10/128

    Diffrents modes de compilation

    Code source Code source Code source

    Natif Byte CodeByte Code JITJIT

    Java est un langage compil et interprt Compilation en mode natif Compilation Byte Code Compilation en mode JIT(Just In Time)

    10

    Compilation

    Langage Machine

    Edition de lien

    Programme.Exe

    Compilation

    Byte Code

    Interprtation parLa JVM en mode byte code(Traduit en code machineet excute instruction par

    Instruction )

    Compilation

    Byte Code

    Interprtation parLa JVM en mode JIT

    (Traduit tout le programmeByte Code en programme

    machine puis lexcute )[email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    11/128

    Installation de java Le Kit de dveloppement java JDK peut tre tlcharg

    gratuitement partir du site de Sun Microsystem son diteurprincipal (www.java.sun.com).

    Le JDK contient 3 trois pacquages : J2Sdk1.6.exe : Kit de dveloppement proprement dit Jre1.6.exe : Machine virtuelle java jdk15-doc.zip : Documentation java

    - - - -

    11

    dans le rpertoire c:\program files\java et installe galement jre1.6dans le mme dossier.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    12/128

    Ce que contient le JDK

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    13/128

    Kit de dveloppement java

    Les programmes ncessaire au dveloppement java sontplacs dans le rpertoire c:\jdk1.5\bin savoir: javac.exe : Compilateur java. java.exe : Interprteur du bytecode java. appletviewer.exe : Pour tester les applets java. Jdb.exe : Dbogueur java. Java .exe : dsassembleur du b tecode.

    13

    Javadoc.exe : Gnrer la documentation de vos programmesjava. Javah.exe : Permet de lier des programmes Java avec des

    mthodes natives, crites dans un autre langage et dpendantdu systme.

    jar.exe : Permet de compresser les classes Java ainsi que tousles fichiers ncessaires l'excution d'un programme(graphiques, sons, etc.). Il permet en particulier d'optimiser lechargement des applets sur Internet.

    jarsigner.exe : Un utilitaire permettant de signer les fichiersarchives produits par jar.exe.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    14/128

    Configuration de l environnement La configuration de l'environnement comporte deux

    aspects :- Dfinir la variable denvironnement path qui indique

    le chemin d'accs aux programmes excutables :Cette variable path devrait contenir le chemin duJDK utilis:- ath= C:\Pro ram Files\Java\ dk1.6.0 13\bin; ..

    14

    _

    - Quand elle excute une application java, la JVMconsulte la variable denvironnement classpath quicontient le chemin daccs aux classes javautilises par cette application.- classpath= .; c:\monProjet\lib; c:\programmation

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    15/128

    Configurer la variable denvironnement path sous windows

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    16/128

    Outils de dveloppement java

    Un Editeur de texte ASCII: on peut utiliser un simple

    diteur comme notepad de windows mais il estprfrable d utiliser un diteur conu pour laprogrammation java exemples: Ultraedit, JCreator, .

    16

    plus prfr pour les dveloppeur java. Il est gratuit etcest un environnement ouvert.

    Autres IDE java : JDevlopper de Oracle. JBuilder de Borland.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    17/128

    Premier programme java

    Remarques: Le nom du fichier java doit tre le mme que celui de la classe

    qui contient la fonction principale main. Pour compiler le programme source, il faut faire appel au

    programme javac.exe qui se trouve dans le dossier c:\jdk1.2\bin.

    17

    rpertoire, il faut ajouter la commande : path c:\jdk1.2\bin dans lefichier autoexec.bat. Aprs compilation du programme PremierProgramme.java, il y a

    gnration du fichier PremierProgramme.class qui reprsente le

    ByteCode de programme. Pour excuter ce programme en byte code, il faut faire appel au

    programme java.exe qui reprsente l interprter du bytecode.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    18/128

    Premier programme java

    public classPremierProgramme {

    public static voidmain(String[] args) {

    System.out.println("First Test");

    }}

    Lancer un diteur de texte ASCII et Ecrire le code source de ce programme. Enregistrer ce fichier dans un nouveau rpertoire c:\exojava sous le nom

    PremierPro ramme. ava

    18

    Compiler ce programme sur ligne de commande Dos :c:\exojava>javac PremierProgramme.java Corriger les Erreurs de compilation Excuter le programme sur ligne de commande

    c:\exojava>java PremierProgramme

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    19/128

    Premire Application

    graphiqueimportjavax.swing.*;

    importjava.awt.*;

    public classFirstGraphicApp {

    public static voidmain(String[] args) {// Crer une nouvelle fentre

    JFrame jf=newJFrame("Titre");

    //Crer les composants graphiques

    = " "

    19

    JTextField t=newJTextField(12);JButton b=newJButton("OK");

    //Dfinir une technique de mise en page

    jf.setLayout(newFlowLayout());

    //Ajouter les composants la fentre

    jf.add(l);jf.add(t);jf.add(b);

    //Dfinir les dimensions de la fentre

    jf.setBounds(10, 10, 400, 400);

    //Afficher la fentre

    jf.setVisible(true);

    }

    } [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    20/128

    Premire Appletimportjava.applet.Applet;

    importjava.awt.*;

    public classFirstApplet extendsApplet{

    public voidinit(){

    add(newLabel("Nom:"));

    add(newTextField(12));

    add(newList());

    add(newButton("OK"));

    }

    public voidpaint(Graphics g) {

    20

    . , , ,

    }}

    Rdiger le programme source. Enregistrer le fichier sous le nom FirstApplet.java Compiler le programme source et corriger les erreurs. Crer un page HTML qui affiche l applet sur un navigateur web:

  • 7/25/2019 1 Support poo java premire partie 1

    21/128

    Deuxime Applet avec Gestion des vnements

    importjava.applet.Applet;importjava.awt.*;

    importjava.awt.event.*;

    public classDeuxiemeApplet extendsApplet implements ActionListener{

    // Dclarer etcrer les composants graphiques

    Label lNom=newLabel("Nom:"); TextField tNom=newTextField(12);

    List listNoms=newList(); Buttonb=newButton("OK");

    // Initialisation de l'applet

    public voidinit() {

    // Ajouter les composants l'applet

    add(lNom);add(tNom);add(listNoms);add(b);

    // En cliquant sur le bouton b le gestionnaire

    21

    // des vnnements actionPerformed s'excute

    b.addActionListener(this);}

    //Mthode qui permet de grer les vnements

    public void actionPerformed(ActionEvent e) {

    if(e.getSource()==b){

    // Lire le contenu de la zone de texte

    String nom=tNom.getText();// Ajouter ce contenu dans la liste

    listNoms.add(nom);

    }

    }

    }

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    22/128

    Structures fondamentales dulangage java

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    23/128

    Structure du langage java

    Au niveau syntaxe, Java est un langage deprogrammation qui ressemble beaucoup au langagec++

    Toute fois quelques simplifications ont tr v r r i n ri

    23

    doptimisation. Dans cette partie nous ferons une prsentation

    succincte des types primitifs, les enveloppeurs,dclarations des variables, le casting des primitives,les oprateurs arithmtiques et logiques, lesstructures de contrle (if, swich, for et while)

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    24/128

    Les primitives

    Java dispose des primitives suivantes :

    Primitive tendue Taille

    char 0 65 535 16 bits -

    24

    short -32 768 +32 767 16 bitsint -2 147 483 648 + 2 147 483 647 32 bitslong 64 bitsfloat de 1.4E-45 3.40282347E38 32 bitsdouble 64 bitsboolean true ou false 1 bitvoid - 0 bit

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    25/128

    Utilisation des primitives Les primitives sont utilises de faon trs simple. Elles

    doivent tre dclares, tout comme les handles d'objets,avec une syntaxe similaire, par exemple :

    int i;

    char c;

    25

    boolean fini; Les primitives peuvent tre initialises en mme temps que

    la dclaration.

    int i = 12;char c = 'a';

    boolean fini = true;

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    26/128

    Utilisation des primitives

    Comment choisir le nom dune variable: Pour respecter la typologie de java, les nom des

    variables commencent toujours par un caractre enminuscule et pour indiquer un sparateur de mots,onutilise les majuscules. Exemples:

    int nbPersonnes;

    26

    r ng nom ersonne; Valeurs par dfaut des primitives:

    Toutes les primitives de type numrique utilisescomme membres d'un objet sont initialises la

    valeur 0. Le type boolean est initialis la valeurfalse.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    27/128

    Casting des primitives

    Le casting des primitives Le casting (mot anglais qui signifie moulage),galement appel cast ou, parfois, transtypage,

    consiste effectuer une conversion d'un type versun autre type.

    27

    Le casting peut tre effectu dans deux conditionsdiffrentes Vers un type plus gnral. On parle alors desur-castingou

    desur-typage. Vers un type plus particulier. On parle alors de sous-

    castingou desous-typage.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    28/128

    Casting des primitives Sur-casting : Le sur-casting peut se faireimplicitement ou explicitement.

    Exemples : int a=6; // le type int est cod sur 32 bits long b; // le type long est cod sur 64 bits

    Casting implicite : b=a;

    28

    b=(long)a; Sous-Casting : Le sous-casting ne peut

    se faire quexplicitement.1: float a = (float)5.5;

    2 : double c = (double)a;4 : i n t d = 8 ;5 : byte f = (byte)d;

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    29/128

    Les enveloppeurs (wearpers)

    Classe PrimitiveCharacter charByte byteShort short

    Les primitives sont enveloppes dans des objets appels

    enveloppeurs (Wearpers ). Les enveloppeurs sont des classe

    29

    n eger n

    Long longFloat floatDouble doubleBoolean boolean

    Void -BigInteger - -BigDecimal -

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    30/128

    Utilisation des primitives et enveloppeurs Exemple:

    doublev1=5.5; // v1 est une primitive

    Double v2=newDouble(5.6); // v2 est un objet

    longa=5; // a est une primitive

    Long b=newLong(5); // b est un objet

    Long c= 5L; // c est un objetSystem.out.println("a="+a);

    System.out.println("b="+b.longValue());

    System.out.println("c="+c.byteValue());

    30

    System.out.println("V1="+v1);

    System.out.println("V2="+v2.intValue());

    Rsultat:

    a=5 b=5 c=5 V1=5.5 V2=5

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    31/128

    Oprateurs

    Oprateur d affectation: x=3;// x reoit 3

    x=y=z=w+5;// z reoit w+5, y reoit z et x reoit y Les oprateurs arithmtiques deux oprandes:

    + : addition

    31

    - : soustract on * : multiplication / : division % : modulo (reste de la division euclidienne)

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    32/128

    Oprateurs Les oprateurs arithmtiques deux oprandes

    (Les raccourcis)x = x + 4; ou x+=4;z = z * y; ou Z*=y;

    v = v % w; ou v%=w; Les oprateurs relationnels:

    == : quivalent < : plus petit que

    32

    > : plus grand que

    = : plus grand ou gal != : non quivalent

    Les oprateurs dincrmentations et de

    dcrmentation: ++ : Pour incrmenter(i++ ou ++i) -- : Pour dcrmenter(i- ou --i)

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    33/128

    Oprateurs

    Les oprateurs logiques && Et (deux oprandes) || Ou (deux oprandes ) ! Non (un seul oprande)

    L'oprateur trois oprandes ?: condition ? ex ression si vrai : ex ression si faux

    33

    _ _ _ _

    exemple : x = (y < 5) ? 4 * y : 2 * y;Equivalent :

    if (y < 5)x = 4 * y ;

    elsex = 2 * y ;

    [email protected] | ENSET UniversitHassan II Mohammedia

    S d l

  • 7/25/2019 1 Support poo java premire partie 1

    34/128

    Structures de contrle

    L'instruction conditionnelle ifLa syntaxe de l'instruction if peut tre dcrite de la faon suivante:if (expression) instruction;

    ou :

    if (expression) {

    instruction1;

    instruction2;

    }

    '

    34

    if (expression) {

    instruction1;

    }

    else {

    instruction2;}

    [email protected] | ENSET UniversitHassan II Mohammedia

    St t d t l

  • 7/25/2019 1 Support poo java premire partie 1

    35/128

    Structures de contrle

    Les instructions conditionnelles imbriquesJava permet d'crire ce type de structure sous la forme :if (expression1) {

    bloc1;

    }

    else if (expression2) {

    bloc2;

    35

    }

    else if (expression3) {

    bloc3;

    }

    else {

    bloc5;

    }

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    36/128

    Structures de contrle: L'instruction switchSyntaxe :switch( variable) {

    case valeur1: instr1;break;

    case valeur2: instr2;break;

    case valeurN: instrN;break;

    default: instr;break;

    }

    Exemple:importjava.util.Scanner;public classTest {

    public static voidmain(String[] args) {

    36

    System.out.print("Donner un nombre:");

    Scanner clavier=newScanner(System.in);

    intnb=clavier.nextInt();

    switch(nb){

    case1 : System.out.println("Lundi");break;

    case2 : System.out.println("Mardi");break;

    case3 : System.out.println("Mercredi");break;

    default:System.out.println("Autrement");break;

    }}}

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    37/128

    Structures de contrle

    La boucle for

    La boucle for est une structure employe pour excuter un blocd'instructions un nombre de fois en principe connu l'avance. Elle utilise la syntaxe suivante :

    for initialisation test incrmentation

    37

    instructions;}

    Exemple :for(inti = 2; i < 10;i++) {

    System.out.println("I="+i);}

    [email protected] | ENSET UniversitHassan II Mohammedia

    d

  • 7/25/2019 1 Support poo java premire partie 1

    38/128

    Structures de contrle Sortie d'une boucle par return

    int[] tab=new int[]{4,6,5,8};

    for(inti= 0; i < tab.length; i++) {

    if(tab[i] == 5) {

    returni;}

    Branchement au moyen des instructions break et continue break:

    38

    intx = 10;

    for(inti = 0; i < 10; i++) {

    x--;

    if(x == 5)break;

    }

    System.out

    .println(x); continue:for(inti = 0; i < 10; i++) {

    if(i == 5) continue;

    System.out.println(i);

    }

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    39/128

    Structures de contrle L instruction Whilewhile (condition){

    BlocInstructions;

    }

    L instruction do ..

    Exemple :ints=0;inti=0;

    while(i

  • 7/25/2019 1 Support poo java premire partie 1

    40/128

    Programmation oriente objetavec JAVA

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    41/128

    Mthode oriente objet La mthode oriente objet permet de concevoir une application sous

    la forme d'un ensemble d'objets relis entre eux par des relations Lorsque que l'on programme avec cette mthode, la premire

    question que lon se pose plus souvent est :

    qu'est-ce que je manipule ? , Au lieu de qu'est-ce que je fait ? .

    L'une des caractristiques de cette mthode permet de concevoir denouveaux objets partir d'objets existants.

    41

    n peut onc r ut ser es o ets ans p us eurs app cat ons. La rutilisation du code fut un argument dterminant pour venter lesavantages des langages objets. Pour faire la programmation oriente objet il faut maitriser les

    fondamentaux de lorient objet savoir: Objet et classe Hritage Encapsulation (Accessibilit) Polymorphisme

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    42/128

    Objet

    Un objet est une structure informatique dfinie par un tat et uncomportement

    Objet=tat + comportement Ltat regroupe les valeurs instantanes de tous les attributs de lobjet. Le comportement regroupe toutes les comptences et dcrit les actions

    et les ractions de lobjet. Autrement dit le comportement est dfini parles oprations que lobjet peut effectuer.

    Ltat dun objet peut changer dans le temps.

    42

    Gnralement, cest le comportement qui modifie ltat de lobjet Exemples:

    v1:Voiture

    Couleur="rouge"

    Carburant=20

    Puissance=120

    demarrer()

    accelerer()

    Freiner()

    tat de lobjet

    Comportement

    :Fenetre

    titre="WinWord"

    largeur=400

    hauteur=300

    Deplacer()

    agrandir()

    fermer()[email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    43/128

    Identit dun objet

    En plus de son tat, un objet possde une identitqui caractrise son existence propre.

    Cette identit sappelle galement rfrence ouhandle de lobjet

    43

    En terme informatique de bas niveau, lidentit dunobjet reprsente son adresse mmoire. Deux objets ne peuvent pas avoir la mme identit:

    cest--dire que deux objet ne peuvent pas avoir lemme emplacement mmoire.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    44/128

    Classes

    Les objets qui ont des caractristiques communessont regroups dans une entit appel classe.

    La classe dcrit le domaine de dfinition dunensemble dobjets.

    44

    Les gnralits sont contenues dans les classe et

    les particularits dans les objets. Les objets informatique sont construits partir de

    leur classe par un processus qui sappellelinstanciation. Tout objet est une instance dune classe.

    [email protected] | ENSET UniversitHassan II Mohammedia

    C i i d l

  • 7/25/2019 1 Support poo java premire partie 1

    45/128

    Caractristique dune classe Une classe est dfinit par:

    Les attributs Les mthodes

    Les attributs permettent de dcrire ltat de des objets de cette classe. Chaque attribut est dfini par:

    Son nom Son type ventuellement sa valeur initiale

    45

    Les mthodes permettent de dcrire le comportement des objets de

    cette classe. Une mthode reprsente une procdure ou une fonction qui permet

    dexcuter un certain nombre dinstructions. Parmi les mthode dune classe, existe deux mthodes particulires:

    Une mthode qui est appele au moment de la cration dun objet decette classe. Cette mthode est appele CONSTRUCTEUR Une mthode qui est appele au moment de la destruction dun objet.

    Cette mthode sappelle le DESTRUCTEUR

    [email protected] | ENSET UniversitHassan II Mohammedia

    R i UML d l

  • 7/25/2019 1 Support poo java premire partie 1

    46/128

    Reprsentation UML dune classe

    Une classe est reprsent par un rectangle 3compartiments: Un compartiment qui contient le nom de la classe Un compartiment qui contient la dclaration des attributs Un com artiment ui contient les mthodes

    46

    Exemples:Compte

    code : int

    solde : floatCompte(float soldeInitial)

    verser(float mt):void

    retirer(float mt):void

    getSolde():float

    Nom de la classe

    Attributs

    MthodesOu

    Oprations

    [email protected] | ENSET UniversitHassan II Mohammedia

    L l t t k d d k

  • 7/25/2019 1 Support poo java premire partie 1

    47/128

    Les classes sont stockes dans des packages

    Les packages offrent un mcanisme gnral pour la partition desmodles et le regroupement des lments de la modlisation

    Chaque package est reprsent graphiquement par un dossier Les packages divisent et organisent les modles de la mme

    manire que les dossier organisent le systme de fichier

    47

    Nomdu paquetage

    [email protected] | ENSET UniversitHassan II Mohammedia

    A ibili b d l

  • 7/25/2019 1 Support poo java premire partie 1

    48/128

    Accessibilit au membres dune classe Dans java, il existe 4 niveaux de protection :

    private (-) : Un membre priv dune classe nestaccessible qu lintrieur de cette classe.

    protected (#) : un membre protg dune classe estaccessible : Lintrieur de cette classe Aux classes drives de cette classe.

    48

    ux c asses u m me pac age. public (+) : accs partir de toute entit interne ouexterne la classe Autorisation par dfaut : dans java, en labsence

    des trois autorisations prcdentes, lautorisation par

    dfaut est package. Cette autorisation indique queuniquement les classes du mme package ontlautorisation daccs.

    [email protected] | ENSET UniversitHassan II Mohammedia

    E l di l t ti d l

  • 7/25/2019 1 Support poo java premire partie 1

    49/128

    metier

    Exemple dimplmentation dune classe

    avec Java package metier;public class Compte {// Attributs

    private int code;

    protected float solde;

    // Constructeur

    public Compte(int c,float s){

    code=c;

    solde=s;

    }

    Compte

    - code : int

    # solde : float

    + Compte(int code, float solde)

    49

    // Mthode pour verser un montant

    public voidverser(float mt){solde+=mt;

    }

    // Mthode pour retirer un montant

    public voidretirer(float mt){

    solde-=mt;

    }

    // Une mthode qui retourne l'tat du compte

    public String toString(){

    return(" Code="+code+" Solde="+solde);

    }

    }

    + verser(float mt):void

    + retirer(float mt):void

    + toString():String

    [email protected] | ENSET UniversitHassan II Mohammedia

    Cration des objets dans java

  • 7/25/2019 1 Support poo java premire partie 1

    50/128

    Cration des objets dans java Dans java, pour crer un objet dune classe , On utilise la commande

    new suivie du constructeur de la classe. La commande new Cre un objet dans lespace mmoire et retourne

    ladresse mmoire de celui-ci. Cette adresse mmoire devrait tre affecte une variable qui

    reprsente lidentit de lobjet. Cette rfrence est appele handle.package test;

    importmetier.Compte;

    public classApplication {

    c1:Compte

    Code=1

    c1:Compte

    Code=1

    c1:Compte

    code=1

    50

    public static voidmain(String[] args) {

    Compte c1=newCompte(1,5000);

    Compte c2=newCompte(2,6000);

    c1.verser(3000);

    c1.retirer(2000);

    System.out.println(c1.toString());

    }

    }

    Solde=5000

    verser(float mt)

    retirer(float mt)

    toString()

    c2:Compte

    code=2

    solde=6000

    verser(float mt)

    retirer(float mt)

    toString()

    Solde=8000

    verser(float mt)

    retirer(float mt)

    toString()

    solde=6000

    verser(float mt)

    retirer(float mt)

    toString()

    Code=1 Solde= [email protected] | ENSET UniversitHassan II Mohammedia

    C tr t r p r df t

  • 7/25/2019 1 Support poo java premire partie 1

    51/128

    Constructeur par dfaut Quand on ne dfinit aucun constructeur pour une classe, lecompilateur cre le constructeur par dfaut. Le constructeur par dfaut na aucun paramtre et ne fait

    aucune initialisation

    Exemple de classe :Exemple de classe :Exemple de classe :Exemple de classe :

    public class Personne {

    // Les Attributs

    Instanciation en utilisant leInstanciation en utilisant leInstanciation en utilisant leInstanciation en utilisant le

    constructeur par dfaut :constructeur par dfaut :constructeur par dfaut :constructeur par dfaut :

    51

    private intcode;

    privateString nom;

    // Les Mthodes

    public voidsetNom(String n){

    this.nom=n;

    }

    publicString getNom(){

    returnnom;

    }

    }

    Personne p=newPersonne();

    p.setNom("AZER");

    System.out.println(p.getNom());

    [email protected] | ENSET UniversitHassan II Mohammedia

    Getters et Setters

  • 7/25/2019 1 Support poo java premire partie 1

    52/128

    Les attributs privs dune classe ne sont accessibles qu lintrieur de la classe.

    Pour donner la possibilit dautres classes daccder aux membres privs, ilfaut dfinir dans la classes des mthodes publiques qui permettent de : lire la variables privs. Ce genre de mthodes sappellent les accesseurs ou Getters modifier les variables privs. Ce genre de mthodes sappellent les mutateurs ou

    Setters

    Les getters sont des mthodes qui commencent toujours par le mot get etfinissent par le nom de lattribut en crivant en majuscule la lettre qui vient justeaprs le get. Les getters retourne toujours le mme type que lattributcorrespondant. Par exemple, dans la classe CompteSimple, nous avons dfini un attribut priv :

    52

    pr vate tr ng nom;

    Le getter de cette variable est :public String getNom( ){return nom;

    }

    Les setters sont des mthodes qui commencent toujours par le mot set etfinissent par le nom de lattribut en crivant en majuscule la lettre qui vient justeaprs le set. Les setters sont toujours de type void et reoivent un paramtrequi est de meme type que la variable: Exemple:

    public void setNom( String n ){this.nom=n;

    } [email protected] | ENSET UniversitHassan II Mohammedia

    Encapsulation Diagramme de squence :

  • 7/25/2019 1 Support poo java premire partie 1

    53/128

    ppublic classApplication {

    public static voidmain(String[] args) {

    Personne p=newPersonne();

    p.setNom("AZER");

    System.out.println(p.getNom());

    }

    }

    Comportement

    p:Personne:Application

    :Application

    p1:Personnecrer()

    setNom("AZER")

    getNom()

    Diagramme de squence :

    53

    Code = 1nom=AZER

    Etat

    setNom()

    Etat

    ompor emen

    Retourne AZER

    p.seNom("AZER")

    p.getNom()

    Gnralement, ltat dun objet est priv ou protg et son comportement est publique

    Quand ltat de lobjet est priv Seules les mthode de ses qui ont le droit dy accder

    Quand ltat de lobjet est protg, les mthodes des classes drives et les classes

    appartenant au mme package peuvent galement y [email protected] | ENSET UniversitHassan II Mohammedia

    Membres statiques dune classe

  • 7/25/2019 1 Support poo java premire partie 1

    54/128

    Membres statiques d une classe. Dans lexemple de la classe Compte, chaque objet Compte

    possde ses propres variables code et solde. Les variables codeet solde sont appeles variables dinstances.

    Les objets dune mme classe peuvent partager des mmes

    variables qui sont stockes au niveau de la classe. Ce genre devariables, sappellent les variables statiques ou variables declasses.

    54

    classe et partag par tous les objets de cette classe. Comme un attribut une mthode peut tre dclare statique, ce

    qui signifie quelle appartient la classe et partage par toutesles instances de cette classe.

    Dans la notation UML, les membres statiques dune classe sontsouligns.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Exemple: package metier;

  • 7/25/2019 1 Support poo java premire partie 1

    55/128

    p Supposant nous voulions ajouter la

    classe Compte une variable qui permet

    de stocker le nombre le comptes crs. Comme la valeur de variable nbComptes

    est la mme pour tous les objets, celle-cisera dclare statique. Si non, elle seraduplique dans chaque nouveau objetcr.

    La valeur de nbComptes est au dpartinitialise 0, et pendant la crationdune nouvelle instance (au niveau duconstructeur), nbCompte est incrmente

    public class Compte {

    // Variables dinstances

    private int code;private float solde;

    // Variable de classe ou statique

    private static int nbComptes;

    public Compte(float solde){

    this.code=++nbComptes;

    this.solde=solde;}

    // Mthode pour verser un montant

    public voidverser(float mt){

    solde+=mt;

    55

    pour initialiser le code du compte.

    }

    // Mthode pour retirer un montantpublic voidretirer(float mt){

    solde-=mt;

    }

    // retourne l'tat du compte

    public String toString(){

    return(" Code="+code+" Solde="+solde);

    }

    // retourne la valeur de nbComptes

    public static int getNbComptes(){

    return(nbComptes);

    }

    }

    Compte

    - code : int

    # solde : float

    - nbComptes:int

    + Compte(float solde)

    + verser(float mt):void

    + retirer(float mt):void

    + toString():String

    + getNbComptes():int [email protected] | ENSET UniversitHassan II Mohammedia

    Application de test

  • 7/25/2019 1 Support poo java premire partie 1

    56/128

    pp

    package test;

    importmetier.Compte;

    public classApplication {

    public static voidmain(String[] args) {

    Compte c1=newCompte(5000);

    Compte c2=newCompte(6000);

    c1:Compte

    Code=1

    Solde=5000

    c2:Compte

    code=2

    solde=6000

    c1:Compte

    Code=1

    Solde=8000

    c1:Compte

    code=1

    solde=6000

    Classe Compte

    nbCompte=0

    getNbComptes()

    Classe Compte

    nbCompte=1

    getNbComptes()

    Classe Compte

    nbCompte=2

    getNbComptes()

    56

    .

    c1.retirer(2000);

    System.out.println(c1.toString());

    System.out.println(Compte.nbComptes)

    System.out.println(c1.nbComptes)}

    }

    verser(float mt)

    retirer(float mt)

    toString()

    verser(float mt)

    retirer(float mt)

    toString()

    verser(float mt)

    retirer(float mt)

    toString()

    verser(float mt)

    retirer(float mt)

    toString()

    Code=1 Solde= 600022 [email protected] | ENSET UniversitHassan II Mohammedia

    Destruction des objets : Garbage Collector

  • 7/25/2019 1 Support poo java premire partie 1

    57/128

    Destruction des objets : Garbage Collector Dans certains langages de programmation, leprogrammeur doit s occuper lui mme de dtruire les

    objets inutilisables. Java dtruit automatiquement tous les objets

    inutilisables en utilisant ce qu on appelle le garbagecollector (ramasseur d ordures). Qui s excuteautomatiquement ds que la mmoire disponible est

    57

    .

    Tous les objets qui ne sont pas retenus par deshandles seront dtruits. Ce phnomne ralenti parfois le fonctionnement de

    java. Pour signaler au garbage collector que vous voulerdtruire un objet dune classe, vous pouvez faire appel

    la mthode finalize() redfinie dans la classe.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Exercice 1 : Modlisation dun segment

  • 7/25/2019 1 Support poo java premire partie 1

    58/128

    Exercice 1 : Modlisation d un segment

    On souhaite crer une application qui permet de manipuler des segments. Un segment est dfini par la valeur de ses deux extrmits extr1 et extr2. Pour crer un segment, il faut prciser les valeurs de extr1 et extr2. Les oprations que lon souhaite excuter sur le segment sont :

    ordonne() : mthode qui permet dordonner extr1 et extr2 si extr1 est suprieur extr2

    extr1 extr2

    58

    . appartient(int x) : retourne si x appartient au segment ou non. toString() : retourne une chane de caractres de type SEGMENT[extr1,extr2]

    Faire une reprsentation UML de la classe Segment. Implmenter en java la classe Segment Crer une application TestSegment qui permet de :

    Crer objet de la classe Segment avec les valeurs extr1=24 et extr2=12. Afficher ltat de cet objet en utilisant la mthode toString(). Afficher la longueur de ce segment. Afficher si le point x=15, appartient ce segment. Changer les valeurs des deux extrmits de ce segment. Afficher nouveau la longueur du segment.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Diagramme de classes

  • 7/25/2019 1 Support poo java premire partie 1

    59/128

    Diagramme de classes

    Segment

    + extr1 : int

    + extr2 : int

    + Segment (int e1,int e2)

    + ordonne()

    + etLon ueur : int

    TestSegment

    + main(String[] args):void

    59

    + appartient(int x) : boolean

    + toString() : String

    [email protected] | ENSET UniversitHassan II Mohammedia

    Solution : Segment.javapackage fig;

  • 7/25/2019 1 Support poo java premire partie 1

    60/128

    packagefig;

    public class Segment {

    public int extr1;public int extr2;

    // Constructeur

    public Segment(int a,int b){

    extr1=a;extr2=b;ordonne();

    }

    public voidordonne(){

    if(extr1>extr2){

    int z=extr1;

    extr1=extr2;

    60

    extr2=z;

    }

    }

    public int getLongueur(){

    return(extr2-extr1);

    }

    public boolean appartient(int x){

    if((x>extr1)&&(x

  • 7/25/2019 1 Support poo java premire partie 1

    61/128

    pp

    packagetest;

    importjava.util.Scanner;

    importfig.Segment;

    public classApplication {

    public static voidmain(String[] args) {Scanner clavier=newScanner(System.in);

    System.out.print("Donner Extr1:");inte1=clavier.nextInt();

    System.out.print("Donner Extr2:");inte2=clavier.nextInt();

    Longueur dusegment[13,67] est :54

    Donner X:77 N'appartient pas au segment[13,67]

    61

    Segment s=newSegment(e1, e2);

    System.out.println("Longueur du"+s.toString()+" est :"+s.getLongueur());

    System.out.print("Donner X:");intx=clavier.nextInt();

    if(s.appartient(x)==true)

    System.out.println(x+" Appartient au "+s);

    else

    System.out.println(x+" N'appartien pas au "+s);

    }

    }[email protected] | ENSET Universit

    Hassan II Mohammedia

    Excution de la classe TestSegment

  • 7/25/2019 1 Support poo java premire partie 1

    62/128

    Pour excuter une application(Classe qui contient la mthodemain) avec Eclipse, on cliqueavec le bouton droit de la sourissur la classe, puis on choisitdans le menu contextuel, Run

    As > Java Application

    62

    Donner Extr1:67

    Donner Extr2:13

    Longueur dusegment[13,67] est :54

    Donner X:7

    7 N'appartient pas au segment[13,67]

    [email protected] | ENSET UniversitHassan II Mohammedia

    Exercice 2

  • 7/25/2019 1 Support poo java premire partie 1

    63/128

    Une cercle est dfini par : Un point qui reprsente son centre : centre(x,y) et un rayon.

    On peut crer un cercle de deux manires : Soit en prcisant son centre et un point du cercle. Soit en prcisant son centre et son rayon

    Les oprations que lon souhaite excuter sur un cercle sont : getPerimetre() : retourne le primtre du cercle getSurface() : retourne la surface du cercle.

    appartient(Point p) : retourne si le point p appartient ou non lintrieur du cercle.

    toStrin : retourne une chane de caractres de t e CERCLE x R

    C(x,y)

    P(x,y)

    R

    63

    1. Etablir le diagramme de classes

    2. Crer les classe Point dfinie par: Les attributs x et y de type int

    Un constructeur qui initialise les valeurs de x et y.

    Une mthode toString().

    3. Crer la classe Cercle

    4. Crer une application qui permet de :a. Crer un cercle dfini par le centre c(100,100) et un point p(200,200)b. Crer un cercle dfini par le centre c(130,100) et de rayon r=40c. Afficher le primtre et le rayon des deux cercles.d. Afficher si le point p(120,100) appartient lintersection des deux cercles ou non.

    [email protected] | ENSET UniversitHassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    64/128

    Hritage et accessibilit

    M.Youssfi

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Hritage

  • 7/25/2019 1 Support poo java premire partie 1

    65/128

    g

    Dans la programmation oriente objet, lhritageoffre un moyen trs efficace qui permet larutilisation du code.

    En effet une classe peut hriter dune autre classe

    65

    es a r u s e es m o es. Lhritage, quand il peut tre exploit, fait gagner

    beaucoup de temps en terme de dveloppementet en terme de maintenance des applications.

    La rutilisation du code fut un argument dterminantpour venter les mthodes orientes objets.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Exemple de problme

  • 7/25/2019 1 Support poo java premire partie 1

    66/128

    p p Supposons que nous souhaitions crer une application qui permet demanipuler diffrents types de comptes bancaires: les compte simple,

    les comptes pargnes et les comptes payants. Tous les types de comptes sont caractriser par:

    Un code et un solde

    Lors de la cration dun compte, son code qui est dfini automatiquement enfonction du nombre de comptes crs; Un compte peut subir les oprations de versement et de retrait. Pour ces

    deux oprations, il faut connatre le montant de lopration.

    66

    Un compte simple est un compte qui possde un dcouvert. Ce qui

    signifie que ce compte peut tre dbiteur jusqu la valeur dudcouvert.

    Un compte Epargne est un compte bancaire qui possde en plus unchamp tauxIntert et une mthode calculIntrt() qui permet demettre jour le solde en tenant compte des interts.

    Un ComptePayant est un compte bancaire pour lequel chaqueopration de retrait et de versement est payante et vaut 5 % dumontant de lopration.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Diagramme de classes

  • 7/25/2019 1 Support poo java premire partie 1

    67/128

    Compte

    - code : int# solde : float- nbComptes : int

    + Compte ( )+ verser (float mt) : void+ retirer (float mt) : void+ toString() : String

    67

    CompteSimple- decouvert : float

    + CompteSimple (float dec)

    + retirer (float mt) : void+ toString() : String

    CompteEpargne- taux : float

    + CompteEparge (float taux)

    + catculInterets () : void+ toString() : String

    ComptePayant

    + ComptePayant ( )

    + verser (float mt) : void+ retirer (float mt) : void+ toString() : String

    [email protected] | ENSET UniversitHassan II Mohammedia

    Implmentation java de la classe Compte

  • 7/25/2019 1 Support poo java premire partie 1

    68/128

    public class Compte {

    private int code;

    protected float solde;

    private static int nbComptes;

    public Compte( ){

    ++nbComptes;

    code=nbComptes;

    this.solde=0;

    68

    public voidverser(float mt){

    solde+=mt;}

    public voidretirer(float mt){

    if(mt

  • 7/25/2019 1 Support poo java premire partie 1

    69/128

    g

    La classe CompteSimple est une classe qui hrite de la classeCompte.

    Pour dsigner lhritage dans java, on utilise le mot extendspublic class CompteSimple extends Compte {

    }

    69

    tout ses membres sauf le constructeur. Dans java une classe hrite toujours dune seule classe. Si une classe nhrite pas explicitement dune autre classe, elle

    hrite implicitement de la classe Object.

    La classe Compte hrite de la classe Object. La classe CompteSimple hrite directement de la classe Compte

    et indirectement de la classe Object.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Dfinir les constructeur de la classe drive

  • 7/25/2019 1 Support poo java premire partie 1

    70/128

    Le constructeur de la classe drive peutfaire appel au constructeur de la classeparente en utilisant le mot super() suivi deses paramtres.

    public class CompteSimple extends Compte {

    70

    pr va e oa ecouvert;

    //constructeurpublicCompteSimple(floatdecouvert){

    super();

    this.decouvert=decouvert;

    }

    }

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Redfinition des mthodes

  • 7/25/2019 1 Support poo java premire partie 1

    71/128

    Quand une classe hrite dune autre classe, elle peut redfinirles mthodes hrites.

    Dans notre cas la classe CompteSimple hrite de la classeCompte la mthode retirer(). nous avons besoin de redfinircette mthode pour prendre en considration la valeur dudcouvert.

    public class CompteSimple extends Compte {

    71

    private float decouvert;

    // constructeurpublic CompteSimple(float decouvert){

    super();

    this.decouvert=decouvert;

    }

    // Redfinition de la mthode retirerpublic voidretirer(floatmt) {

    if(mt-decouvert

  • 7/25/2019 1 Support poo java premire partie 1

    72/128

    Dans la mthode redfinie de la nouvelle classe drive, on peutfaire appel la mthode de la classe parente en utilisant le motsuper suivi dun point et du nom de la mthode

    Dans cette nouvelle classe drive, nous allons redfinir galementla mthode toString().

    public class CompteSimple extends Compte {private float decouvert;

    // constructeur

    72

    // Redfinition de la mthode retirer

    public void retirer(float mt) {

    if(mt+decouvert>solde)

    solde-=mt;

    }

    // Redfinition de la mthode toString

    publicString toString() {return("Compte Simple "+super.toString()+"

    Dcouvert="+decouvert);

    }

    }[email protected] | ENSET Universit

    Hassan II Mohammedia

    Hritage la loupe : Instanciation

  • 7/25/2019 1 Support poo java premire partie 1

    73/128

    Quand on cre une instance duneclasse, la classe parente estautomatiquement instancie et lobjetde la classe parente est associ lobjet cr travers larfrence super injecte par le

    : Compte

    - code=1

    - solde=0

    + verser()

    + retirer()+ toString()

    73

    CompteSimple cs=new CompteSimple(5000);

    Lors de linstanciation, lhritage entreles classes est traduit par unecomposition entre un objet de la classe

    instancie et dun objet de la classeparente qui est cr implicitement.

    cs : CompteSimple

    - decouvert=5000

    - super =

    + retirer()

    + toString()

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Surcharge

  • 7/25/2019 1 Support poo java premire partie 1

    74/128

    Dans une classe, on peut dfinir plusieurs constructeurs. Chacunayant une signature diffrentes (paramtres diffrents)

    On dit que le constructeur est surcharg On peut galement surcharger une mthode. Cela peut dire

    quon peut dfinir, dans la mme classe plusieurs mthodes quiont le mme nom et des signatures diffrentes;

    La si nature dune mthode dsi ne la liste des ar uments avec

    74

    leurs types.

    Dans la classe CompteSimple, par exemple, on peut ajouter unautre constructeur sans paramtre

    Un constructeur peut appeler un autre constructeur de la mmeclasse en utilisant le mot this() avec des paramtres ventuels

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Surcharge de constructeurs

  • 7/25/2019 1 Support poo java premire partie 1

    75/128

    public class CompteSimple extends Compte {private float decouvert;

    //Premier constructeur

    publicCompteSimple(floatdecouvert){

    super();

    this.decouvert=decouvert;

    }

    //Deuxime constructeur

    75

    publicCompteSimple(){

    this(0);}

    }

    On peut crer une instance de la classe CompteSimple en faisant appel

    lun des deux constructeur :

    CompteSimple cs1=new CompteSimple(5000);

    CompteSimple cs2=new CompteSimple();

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    76/128

    Accessibilit

    76

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Accessibilit

  • 7/25/2019 1 Support poo java premire partie 1

    77/128

    Les trois critres permettant d'utiliser une classe sont Qui, Quoi,O. Il faut donc : Que l'utilisateur soit autoris (Qui). Que le type d'utilisation souhait soit autoris (Quoi). Que l'adresse de la classe soit connue (O).

    Pour utiliser donc une classe, il faut :

    77

    Connaitre le package ou se trouve la classe ( ) Importer la classe en spcifiant son package.

    Quest ce quon peut faire avec cette classe: Est-ce quon a le droit de linstancier Est-ce quon a le droit dexploiter les membres de ses instances Est-ce quon a le droit dhriter de cette classe. Est-ce quelle contient des membres statiques

    Connaitre qui a le droit daccder aux membres de cetteinstance.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Les packages (O)

  • 7/25/2019 1 Support poo java premire partie 1

    78/128

    Nous avons souvent utilis la classe System pourafficher un message : System.out.prinln() ,

    En consultant la documentation de java, nous allonsconstater que le chemin d accs complet la classeSystem est java.lang.System.

    78

    lang du dossier java. java.lang.System est le chemin d accs qui prsentela particularit d utiliser un point . commesparateur.

    Java.lang qui contient la classe System est appel package

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Les packages (O)

  • 7/25/2019 1 Support poo java premire partie 1

    79/128

    79

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Les packages (O)

  • 7/25/2019 1 Support poo java premire partie 1

    80/128

    Notion de package: Java dispose d'un mcanisme pour la recherche des classes. Au moment de lexcution, La JVM recherche les classes en priorit :

    Dans le rpertoire courant, c'est--dire celui o se trouve la classeappelante, si la variable d'environnement CLASSPATH n'est pasdfinie ;

    Dans les chemins spcifis par la variable d'environnementCLASSPATH si celle-ci est dfinie.

    Linstruction package:

    80

    Si vous souhaitez qu'une classe que vous avez cre appartienne un

    package particulier, vous devez le spcifier explicitement au moyen del'instruction package, suivie du nom du package. Cette instruction doit tre la premire du fichier. Elle concerne toutes les classes dfinies dans ce fichier.

    Linstruction import Pour utiliser une classe, il faut

    Soit crire le nom de la classe prcde par son package. Soit importer cette classe en la dclarant dans la clause import. Et dans

    ce cas l, seul le nom de la classe suffit pour [email protected] | ENSET Universit

    Hassan II Mohammedia

    Les packages (O) Application:

    packagetest;

    importa.b.c.Client;

    public classApplication {

    public static void main(String[] args) {

  • 7/25/2019 1 Support poo java premire partie 1

    81/128

    packagea.b.c;

    public classClient {

    private intcode;

    privateString nom;

    publicClient(intcode, String nom) {

    this.code= code;

    this.nom= nom;}

    publicString getNom(){

    return(nom);

    public static voidmain(String[] args) {

    Client c=newClient(2,"Salih");

    System.out.println("Nom="+c.getNom());

    }

    }

    81

    public intgetCode(){

    returncode;}

    }

    Pour Compiler la classe Client.java sur ligne de commande: javac -d cheminbin Client.java

    cheminbin reprsente le dossier des fichiers .class.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Les packages (O)

    Les fichiers .jar

  • 7/25/2019 1 Support poo java premire partie 1

    82/128

    j Les fichiers .jar sont des fichiers compresss comme les fichiers .zip selon un

    algorithme particulier devenu un standard. Ils sont parfois appels fichiers d'archives ou, plus simplement, archives. Ces

    fichiers sont produits par des outils de compression tels que Pkzip (sous DOS) ouWinzip (sous Windows), ou encore par jar.exe.

    Les fichiers .jar peuvent contenir une multitude de fichiers compresss avecl'indication de leur chemin d'accs. Les packages standard de Java sont organiss de cette manire, dans un fichier

    nomm rt.jar plac dans le sous-rpertoire lib du rpertoire o est install le JDK.

    82

    Dans le cas d'une installation standard de Java 6 sur le disque C:, le chemin d'accscomplet la classe System est donc : c:\jdk1.6\jre\lib\rt.jar\java\lang\System

    Cration de vos propres fichiers .jar ou .zip

    Vous pouvez utiliser le programme jar.exe du jdk pour crer les fichiers.jar

    Syntaxe : jar [options] nomarchive.jar fichiers

    Exemple qui permet darchive le contenu du dossier a : C:\AJ2\TP_ACC\bin> jar cf archive.jar a

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Ce qui peut tre fait(Quoi)

  • 7/25/2019 1 Support poo java premire partie 1

    83/128

    Nous avons maintenant fait le tour de la question O ? Pour qu'une classe puisse tre utilise (directement ou par

    l'intermdiaire d'un de ses membres), il faut non seulement trecapable de la trouver, mais aussi qu'elle soit adapte l'usage

    que l'on veut en faire. Une classe peut servir plusieurs choses :

    Crer des objets, en tant instancie.

    83

    Crer de nouvelles classes, en tant tendue.

    On peut utiliser directement ses membres statiques (sans qu'ellesoit instancie.) On peut utiliser les membres de ses instances.

    Les diffrents modificateurs qui permettent dapporter des

    restrictions lutilisation dune classe sont: abstract, final, static, synchronized et native

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Classe abstraite

  • 7/25/2019 1 Support poo java premire partie 1

    84/128

    Une classe abstraite est une classe qui ne peut pas treinstancie. La classe Compte de notre modle peut tre dclare

    abstract pour indiquer au compilateur que cette classe ne

    peut pas tre instanci. Une classe abstraite est gnralement cre pour en faire

    riv r n v r ri

    84

    publicabstractclass Compte {private int code;

    protected float solde;

    private static int nbComptes;

    // Constructeurs

    // Mthodes

    }[email protected] | ENSET Universit

    Hassan II Mohammedia

    Les mthodes abstraites

  • 7/25/2019 1 Support poo java premire partie 1

    85/128

    Une mthode abstraite peut tre dclare lintrieur dune classe abstraite.

    Une mthode abstraite est une mthode quina pas de dfinition.

    85

    doit tre redfinie dans las classes drives. Exemple :

    On peut ajouter la classe Compte une mthode

    abstraite nomme afficher() pour indiquer quetous les comptes doivent redfinir cette mthode.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    86/128

    Interfaces Une interface est une sorte de classe abstraite qui ne contient que des mthodes

  • 7/25/2019 1 Support poo java premire partie 1

    87/128

    abstraites. Dans java une classe hrite dune seule classe et peut hriter en mme temps de

    plusieurs interface. On dit quune classe implmente une ou plusieurs interface. Une interface peut hriter de plusieurs interfaces. Exemple dinterface:

    public interface Solvable {public voidsolver();

    public double getSole();

    }

    87

    Pour indiquer que la classe CompteSimple implmente cette insterface on peutcrire:

    public class CompteSimple extends Compte implements Solvable {

    private float decouvert;

    public voidafficher() {

    System.out.println("Solde="+solde+" Dcouvert="+decouvert);

    }

    public double getSole() {return solde;

    }

    public voidsolver() {

    this.solde=0;

    }}

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Classe de type final

  • 7/25/2019 1 Support poo java premire partie 1

    88/128

    Une classe de type final est une classes qui ne peut pas tredrive.

    Autrement dit, on ne peut pas hriter dune classe final. La classe CompteSimple peut tre dclare final en crivant:public final class CompteSimple extends Compte {

    88

    public voidafficher() {

    System.out.println("Solde="+solde+"

    Dcouvert="+decouvert);

    }

    }

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Variables et mthodes final

  • 7/25/2019 1 Support poo java premire partie 1

    89/128

    Une variable final est une variable dont la valeur ne peut paschanger. Autrement dit, cest une constante: Exemple : final double PI=3.14;

    Une mthode final est une mthode qui ne peut pas treredfinie dans les classes drives. Exemple : La mthode verser de la classe suivante ne peut pas

    tre redfinie dans les classes drives car elle est dclare final public class Compte {

    89

    private int code;protected float solde;

    private static int nbComptes;

    public finalvoidverser(float mt){

    solde+=mt;

    }

    public voidretirer(float mt){

    if(mt

  • 7/25/2019 1 Support poo java premire partie 1

    90/128

    qui appartiennent la classe et sont partags par toutes les instancesde cette classe. Les membres statiques ne sont pas instancis lors de linstanciation de

    la classe Les membres statiques sont accessible en utilisant directement le nom

    de la classe qui les contient. Il nest donc pas ncessaire de crer une instance dune classe pour

    utiliser les membres statiques.

    90

    la classe qui les contient.

    Exemple dutilisation: double d=Math.sqrt(9);

    Ici nous avons fait appel la mthode sqrt de la classe Math sans creraucune instance. Ceci est possible car la mthode sqrt est statique.

    Si cette mthode ntait pas statique, il faut tout dabord crer un objet de laclasse Math avant de faire appel cette mthode: Math m=new Math(); double d=m.sqrt(9);

    Les seuls membres dune classe, qui sont accessibles, sansinstanciation sont les membres statiques.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Qui peut le faire (Qui): private:

    L' t i ti private t l l t i ti Ell ' li bd' l ( i bl th d t l i t )

  • 7/25/2019 1 Support poo java premire partie 1

    91/128

    L'autorisation private est la plus restrictive. Elle s'applique aux membresd'une classe (variables, mthodes et classes internes). Les lments dclars private ne sont accessibles que depuis la classe qui

    les contient. Ce type d'autorisation est souvent employ pour les variables qui ne doivent

    tre modifies ou lues qu' l'aide d'un getter ou d'un setter.

    public: Un membre public dune classe peut tre utilis par nimporte quelle autres

    classe. En UML le membres ublic sont indi us ar le si ne +

    91

    protected:

    Les membres d'une classe peuvent tre dclars protected. Dans ce cas, l'accs en est rserv aux mthodes des classes appartenant

    au mme package aux classes drives de ces classes, ainsi qu'aux classes appartenant aux mmes packages que les classes drives.

    Autorisation par dfaut : package L'autorisation par dfaut, que nous appelons package, s'applique aux classes,

    interfaces, variables et mthodes. Les lments qui disposent de cette autorisation sont accessibles toutes les

    mthodes des classes du mme package.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Rsum: Hritage U l t h it d t l tili t l tt d

  • 7/25/2019 1 Support poo java premire partie 1

    92/128

    Une classe peut hriter dune autre classe en utilisant le motextends. Une classe Hrite dune autre tout ses membres sauf le

    constructeur. Il faut toujours dfinir le constructeur de la nouvelle classe

    drive. Le constructeur de la classe drive peut appeler le constructeur

    de la classe parente en utilisant le mot super(), avec la liste des

    92

    . Quand une classe hrite dune autre classe, elle a le droit de

    redfinir les mthodes hrites. Dans une mthode redfinie, on peut appeler la mthode de la

    classe parente en crivant le mot super suivi dun point et dunom de la mthode parente. (super.mthode()).

    Un constructeur peut appeler un autre constructeur de la mmeclasse en utilisant le mot this() avec des paramtres duconstructeur.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Rsum: Accessibilt P tili l il f t it

  • 7/25/2019 1 Support poo java premire partie 1

    93/128

    Pour utiliser une classe il faut connaitre: O trouver la classe (package) Quels sont les droits daccs cette classe (Quoi?)

    Quelles sont les classes qui ont le droit daccder aux membresde cette classe (Qui?)

    93

    Pour utiliser une classe il faut importer son package en utilisantlinstruction import

    Pour dclarer le package dappartenance dune classe on utiliselinstruction package

    La variable denvironnement classpath permet de dclarer leschemins ou la JVM trouvera les classes dune application

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Rsum: Accessibilt

    Quoi?b t t

  • 7/25/2019 1 Support poo java premire partie 1

    94/128

    Quoi? abstract : Une classe abstraite est une classe qui ne peut pas tre instancie. Une mthode abstraite est une mthode qui peut tre dfinie lintrieur dune classe

    abstraite. Cest une mthode qui na pas de dfinition. Par consquent, elle doit treredfinie dans les classes drives.

    Une interface est une sorte de classe abstraite qui ne contient que des mthodesabstraites. Dans java une classe hrite toujours dune seule classe et peut implmenter plusieurs

    interfaces.

    94

    Une classe final est une classe qui ne peut pas tre drive.

    Une mthode final est une mthode qui ne peut pas tre redfinie dans les classesdrives. Une variable final est une variable don la valeur ne peut pas changer On utilise final pour deux raisons: une raison de scurit et une raison doptimisation

    static: Les membres statiques dune classe appartiennent la classe et partags par toutes ses

    objets Les membres statiques sont accessible en utilisant directement le nom de la classe Les membres statiques sont accessible sans avoir besoin de crer une instance de la

    classe qui les contient Les membres statiques sont galement accessible via les instances de la classe qui les

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Rsum: Accessibilt

    Q i?

  • 7/25/2019 1 Support poo java premire partie 1

    95/128

    Qui? Java dispose de 4 niveaux dautorisations: private : protected:

    ublic:

    95

    package (Autorisation par dfaut)

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Travail faire

  • 7/25/2019 1 Support poo java premire partie 1

    96/128

    Implmenter la classe Compte

    Implmenter la classe CompteSimple Implmenter la classe CompteEpargne

    96

    mp men er a c asse omp e ayan Crer une application pour tester les

    diffrentes classes.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Compte.javapackage metier; // Getters et Setters

    public int getCode() {

  • 7/25/2019 1 Support poo java premire partie 1

    97/128

    public abstract class Compte {

    private int code;

    protected float solde;

    private static int nbComptes;

    public Compte(float s){

    code=++nbComptes;

    this.solde=s;

    return code;

    }

    public float getSolde() {

    return solde;

    }

    public static int getNbComptes() {return nbComptes;

    }

    }

    97

    }

    public voidretirer(float mt){

    if(mt

  • 7/25/2019 1 Support poo java premire partie 1

    98/128

    public final class CompteSimpleextends Compte {

    private float decouvert;

    // Constructeurs

    public CompteSimple(float s,float d){super(s);

    this.decouvert=d;

    }

    return decouvert;

    }

    public voidsetDecouvert(floatdecouvert) {

    this.decouvert = decouvert;

    }}

    98

    super();

    }

    public voidretirer(float mt) {

    if(solde+decouvert>mt) solde-=mt;

    }

    public String toString() {

    return "Compte Simple"+super.toString()+"

    Solde="+solde;}

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    CompteEpargne.javapackage metier;

    public class CompteEpargne extends

    // Getters et Setters

    public float getTaux() {return taux;

  • 7/25/2019 1 Support poo java premire partie 1

    99/128

    public class CompteEpargne extendsCompte {

    private float taux;

    //Constructeurs

    public CompteEpargne() {this(0,6);

    }

    return taux;

    }

    public voidsetTaux(float taux) {

    this.taux = taux;

    }

    }

    99

    solde,float taux) {

    super(solde);

    this.taux=taux;}

    public voidcalculInterets(){

    solde=solde*(1+taux/100);

    }

    public String toString() {

    return "Compte Epargne"+super.toString()+" Taux="+taux;

    }

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    ComptePayant.javapackage metier;

  • 7/25/2019 1 Support poo java premire partie 1

    100/128

    public class ComptePayantextends Compte {

    // Constructeur

    public ComptePayant(floatsolde) {

    super(solde);

    }

    public voidverser(float mt) {

    100

    .verser m ;

    super.retirer(mt*5/100);

    }public voidretirer(float mt) {

    super.retirer(mt);

    super.retirer(mt*5/100);

    }

    public String toString() {

    return super.toString();

    }

    }

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Application TestCompte.javapackage test;

    import metier *;

    // Test de ComptePayant

    ComptePayant c3=newComptePayant(5000);

  • 7/25/2019 1 Support poo java premire partie 1

    101/128

    import metier. ;

    public class TestCompte {

    public static voidmain(String[] args) {

    // Tester la classe Compte Simple

    CompteSimple c1=new CompteSimple(8000,4000);

    System.out.println(c1.toString());c1.verser(3000);

    c1.retirer(5000);

    c1.setDecouvert(5500);

    p y ( );

    System.out.println(c3);

    c3.verser(6000);

    c3.retirer(4000);

    System.out.println(c3);

    }

    }

    101

    ys em.ou .pr n n c . o r ng ;

    // Tester la classe Compte Epargne

    CompteEpargne c2=new CompteEpargne(50000,5);

    System.out.println(c2.toString());

    c2.verser(30000);

    c2.retirer(6000);

    c2.calculInterets();

    System.out.println(c2.toString());

    c2.setTaux(6);

    c2.calculInterets();

    System.out.println(c2);

    [email protected] | ENSET Universit

    Hassan II Mohammedia

  • 7/25/2019 1 Support poo java premire partie 1

    102/128

    Polymorphisme

    102

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Polymorphisme

  • 7/25/2019 1 Support poo java premire partie 1

    103/128

    Le polymorphisme offre aux objets lapossibilit d appartenir plusieurs catgories la fois.

    103

    ,

    appris l'cole qu'il tait impossibled'additionner des pommes et des oranges Mais, on peut crire l expression suivante:

    3 pommes + 5 oranges = 8 fruits

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Polymorphisme

  • 7/25/2019 1 Support poo java premire partie 1

    104/128

    Le sur-casting des objets: Une faon de dcrire l'exemple consistant additionner des

    pommes et des oranges serait d'imaginer que nous disonspommes et oranges mais que nous manipulons en fait des fruits.Nous pourrions crire alors la formule correcte :

    104

    3 (fruits) pommes

    + 5 (fruits) oranges---------------------------------------------

    = 8 fruits

    Cette faon de voir les choses implique que les pommes et les

    oranges soient "transforms" en fruits pralablement l'tablissement du problme. Cette transformation est appelesur-casting

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Instanciation et hritage

  • 7/25/2019 1 Support poo java premire partie 1

    105/128

    Considrons lexemple suivant:

    Fruit

    poids:int

    105

    affiche():void

    Pomme

    Pomme(int p)affiche():void

    affichePoids()

    Orange

    Orange(int p)affiche():void

    affichePoids()

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Instanciation et hritagepublic abstract classFruit{

    intpoids;publicFruit(){

    public classOrange extendsFruit{

    publicOrange(intp){poids=p;

  • 7/25/2019 1 Support poo java premire partie 1

    106/128

    p

    System.out.println("Cration d'un

    fruit");

    }

    public voidaffiche(){

    System.out.println("c'est un fruit");}

    }

    p p

    System.out.println("cration d'une

    Orange de "+poids+" grammes ");

    }

    public voidaffiche(){

    System.out.println("C'est uneOrange");

    }

    public voidaffichePoids(){

    106

    public classPolymorphisme{

    public static voidmain(String[] args){

    Pomme p=newPomme(72);

    Orange o=newOrange(80);

    }

    }

    pu c c ass omme ex en s ru

    publicPomme(intp){

    poids=p;

    System.out.println("cration d'une pomme

    de "+poids+" grammes ");

    }

    public voidaffiche(){

    System.out.println("C'est une pomme");

    }

    public voidaffichePoids(){

    System.out.println("le poids de la pomme

    est:"+poids+" grammes");

    }

    }

    System.out.pr nt n" e po s e a

    Orange est:"+poids+" grammes");

    }}

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Instanciation et hritage

  • 7/25/2019 1 Support poo java premire partie 1

    107/128

    Le rsultat affich par le programme est:Cration d'un fruit

    Cration d'une pomme de 72 grammes

    Cration d'un fruit

    '

    Instanciation et hritage

    107

    Nous constatons qu'avant de crer une Pomme,le programme cre un Fruit, comme le montrel'excution du constructeur de cette classe. Lamme chose se passe lorsque nous crons une

    Orange

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Sur-casting des objets

  • 7/25/2019 1 Support poo java premire partie 1

    108/128

    public classPolymorphisme2{public static voidmain(String[] args){

    // Sur-casting implicite

    Considrons lexemple suivant:

    108

    Fruit f1=newOrange(40);

    // Sur-casting expliciteFruit f2=(Fruit)newPomme(60);

    // Sur-casting implicite

    f2=newOrange(40);

    }

    }

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    U bj t d t P t t ff t h dl d tSur-casting des objets

  • 7/25/2019 1 Support poo java premire partie 1

    109/128

    Un objet de type Pomme peut tre affect un handle de typefruit sans aucun problme : Fruit f1; f1=new Pomme(60);

    Dans ce cas lobjet Pomme est converti automatiquement en

    Sur casting des objets

    109

    . On dit que lobjet Pomme est sur-cast en Fruit. Dans java, le sur-casting peut se faire implicitement. Toutefois, on peut faire le sur-casting explicitement sans quil soit

    ncessaire. La casting explicit se fait en prcisant la classe vers laquelle on

    convertit lobjet entre parenthse. Exemple : f2=(Fruit)new Orange(40);

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Sous-Casting des objets

  • 7/25/2019 1 Support poo java premire partie 1

    110/128

    public class Polymorphisme3{public static voidmain(String[] args){

    Fruit f1;

    Considrons lexemple suivant:

    110

    f1=new Pomme(60);

    f2=new Orange(40);f1.affichePoids();

    ((Pomme)f1).affichePoids();

    }

    }

    rreur e comp a on:Polymorphisme3.java:5: cannot resolve symbol

    symbol : method affichePoids ()location: class Fruit

    f1.affichePoids();

    ^

    1 error

    Solution : Sous-casting explicit

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Ce message indique que lobjet f1 qui est de type Fruit ne possde pasSous-casting des objets

  • 7/25/2019 1 Support poo java premire partie 1

    111/128

    Ce message indique que l objet f1 qui est de type Fruit ne possde pasla mthode affichePoids().

    Cela est tout fait vrai car cette mthode est dfinie dans les classesPomme et Oranges et non dans la classe Fruit.

    En fait, mme si le handle f1 pointe un objet Pomme, le compilateur netient pas en considration cette affectation, et pour lui f1 est un Fruit.

    Il faudra donc convertir explicitement lobjet f1 qui de type Fruit en

    g j

    111

    Pomme.

    Cette conversion sappelle Sous-casting qui indique la conversion dunobjet dune classe vers un autre objet dune classe drive.

    Dans ce cas de figure, le sous-casting doit se faire explicitement. Lerreur de compilation peut tre vit en crivant la syntaxe suivante :

    ((Pomme)f1).affichePoids();

    Cette instruction indique que lobjet f1 , de type Fruit, est converti enPomme, ensuite la mthode affichePoids() de lobjet Pomme est appelce qui est correcte.

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Dans la plupart des langages lorsque le compilateur rencontre un appel deLate Binding

  • 7/25/2019 1 Support poo java premire partie 1

    112/128

    Dans la plupart des langages, lorsque le compilateur rencontre un appel demthode, il doit tre mme de savoir exactement de quelle mthode il s'agit.

    Le lien entre l'appel et la mthode est alors tabli au moment de la compilation.Cette technique est appeleearly binding, que l'on pourrait traduire parliaison

    prcoce. Java utilise cette technique pour les appels de mthodes dclares final. Elle a l'avantage de permettre certaines optimisations.

    g

    112

    , ,dulate binding(liaison tardive).

    Dans ce cas, le compilateur n'tablit le lien entre l'appel et la mthode qu'aumoment de l'excution du programme.

    Ce lien est tabli avec la version la plus spcifique de la mthode. Dans notre cas, nous la mthode affiche() possde 3 versions dfinies dans les

    classes Fruit, Pomme et Orange. Grce au late binding, java est capable de dterminer, au moment de

    lexcution, quelle version de mthode qui sera appele ce que nous pouvonsvrifier par le programme suivant :

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    public class Polymorphisme4{Late Binding

  • 7/25/2019 1 Support poo java premire partie 1

    113/128

    public class Polymorphisme4{

    public static voidmain(String[] args){

    Fruit f1;

    Fruit f2;

    f1=new Pomme(60);

    f2=new Orange(40);

    f1.affiche();//((Pomme)f1).affiche();

    g

    113

    f2.affiche();

    }

    }

    Lexcution de ce programme donne :Cration d'un fruitCration d'une pomme de 60 grammesCration d'un fruit

    Cration d'une orange de 40 grammesC'est une pommeC'est une Orange

    [email protected] | ENSET UniversitHassan II Mohammedia

    Polymorphisme

  • 7/25/2019 1 Support poo java premire partie 1

    114/128

    Pour rsumer, un objet est une instance de : sa classe, toutes les classes parentes de sa classe, toutes les interfaces qu'il implmente,

    114

    toutes les interfaces parentes des interfaces qu'ilimplmente,

    toutes les interfaces qu'implmentent les classes parentes desa classe,

    toutes les interfaces parentes des prcdentes.

    [email protected] | ENSET UniversitHassan II Mohammedia

    T bl C ll i

  • 7/25/2019 1 Support poo java premire partie 1

    115/128

    Tableaux et Collections

    [email protected] | ENSET Universit

    Hassan II Mohammedia

    Tableaux de primitives liste0

    123

    5

    1223

  • 7/25/2019 1 Support poo java premire partie 1

    116/128

    Tableaux de primitives: Dclaration :

    Exemple : Tableau de nombres entiers int liste

    456

    78910

    116

    liste est un handle destin pointer vers un tableau dentier

    Cration du tableau liste = new int[11];

    Manipulation des lments du tableau: liste[0]=5; liste[1]=12; liste[3]=23;

    for(int i=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    117/128

    Fruit[] lesFruits;

    Cration du tableau lesFruits = newFruit[5];

    Cration des objets: lesFruits[0]=newPomme(60); lesFruits[1]=newOrange(100);

    34

    affiche()

    affichePoids()

    :Orange

    poids=60

    affiche()

    Manipulation des objets:

    for(inti=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    118/128

    Supprimer un objet du tableau Rechercher des objets selon des critres Trier le tableau dobjets Contrler les objets du tableau Etc

    Dans un problme, les tableaux peuvent tre utiliss quand la

    118

    mens on u a eau es xe. Dans le cas contraire, il faut utiliser les collections Java fournit plusieurs types de colections:

    ArrayList Vector Iterator HashMap Etc

    Dans cette partie du cours, nous allons prsenter uniquementcomment utiliser les collections ArrayList, Vector, Iterator et HashMap

    Vous aurez loccasion de dcouvrir les autres collections dans lesprochains cours [email protected] | ENSET Universit

    Hassan II Mohammedia

    Collection ArrayList ArrayList est une classe du package java.util, qui implmente linterface List. Dclaration dune collection de type List qui devrait stocker des objets de typeFruit:

    List fruits;

  • 7/25/2019 1 Support poo java premire partie 1

    119/128

    List Fruit fruits;

    Cration de la liste: fruits=newArrayList();

    Ajouter deux objets de type Fruit la liste: fruits.add(newPomme(30)); fruits.add(newOrange(25));

    119

    En utilisant la boucle classique for

    for(inti=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    120/128

    List fruits;

    // Cration de la liste

    fruits=newArrayList();

    // Ajout de 3 objets Pomme, Orange et Pomme la liste

    fruits.add(newPomme(30));

    120

    fruits.add(newPomme(60));

    // Parcourir tous les objetsfor(inti=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    121/128

    Cration de la liste: fruits=newVector();

    Ajouter deux objets de type Fruit la liste: fruits.add(newPomme(30));

    fruits.add(newOrange(25));

    121

    En utilisant la boucle classique for

    for(inti=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    122/128

    Vector fruits;

    // Cration du vecteur

    fruits=newVector();

    // Ajout de 3 objets Pomme, Orange et Pomme au vecteur

    fruits.add(newPomme(30));

    122

    fruits.add(newPomme(60));

    // Parcourir tous les objetsfor(inti=0;i

  • 7/25/2019 1 Support poo java premire partie 1

    123/128

    collection. Exemple :

    Cration dun vecteur de Fruit.Vector fruits=newVector();

    Ajouter des fruits aux vecteurfruits.add(newPomme(30));

    123

    fruits.add(newOrange(25));

    fruits.add(newPomme(60));

    Cration dun Iterator partir de ce vecteurIterator it=fruits.iterator();

    Parcourir lIterator:while(it.hasNext()){

    Fruit f=it.next();

    f.affiche();

    }

    Notez bien que, aprs avoir parcouru un iterator, il devient [email protected] | ENSET Universit

    Hassan II Mohammedia

    Collection de type HashMap

    La collection HashMap est une classe qui implmente linterface Map. Cettecollection permet de crer un tableau dynamique dobjet de type Object quisont identifis par une cl.Dclaration et cration dune collection de type HashMap qui contient des

  • 7/25/2019 1 Support poo java premire partie 1

    124/128

    Dclaration et cration d une collection de type HashMap qui contient desfruits identifis par une cl de type String : Map fruits=newHashMap();

    Ajouter deux objets de type Fruit la colelction fruits.put("p1", newPomme(40));

    fruits. ut("o1", newOran e(60));

    key value

    p1

    :Pommefruits

    124

    Rcuprer un objet ayant pour cl "p1 Fruit f=fruits.get("p1");

    f.affiche();

    Parcourir toute la collection:Iterator it=fruits.keySet().iterator();

    while(it.hasNext()){

    String key=it.next();

    Fruit ff=fruits.get(key);

    System.out.println(key);

    ff.affiche();

    }

    o:Orange

    [email protected] | ENSET UniversitHassan II Mohammedia

    Associations entre classes

    Une agence gre plusieurs clients.

  • 7/25/2019 1 Support poo java premire partie 1

    125/128

    g g p Chaque client possde un seul compte Le compte peut tre soit un compteSimple ou un

    compteEpargne.

    125

    Agence Client

    CompteSimple CompteEpargne

    Compte

    1 *1

    1

    gre

    possde

    [email protected] | ENSET UniversitHassan II Mohammedia

    Traduction des association

    La premire association gre de type ( 1---*) entre Agence etClient se traduit par :

  • 7/25/2019 1 Support poo java premire partie 1

    126/128

    Client se traduit par : Cration dun tableau dobjets Client ou dun vecteur comme

    attribut de la classe Agence. Ce tableau ou ce vecteur sert rfrencer les clients de lagence.

    ----

    126

    Cration dun handle de type Compte dans la classe Client. Ce handle sert rfrencer lobjet Compte de ce client.

    La troisime rgne de gestion est une relation dhritage et nonune association.

    [email protected] | ENSET UniversitHassan II Mohammedia

    Traduction des association

  • 7/25/2019 1 Support poo java premire partie 1

    127/128

    Agence Client

    Compte

    1 *1

    1

    ossde

    127

    CompteSimple CompteEpargne

    gre

    Agence a=new Agence();Client cli=new Client();CompteSimple c1=new CompteSimple();

    cli.monCompte=c1;a.addClient(cli);

    [email protected] | ENSET UniversitHassan II Mohammedia

    Exemple de diagramme

    dobjets

    Agence a=new Agence();Client cli=new Client();CompteSimple c1=new CompteSimple();cli.monCompte=c1;

    a.lesClients.addElement(cli);

  • 7/25/2019 1 Support poo java premire partie 1

    128/128

    a: Agence

    cli: Client

    lesClients

    monCompte

    c1: CpteSimple

    128

    : Client

    monCompte

    : CpteEpargne

    : Client

    monCompte

    : CpteSimple

    addClient(Client c)

    [email protected] | ENSET UniversitHassan II Mohammedia