Programmation Orientée Objet en JAVA.doc

Embed Size (px)

Citation preview

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    1/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 1 09/03/01

    DI GALLO Frdric

    Programmation Oriente

    Objets en JAVACours du Cycle dApprofondissement

    Cours dispens par B. Chaulet

    CNAM ANGOULEME 2000-2001

    class

    { public

    rivate

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    2/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 2 09/03/01

    PP

    RR

    OO

    GG

    RR

    AA

    MM

    MM

    AA

    TT

    IIOO

    NN

    OORRIIEENNTTEEEE

    OOBBJJEETTSS ::

    GGnnrraalliittss ssuurr

    JJAAVVAA

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    3/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 3 09/03/01

    PROGRAMMATION JAVA: GENERALITES

    I. PROGRAMMATION CLASSIQUE ET ORIENTEE OBJETS ..........................................................4

    II. CLASSE ET OBJET ...............................................................................................................5III. LES DONNEES DUNE CLASSE .............................................................................................7

    IV. LES METHODES DUNE CLASSE...........................................................................................9

    4.1) Mthodes publiques de type Constructeur ...........................................................12

    4.2) Mthodes publiques de type Accesseur ...............................................................14

    4.3) Les mthodes de type binaire.....................................................................................18

    4.4) La transmission de paramtres..................................................................................22

    4.5) Le mot cl this ......................................................................................................23

    V. LES VARIABLES ET METHODES DE CLASSE .......................................................................24

    VI. TRAVAUX PRATIQUES......................................................................................................25

    6.1) Utilisation de la classe String....................................................................................25

    6.2) Cration dune classe ................................................................................................27

    VII. ANNEXE : LES ETAPES DE DEVELOPPEMENT EN JAVA.......................................................28

    LES COLLECTIONS EN JAVA

    I. INTRODUCTION..........................................................................................................31

    II. LES TABLEAUX...........................................................................................................33

    III. LES VECTEURS ...........................................................................................................36

    3.1) La classe gnrique Object ..................................................................................36

    3.2) Les mthodes de la classe Vector ........................................................................38

    3.3) La classe Enumeration ........................................................................................40

    3.4) Les packages..............................................................................................................41IV. LES DICTIONNAIRES .........................................................................................................42

    V. LES FLUX .........................................................................................................................44

    5.1) Oprations sur un fichier...........................................................................................44

    5.2) La gestion des erreurs ...............................................................................................46

    L'HERITAGE EN JAVA

    I. INTRODUCTION..........................................................................................................54

    II. DEFINITION DE L'HERITAGE .............................................................................................56

    2.1) Le constructeur d'une classe drive.........................................................................57

    2.2) Les proprits d'une classe drive ...........................................................................58

    2.3) Les mthodes d'une classe drive ............................................................................59III. MANIPULATIONS D'OBJETS ISSUS DE CLASSE MERE ET FILLE............................................60

    EXEMPLES DE CLASSES JAVA

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    4/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 4 09/03/01

    IINNFFOORRMMAATTIIQQUUEE CCNNAAMM AANNGGOOUULLEEMMEE 22000000--22000011

    PPRROOGGRRAAMMMMAATTIIOONN JJAAVVAA:: GGEENNEERRAALLIITTEESS

    I. Programmation classique et oriente objets

    En programmation classique le dveloppement dune application se dcompose en deux

    tapes bien distinctes :

    La dfinition des structures de donnes capables daccueillir linformation que lonveut grer. Ainsi, en programmation classique, pour stocker en mmoire centraleune fraction on a introduit un enregistrement compos de 2 champs de type Entier

    nomms Numerateur et Denominateur .

    La conception de fonctions et de procdures qui travaillent sur les structures de

    donnes conues ltape prcdente et qui permettent de mettre en uvre tous les

    besoins exprims dans le cahier des charges.

    Cette forme de programmation, qui spare les donnes des traitements, rend difficile la

    mise en place de contrles, destins garantir la cohrence et lintgrit des donnes.

    Lutilisateur peut en effet accder directement aux donnes, sans utiliser les fonctions mises

    sa disposition. Par exemple, le programme dutilisation des fractions ci-dessous, dfinit

    partiellement la fraction F ce qui va entraner des erreurs lors de lappel certaines fonctions

    prsentes dans la bibliothque Fraction.h .

    #include

    main()

    { struct Fraction F, R;

    F.Numerateur = 3 ;

    R=Inverse (F) ;

    }

    De plus, toute modification de limplmentation des donnes des consquences sur

    lensemble des fonctions travaillant sur ces donnes, et donc sur lensemble des traitements

    utilisant ces fonctions. Si lon choisit par exemple, pour des raisons doptimisation,

    dimplanter une fraction au moyen dune chane de caractres ( 4/5 ), toutes les fonctions

    de la bibliothque Fraction.h sont modifier au niveau du type des paramtres dentre ou

    de sortie. Il va de soi que ces changements imposent, leur tour, une modification de tous les

    programmes qui rfrencent la bibliothque Fraction.h .

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    5/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 5 09/03/01

    La programmation oriente objets a t introduite afin de remdier ces inconvnients.

    Son principe de base consiste :

    dune part regrouper (ou "encapsuler") au sein dune mme unit (appele

    classe) les donnes et les traitements. Par exemple, on dfinira la classe Fraction

    de la manire suivante :

    class Fraction

    { private int Numerateur ; dclaration de variables destines

    private int Denominateur ; mmoriser une fraction.

    public void initialiser(int n, int d)

    {Numerateur = n ;

    Denominateur = d ; traitements sur les fractions.

    }

    }

    Une fraction est dfinie par un numrateur, un dnominateur ainsi que par toutes lesoprations mathmatiques existantes sur les fractions.

    dautre part contrler laccs aux donnes en les dclarant prives ce qui

    obligera lutilisateur de la classe employer les traitements encapsuls pour agir sur

    celles-ci.

    En conclusion, la programmation oriente objets a deux avantages principaux:

    - contrler l'accs aux donnes,

    - permettre la modification des classes sans avoir d'incidence sur les

    programmes des utilisateurs.

    II. Classe et objet

    Une classe est une description abstraite de structure de donnes et de traitements destine mmoriser et grer une ralit ou une notion.Par exemple la classe Fraction permet de

    mmoriser des fractions et de mettre en uvre des oprations sur ces dernires.

    A partir dune classe, tout langage objet permet (par lintermdiaire de l'oprateurnew) decrer des objets qui seront des emplacements en mmoire centrale destins contenir

    effectivement linformation manipule. Ces objets sont appels instance et lopration de

    cration : instanciation. Dans louvrage Java, la synthse , les auteurs dfinissent uneclasse comme un "moule" partir duquel on peut obtenir autant dobjets que ncessaires.

    Le programme Java suivant illustre la cration dun objet de la classe Fraction .

    Fraction F; // dclaration dune variable qui va pointer sur un objet : Fraction ;// F contient la valeur null

    F= new Fraction() ; // cration dun objet Fraction , c--d. allocation en mmoire centrale// dun espace destin recevoir la valeur dune fraction.

    // la variable F contient ladresse de cet emplacement.

    Numerateur

    FDenominateur

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    6/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    7/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 7 09/03/01

    III. Les donnes dune classe

    Toute classe comporte une partie donnes, dans laquelle on dcrit les emplacements

    mmoires - appels variables dinstance - qui seront utiles la mmorisation delinformation que lon veut grer. Ces emplacements sont en fait allous chaque

    instanciation et sont caractriss par un nom et un type qui peut tre simple ou structur.

    La classe Fraction utilise, pour mmoriser une fraction, deux variables dinstances detype simple Entier : Numerateur et Denominateur. A chaque instanciation de la classe

    Fraction, il y aura cration de ces deux variables comme le montre le schma ci-dessous :

    Numerateur

    Fraction F1, F2 ; Denominateur

    F1=New Fraction() ;F2=New Fraction() ;

    Numerateur

    Denominateur

    On remarque donc, qu un moment donn, une variable dinstance existe en autantdexemplaires quil y a dobjets instancis.

    La syntaxe Java pour dclarer les variables dinstance dune classe est la suivante:

    SpcificateurAccs NomType NomVariable [=ValeurInitiale]

    Spcificateur daccs reprsente le niveau de protection de la donne; 2 niveaux Java:

    - public : laccs direct la donne est possible depuis tout programme

    dutilisation de la classe par la rfrence : VariableObjet.VariableDInstance - private : laccs direct la donne nest pas possible depuis un programme

    dutilisation de la classe. Lutilisateur devra utiliser des traitements encapsuls

    pour lire ou mettre jour ces donnes.

    Le programme ci-dessous illustre les consquences de laffectation des spcificateurs :- private la variable Numerateur ,- public la variable Denominateur dans lutilisation de la classe

    Fraction :

    Fraction F ;

    F=New Fraction()

    F.Numerateur =2 // affectation refuse la compilation car la variable Numerateur est prive

    F.Denominateur = 3 // affectation autorise car la variable Denominateur est publique

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    8/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 8 09/03/01

    La valeur initiale sera la valeur affecte dans la variable dinstance lors de la cration

    dun objet. Dans le cas o cette valeur nest pas prcise, cest une valeur qui dpend du

    type de la variable dinstance qui est affecte (par exemple 0 pour le type Entier ).

    La partie donnes de la classe Fraction pourrait scrire ainsi :class Fraction

    { private int Numerateur ;

    private int Denominateur =1;

    }

    Application: On suppose que la partie Donnes de la classe Date :

    class Date

    { public int Jour;

    public int Mois;public int Annee ;

    }

    1. On considre le programma Java de test de la classe Date suivant. Indiquer le

    message affich par le programme lors de son excution.

    class test

    { public static void main(String args[])

    { Date D1,D2 ;

    D1=new Date() ;

    D1.Jour = 1 ;D1.Mois = 1 ;

    D1.Annee = 2001 ;

    D2 = New Date() ;

    D2.Jour = 1 ;

    D2.Mois = 1 ;

    D2.Annee = 2001 ;

    if (D1==D2) System.out.println( galit ) ;

    else System.out.println ( Diffrence ) ;

    }

    }

    Le message affich est "Diffrence" car D1 et D2 sont diffrents. Ils contiennent lesadresses distinctes des classes, seul leur contenu est gal.

    2. A lissue de linstanciation dun objet de la classe Date , indiquer le contenu de ses

    variables dinstance.

    Jour, Mois et Annee sont des entiers, donc leur contenu "initial" est 0.

    3. La dfinition de la classe Date autorise-t-elle crer (dans un programme

    dutilisation de la classe) des objets qui contiennent des valeurs qui ne correspondent pas

    une date (par exemple le :32/02/2000).

    Oui, on a le droit de mettre n'importe quel entier, mme s'il ne correspond pas une date

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    9/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 9 09/03/01

    IV. Les mthodes dune classe

    Les mthodes dune classe (encore appeles comportements ou traitements) se rpartissent

    en deux catgories : Les mthodes publiques qui correspondent tous les traitements que lutilisateur

    dune classe pourra appliquer aux objets de la classe. Certains auteurs qualifient ces mthodes

    publiques de messages que lon peut envoyer aux objets.

    Les mthodes prives qui sont des traitements introduits pour simplifier laconception de la classe, mais qui ne pourront pas tre utiliss depuis un programme

    dutilisation de la classe.Exemple: dans la classe Fraction la mthode destine calculer

    le PGCD de deux nombres entiers est une mthode prive dont lexistence rend plus simple le

    traitement destin mettre sous forme irrductible une fraction. Dans ce chapitre, on limitera

    ltude aux mthodes publiques.

    En Java la dclaration dune mthode publique respecte la syntaxe suivante :

    Public TypeRsultat NomFonction (Liste Paramtres formels)

    {Dclaration de variables locales

    Instructions

    }

    Remarque : on appelle signature de la mthode le nom de la fonction suivi de la liste de ses

    paramtres formels.

    Comme pour le langage C, dans le cas o la fonction ne renvoie aucun rsultat, on doit

    spcifier le mot cl void pour le TypeRsultat . Dans le cas o la fonction renvoie unrsultat, ce dernier devra tre retourn par linstruction return Rsultat . La liste des

    paramtres formels et des variables locales se dclare de la mme manire quen C.

    Remarquons que ces deux listes peuvent tre vides.

    En plus des paramtres dentre et des variables locales, toute mthode rfrence tout, ou

    une partie, des variables dinstance de la classe. Une mthode publique tant toujours

    appliqu un objet de la classe, ce seront les variables de cet objet qui seront effectivement

    rfrences lors de lexcution de la mthode. Ce principe est illustr ci-dessous par la

    mthode Afficher de la classe Fraction .

    class Fraction{ private int Numerateur ;

    private int Denominateur ;

    public void Afficher()

    {

    System.out.println(Numerateur + / + Denominateur) ;

    }

    }

    En appliquant la mthode Afficher lobjet de gauche, ce seront les contenus des

    variables Numerateur et Denominateur de cet objet qui seront affichs c--d. 4/8 .

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    10/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 10 09/03/01

    Lapplication dune mthode sur un objet scrit : VariableObjet.NomMthode(..). Par

    exemple, en supposant que la variable F pointe sur lobjet ci-dessus, laffichage de lafraction contenue dans cet objet scrira : F.Afficher() .

    Comme il a t dj dit dans le chapitre prcdent, si la mthode renvoie un rsultat,

    lapplication de la mthode un objet doit tre intgre une instruction, sinon elle devra tre

    spcifie comme une instruction. La mthode Afficher() sutilise comme une instructioncar elle nadmet aucun paramtre de sortie.

    Exemple:

    class Date

    { public int Jour;

    public int Mois;public int Annee ;

    concepteur public void Afficher()

    { System.out.println(Jour + / + Mois+ / + Annee) ; }

    public int MonJour()

    { return Jour ; }

    }

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

    { Date D1 ;

    D1=new Date() ;

    D1.Jour = 12 ;

    utilisateur D1.Mois = 02 ;

    D1.Annee = 2001 ;

    D1.Afficher() ;

    System.out.println (D1.MonJour()+25) ;

    }

    }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    11/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 11 09/03/01

    Application: Complter la description de la classe Fraction :

    1. En crivant le contenu des mthodes suivantes :

    public void Initialiser(int N, int D)

    { // valorise les variables dinstance de lobjet cr avec les valeurs fournies en paramtre dentre. }

    public void Inverse()

    { // inverse le contenu de la fraction }

    public float Valeur()

    { // renvoie la valeur en relle de la fraction }

    public void Initialiser(int N, int D){ Numerateur = N ;

    Denominateur = D ; }

    public void Inverse(){ int x ;

    x = Numerateur ;

    Numerateur = Denominateur ;

    Denominateur = x ; }

    public float Valeur(){ return ( Numerateur / (float) Denominateur ) ; }

    2. Construire un programme Java de test de la classe Fraction qui ralise les diffrentesoprations suivantes: cration de la fraction 6/5, affichage de sa valeur relle, affichage de la

    valeur relle de son inverse.

    class test

    { Fraction F1 ; // F1 contient NULLF1=new Fraction () ; // F1 Numerateur: 0 - Denominateur: 0

    F1.Initialiser (6,5) ; // F1 initialis 6 / 5

    System.out.println (F1.Valeur() ) ; // afficher la valeur relle de F1

    F1.Inverse () ;

    System.out.println (F1.Valeur() ) ; // on ne peut pas utiliser la mthode} // Afficher() car elle affiche uniquement le contenu de la fraction, pas sa valeur relle.

    Pour ne pas perdre le contenu de F1 avant l'inversion, il est faut modifier la classe Fraction:

    public Fraction Inverse(){ Fraction Res ;

    Res = new Fraction () ;

    Res.Numerateur = Denominateur ; Res.Denominateur = Numerateur ;

    return Res ; }

    { Fraction F1, F2 ; // F1 et F2 contienent NULLF1=new Fraction () ; F1.Initialiser (6,5) ; // F1 initialis 6 / 5F2 = F1.Inverse () ;

    System.out.println (F2.Valeur() ) ; }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    12/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 12 09/03/01

    4.1) Mthodes publiques de type Constructeur

    Un constructeur est une mthode qui porte le nom de la classe et qui est charg dinitialiserles variables de lobjet au moment de sa cration. Le langage Java dfinit chaque classe un

    constructeur par dfaut qui affectera des valeurs dpendantes du type de la variable dinstance

    si aucune valeur dinitialisation nest prcise dans la dclaration. Le tableau ci-dessous

    rcapitule, pour chaque type, les valeurs affectes par dfaut.

    Type Valeur

    Entier 0

    Rel 0.0

    Chane de caractres Null

    En respectant ce principe, lors de la cration dun objet de la classe Fraction dfinieau dbut de cette page, le constructeur Fraction() initialise les variables Numerateur et Denominateur 0.

    Si on se limitait lexistence du constructeur par dfaut, toute instanciation devrait tre

    suivie dune phase daffectation pour valoriser les variables dinstances de lobjet. Or plus le

    nombre dtapes pour atteindre un objectif est grand plus le risque doublier une tape est

    grand. Par exemple si on oublie de valoriser les variables de lobjet Fraction cr, ontravaillera avec une fraction ayant un numrateur et un dnominateur = 0 ce qui peut

    entranera des erreurs dexcution. Pour remdier ce problme, Java propose au concepteur

    de la classe de construire ses propres constructeurs. La dfinition dun nouveau constructeur

    devra respecter la syntaxe suivante :

    public NomClasse(Liste des paramtres formels)

    {

    }

    On remarque quun constructeur nest pas typ. Une fois le constructeur dfini celui-ci est

    appel par loprateur new comme pour le constructeur par dfaut.

    Le constructeur suivant permet de crer une fraction partir de la donne dunnumrateur et dun dnominateur passs en paramtre dentre.

    public Fraction (int N, int D) // Fraction tant le nom de la classe, ceci est le constructeur{ Numerateur = N;

    If (Denominateur ==0){ System.out.println ( le dnominateur ne peut tre gal 0 ) ;

    System.exit(1) ;}

    else

    Denominateur = D; // Aprs cela, le constructeur dorigine nexiste plus.

    }

    Laffectation F=New Fraction (2,4) crera un objet Fraction avec comme numrateur lavaleur 2 et un dnominateur gal 4.

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    13/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    14/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 14 09/03/01

    4.2) Mthodes publiques de type Accesseur

    Lorsque les variables dinstances dune classe sont dclares avec le spcificateur daccs private elles ne sont pas accessibles directement depuis un programme dutilisation de la

    classe. Ce dispositif permet donc de garantir la cohrence et lintgrit des donnes contenues

    dans les diffrents objets de la classe. Pour permettre un utilisateur de la classe de consulter

    ou de modifier les donnes ainsi protges, le concepteur de la classe doit dfinir des

    fonctions daccs publiques encore appeles accesseurs. Celles-ci peuvent tre de deux types :

    - en consultation seulement : la fonction daccs renvoie la valeur de la donne

    mais ne permet pas de la modifier,

    - en modification : la fonction modifie la valeur de la donne.

    Les deux accesseurs en consultation suivants permettent dobtenir le numrateur et lednominateur dune fraction:

    public int SonNumerateur ()

    { return Numerateur ;}

    public int SonDenominateur ()

    { return Denominateur ;

    }

    Avec de telles fonction daccs pour connatre la valeur du numrateur dun objet, on crirala rfrence : VariableObjet.SonNumerateur()

    Remarque : certaines classes peuvent comporter des donnes prives pour lesquelles il

    nexiste aucun accesseur. Dans ce cas il sagit de donnes dimplmentation qui sont

    introduites pour faciliter lcriture de la classe mais dont lexistence ne doit pas tre connue

    de lutilisateur de la classe.

    class Horaire

    { private int heure ;

    private int Minute ;

    public int SonHeure () H1 = new horaire (8,20) ;

    accs en { return heure ; } system.out.println (H1.SonHeure ()) ;

    consultation public int SaMinute () system.out.println (H1.SaMinute ()) ;

    { return Minute ; }

    public void Changer ()

    accs en { heure = 12;

    modification Minute = 0 ;

    }

    }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    15/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 15 09/03/01

    Auto-valuation n6: On considre la classe Compte :

    Destine grer des comptes bancaires. Chaque objet de cette classe sera dcrit au moyen

    des 3 donnes prives suivantes :

    Nom de la proprit Type Rle

    Numero Entier Identifie un compte

    Type Caractre Fournit le type du compte :

    J compte joint

    C compte courant

    Solde Rel Mmorise le solde du compte

    1. Dfinir les variables dinstance de la classe Compte

    class Compte{ private int Numero ; // Il vaut mieux dclarer les variables en privprivate char Type ;

    private float Solde ;

    } // Types primitifs : la variable contient la valeur et pas un pointeur.

    2. On considre le programme de test de la classe Compte suivant :

    class TestCompte

    {public static void main (String args[])

    { Compte C;

    C = new Compte ();}

    }

    2.1 Indiquer le contenu de la variable C:

    - lissue de lexcution de la dclaration : Compte C :

    C contient la valeur NULL

    - lissue de lexcution de linstruction dinstanciation :

    C pointe vers un objet de type Compte.

    C

    2.2 Indiquer le contenu des variables dinstance de lobjet cr :

    Numero : 0 / Type : NULL / Solde : 0.0

    2.3 Ecrire la mthode prive TestType dfinie ci-dessous :

    Renvoie true si le type pass en paramtre est gal J ou C, et false sinon.

    private boolean TestType (char T) // renvoie true si le type pass en paramtre{ if ( T = = "J" || T = = "C" ) return true; // est gal J ou C, et false sinon.

    else return false;

    }

    Numero

    Type

    Solde

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    16/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 16 09/03/01

    3. Utiliser la notion de surcharge de constructeur pour construire un objet de la classe

    "Compte" des deux faons suivantes:

    - les valeurs initiales Numero et Type d'un compte sont passes en paramtre; le solde

    est mis 0.Par exemple, C = new Compte (123, "J") cr le compte joint de numro 123.- les valeurs initiales Numero et Type sont saisies au clavier; le solde est mis 0. Par

    exemple, l'instruction C = new Compte() demande l'utilisateur de lui communiquer le

    numro de compte et son type, et cr l'objet associ. On utilisera les mthodes Lire.i() etLire.c() pour acqurir respectivement un entier et un caractre.

    Pour ces deux constructeurs, des contrles sur le numro (seules les valeurs positives sont

    autoriss) et sur le type, devront tre mis en place.

    public Compte (int N, char T){ if (N

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    17/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 17 09/03/01

    public void ModifType () // modifie le type d'un compte automatiquement// en appliquant la logique suivante:

    // si c'est un compte courant, il devient compte joint;

    // si c'est un compte joint, il devient compte courant.

    accs en { char change; ou { if (Type = = 'C') Type = 'J';modification change = Type; else Type = 'C';

    if (change = 'C') Type = 'J'; }

    else Type = 'C';

    }

    5. Pour agir sur le solde d'un compte on souhaite disposer des traitements "Debiter" et

    "Crediter". Ecrire les mthodes associes.

    public void Crediter (float S) // crdite de la somme S, le solde d'un compte.

    { Solde += S; }

    public void Debiter (float S) // dbite de la somme S, le solde d'un compte.{ Solde -= S; }

    6. Ecrire le programme de test de la classe Compte qui ralise les traitements suivants:

    - Cration des deux comptes suivantsCompte Cl Numero: 250 Type : C

    Compte C2 Numero: 320 Type : J

    - Affichage du numro et du solde du compte Cl

    - Modification du type du compte C2

    - Apport de 500 F sur le compte Cl

    - Dbit de 200 F sur le compte C2

    class TestCompte

    { public static void main (String args[])

    { compte C1, C2;C1 = New Compte (250, "C");

    C2 = New Compte (320, "J");

    System.out.println ("Numro du compte:" + C1.Numero ());

    System.out.println ("Solde du compte: " + C1.Solde () );

    C2.ModifType ();

    C1.Crediter (500);

    C2.Crediter (200); // on remarque que C2 est en solde ngatif.

    }

    }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    18/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 18 09/03/01

    7. On souhaite enrichir la classe "Compte" par la mthode binaire publique "EstSuperieur"

    dont la signature et l'objectif sont donns ci-dessous:

    public boolean EstSuperieur (Compte C)

    { // renvoie true si le solde de l'objet est suprieur au solde de C et false sinon}

    7.1 Ecrire la mthode EstSuprieur

    public boolean EstSuperieur (Compte C){ if (C.Solde < Solde) return (true);

    else return (false);

    }

    7.2 Dans le programme de test prcdent, comparer le compte "Cl" et le

    compte "C2" et faire afficher le message "Cl est suprieur C2" ou "Cl est infrieur ou gal C2" selon le rsultat du test.

    {

    if (C1.EstSuperieur (C2) ) System.out.println ("C1 est suprieur C2");

    else System.out.println ("C1 est infrieur ou gal C2");

    }

    4.3) Les mthodes de type binaire

    A linstar des oprateurs binaires, une mthode est binaire lorsquelle sapplique sur deux

    objets dune mme classe. Par exemple, le traitement qui consiste ajouter deux fractions

    donnera lieu une mthode binaire. Lors de la conception dune telle mthode, les deux

    objets sur lesquels elle travaillera nauront pas le mme rle. Lun sera lobjet sur lequel sera

    appliqu la mthode, et lautre sera fourni en argument de la mthode. Lexemple ci-dessous

    prsente la mthode binaire Multiplier de la classe Fraction et son utilisation dans unprogramme de test.

    class Fraction

    { private int Numerateur ;private int Denominateur ;

    public Fraction Multiplier (Fraction F)

    { Fraction Res;

    Res = new Fraction (F.Numerateur*Numerateur,F.Denominateur*Denominateur);

    return Res ;

    }

    Remarque : dans la mthode dune classe, on peut rfrencer les proprits prives dun

    autre objet de cette classe. Les rfrences F.Numerateur et F.Denominateur sont donc

    autoriss dans lcriture de la mthode Ajouter .

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    19/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 19 09/03/01

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

    { Fraction F1, F2 ;

    F1 = new Fraction (4,5) ;

    F2 = new Fraction (6,8) ;

    F3 = F1.Multiplier (F2) ;

    }

    }

    Application: On considre la classe "PuissanceDe10" :

    Destine raliser les oprations suivantes sur les puissances de 10 :

    - Initialiser une puissance partir de la donne de lexposant,

    - Afficher une puissance de 10 sous la forme 10^Exposant

    - Multiplier deux puissances de 10 (on rappelle que 104 x 105 donne 109

    - Fournir la valeur associe une puissance de 10 (rappel 100 = 1 et 10-2 = 0.01 (rel)

    class PuissanceDe10

    { private int Exposant;

    public PuissanceDe10 (int E) // on ne met pas de type pour le constructeur.

    { Exposant = E ; }

    public void Afficher ()

    { System.out.println ("10^" + Exposant) ; }

    public void Multiplier (PuissanceDe10 P)

    { Exposant += P.Exposant ; }

    public PuissanceDe10 MultiplierBis (PuissanceDe10 P)

    { PuissanceDe10 Result;

    Result = New PuissanceDe10 (P.Exposant + Exposant);

    Return (Result) ; }

    public PuissanceDe10 MultiplierTer (PuissanceDe10 P)

    { Exposant += P.Exposant ;

    return this ; // this retourne l'objet lui-mme.

    }

    public void MultiplierQua (PuissanceDe10 P)

    { P.Exposant += Exposant ; } // ici c'est P2 qui va tre modifi.

    public float Valeur ()

    { int P = 1, i ;

    for (i = 1; i

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    20/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 20 09/03/01

    Auto-valuation n7: On considre la classe Capacit :

    Destine grer des capacits exprimes en octets. Son implantation est fournie ci-dessous:

    class Capacite

    { private float Valeur;

    private char Unite;

    public Capacite (float V, char U)

    { if (U != 'O' && U != 'K' && U !=' M')

    { System.out.println (" capacit incorrecte");

    System.exit(1);

    }

    else

    { Valeur = V; Unite = U; }

    }

    private long ValeurEnOctets ()

    { long L = (long) Valeur;

    if (Unite = = 'K') L = (long) Valeur* 1024;

    else if(Unite = = 'M') L = (long) Valeur * 1024*1024;

    return L;

    }

    public void Ajouter (Capacite C)

    { Valeur = this.ValeurEnOctets () + C.ValeurEnOctets ();

    Unite = 'O';}

    public void Afficher ()

    { System.out.println (Valeur +" "+ Unite); }

    }

    1. Fournir les rsultats affichs l'cran l'issue de l'excution du programme suivant:

    class TestCapacite ()

    { public static void main (String args[])

    { Capacite C1,C2;C1= new Capacite (10,'O');

    C2 = new Capacite (1,'K');

    Cl.Ajouter (C2);

    Cl.Afficher ();

    C2.Afficher();

    }

    2. Modifier la mthode Ajouter afin de consigner le rsultat de l'addition non plus

    dans l'objet sur lequel elle est applique, mais dans l'objet pass en paramtre.

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    21/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    22/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 22 09/03/01

    4.4) La transmission de paramtres

    En Java, la transmission des paramtres se fait toujours par valeur. Cela signifie que lors delappel dune fonction qui admet des paramtres dentre on devra communiquer pour chacun

    de ces paramtres une valeur. Celle-ci pourra tre soit le contenu dune variable, soit un

    littral. En fait, on peut assimiler les paramtres formels des variables locales qui reoivent

    les valeurs des paramtres effectifs lors dun appel. Le schma suivant illustre ce principe sur

    le constructeur de la classe Fraction :

    Programme dutilisationx=4

    F = new Fraction(x,5) x 5

    N DFonction Fraction (int N, intD){ Numerateur =N ;

    Denominateur = D ;

    } instructions de la mthode

    De ce principe dcoule le fait que toute modification dun paramtre formel (de type

    primitif), ralise lintrieur dune mthode, naura aucun effet sur une variable passe en

    paramtre effectif. Cela signifie que si dans le constructeur de la classe Fraction , une

    modification dun paramtre dentre a t ralise par erreur, la variable fournie enparamtre effectif ne sera pas modifie.

    Fonction Fraction (int N, intD)

    { Numerateur =N ;N=N+1 ;

    Denominateur = D ;}

    x = 4 ;

    F = new Fraction(x,5) ;

    Aprs excution du constructeur, x contient toujours la valeur 4.

    Dans le cas o le paramtre formel est un objet, cest la rfrence lobjet qui est passe

    en paramtre effectif. Dans ce cas, toute modification ralise sur lobjet via sa rfrence sera

    effectivement ralise sur lobjet pass en paramtre. Le schma ci-dessous illustre ce

    principe :

    Considrons, pour la classe Fraction , la mthode Diviser ci-dessous :

    public Fraction Diviser (Fraction F)

    { F.Inverse() ; // on inverse l'objet (division de fraction = multiplication par l'inverse)return this.Multiplier (F) ; // le mot cl this dsigne lobjet lui-mme

    }

    4

    4 5

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    23/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 23 09/03/01

    et les deux objets F1 et F2 de la classe Fraction suivants :

    Numerateur NumerateurF1 F2

    Denominateur Denominateur

    Lappel de la mthode F1.Diviser(F2) (par exemple F3= F1.Diviser(F2)) va provoquer :

    - laffectation dans la variable locale associe au paramtre F de la valeur 6544.

    - lexcution des instructions de cette mthode avec cette valeur ce qui aura pour

    consquence de modifier le numrateur et le dnominateur de lobjet point par F2.

    Inversion du numrateur et

    F du dnominateur

    F.Inverse ()

    Return This.Multiplier (F);

    On remarque que F2 nest pas modifi mais cest lobjet point qui est modifi.

    4.5) Le mot cl this

    Le mot cl this dans une mthode publique est une rfrence sur lobjet sur lequel est

    appliqu la mthode. Cette rfrence est en gnral implicite. Par exemple pour dfinirlaccesseur en consultation charg de retourner le numrateur on aurait pu crire :

    public int SonNumerateur()

    { return this.Numerateur

    }

    Ce mot cl peut par exemple tre utilis lorsquil y ambigut entre le nom dun paramtre et

    le nom dune variable dinstance. Le constructeur associ la classe Fraction illustre ce cas:

    public Fraction (int Numerateur, int Denominateur){ this.Numerateur = Numerateur ;

    this.Denominateur = Denominateur ;}

    La mthode Diviser prsente dans le paragraphe prcdent prsente un autre intrt du

    mot cl this .

    45674

    8

    65444

    8

    6544

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    24/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 24 09/03/01

    V. Les variables et mthodes de classe

    On suppose que lon ait construire une classe permettant deffectuer des oprations sur des

    puissances ayant la mme base. On rappelle que dans lexpression an

    , a est appele base et nest appel exposant. La solution qui consiste dfinir pour la classe Puissance , deux

    variables dinstance reprsentant respectivement la base et lexposant nest pas satisfaisante

    car aucun dispositif ne pourra tre mis en place pour garantir que tous les objets de cette

    classe auront la mme base. On pourra donc avoir la situation suivante qui empche la

    ralisation de toute opration.

    Base BaseP1 P2

    Exposant Exposant

    Pour pallier ce problme, on doit introduire une variable commune tous les objets de la

    classe et qui mmorisera la base avec laquelle on souhaite travailler. Cette variable, appele

    variable de classe, existe avant mme quun objet soit instanci. Elle est dclare au moyen du

    modificateur static , et peut tre prive ou publique. Avec le statut Private , elle pourra

    tre rfrence uniquement par les mthodes de la classe dans laquelle elle est dfinie, alors

    quavec le statut Public , elle pourra tre rfrence depuis une autre classe. Le dbut de la

    classe Puissance pourrait scrire ainsi :

    class Puissance

    { private static int base = 2 ;

    private int exposant ;

    }

    Compte tenu de linitialisation de la variable base , les objets de la classe Puissance

    reprsenteront des puissance de 2.

    P1 P2

    Exposant Exposant

    Base

    Pour permettre lutilisateur de modifier la variable base , on doit dfinir la mthode de

    classe publique ChoisirBase de la manire suivante :

    class Puissance

    { private static int base = 2 ;

    private int exposant ;

    public static void ChoisirBase () // on suppose que la fonction Lire.i()

    { base = Lire.i() ; } // permet dacqurir au clavier un entier (int).

    }

    45672

    3

    65444

    2

    4567 3 6544

    2

    2

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    25/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 25 09/03/01

    Celle-ci pourra tre appele, sans quaucun objet existe, en utilisant la rfrence:

    Puissance.ChoisirBase. Il est important de remarquer que lexcution dune mthode de classe

    pouvant tre ralise avant toute instanciation dobjet, il nest pas sens de rfrencer dans

    une mthode de classe une variable dinstance. Par exemple, le programme suivant naurait

    pas de sens :

    class Puissance

    { private static int base = 2 ;

    private int exposant ;

    public static void ChoisirBase()

    { base = Lire.i() ; // exposant est une variable dinstance dont

    exposant = Lire.i() ; } // lexistence est lier lexistence dun objet.

    }

    Par contre, il est possible de rfrencer dans une mthode dinstance, une variable de

    classe, comme lillustre le programme suivant :class Puissance

    { private static int base = 2 ;

    private int exposant ;

    public static void ChoisirBase()

    { base = Lire.i() ; }

    exposant = Lire.i() ; }

    public void Afficher ()

    { System.out.println (base + + exposant) ; }

    }

    VI. Travaux Pratiques

    6.1) Utilisation de la classe String

    Le langage Java admet les trois catgories suivantes de types primitifs :

    numrique : byte, short, int, long, float et double

    caractre : char

    boolen : boolean

    Tous ces types primitifs permettent de manipuler directement des valeurs. Ainsi pour

    mmoriser un caractre, il suffira de laffecter dans une variable de type caractre. Toutes les

    donnes qui ne sont pas dun type primitif devront tre mmorises sous forme dobjets.

    Cest, par exemple, le cas des chanes de caractres pour lesquelles Java propose les deux

    classes suivantes :

    String dont les objets sont des chanes de caractres de longueur fixe,

    StringBuffer dont les objets sont des chanes dont la longueur peut tre modifie.

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    26/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 26 09/03/01

    A partir de la liste des mthodes donne ci-dessous, et se rapportant la classe String ,

    crire le programme Java qui ralise les oprations suivantes :

    dclare les variables Fichier et Extension destines pointer sur des

    objets de la classe String .

    instancie un objet de la classe String avec la valeur Test.xls .

    Le constructeur admet linterface suivante : public String (Chane).

    Lobjet ainsi cr devra tre point par la variable Fichier .

    extrait, dans lobjet point par la variable Extension ,

    lextension contenue dans lobjet point par la variable Fichier .

    affiche par linstruction System.out.println (lextension est : + Extension),

    lextension ainsi rcupre.

    Remarque : le nombre de caractres de lextension est suppos quelconque

    public class ManipChaine

    { public static void main (String args[]){ int Longueur, Point ;

    String Fichier, Extension ;

    Fichier = New String ('Test.xls') ;

    Point = Fichier.indexOf ('.') ;

    Longueur = Fichier.length () ;

    Extension = Fichier.Substring (Point + 1, Longueur -1) ;

    System.out.println ("L'extension est : " + Extension) ;

    }

    }

    Annexe : mthodes de la classe String

    int indexOf(Caractre) Localise le caractre fourni en paramtre dans lobjet et renvoie

    sa position. Le premier caractre a la position 0. La valeur -1 est

    renvoye si le caractre ne se trouve pas dans lobjet chane.

    String substring(Deb, Fin) Extrait, dans lobjet chane, une sous-chane de la position "Deb"

    la position "Fin".

    int length() Renvoie le nombre de caractres de lobjet chane

    Exemple:

    String ch, ch1; ch

    ch = New String ('Bonjour') ;

    System.out.println (ch.indexOf ('B') ) ; // affiche 0.ch1 = ch.Substring (2,4) ; ch1System.out.println (ch.length () ); // affiche 7.

    0 1 2 3 4 5 6

    BONJOUR

    2 3 4

    NJO

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    27/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 27 09/03/01

    6.2) Cration dune classe

    Le programme de test suivant manipule des dures exprimes en heures et minutes.

    Analyser les diffrentes mthodes rfrences et le rsultat de leur excution afin de

    proposer une dfinition de la classe Dure cohrente avec son utilisation.

    public class TestDure

    { public static void main (String [] arg)

    { Dure D1,D2 ;

    D1=new Dure (1,30) ;

    D1.Afficher ;

    D2 = new Dure (2,30) ;

    D1.Ajouter (D2) ;

    D1.Afficher ;System.out.println ("Valeur de la dure en minutes: "

    + D1.TotMinutes) ;

    }

    }

    Rsultat affich lcran:

    1 :30

    4 :0Valeur de la dure en minutes : 240

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    28/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    29/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 29 09/03/01

    PP

    RR

    OO

    GG

    RR

    AA

    MM

    MM

    AA

    TT

    IIOO

    NN

    OORRIIEENNTTEEEE

    OOBBJJEETTSS ::

    LLeess CCoolllleeccttiioonnss

    JJAAVVAA

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    30/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    31/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 31 09/03/01

    IINNFFOORRMMAATTIIQQUUEE CCNNAAMM AANNGGOOUULLEEMMEE 22000000--22000011

    LLEESS CCOOLLLLEECCTTIIOONNSS EENN JJAAVVAA

    I. INTRODUCTION

    Le chapitre prcdent a montr que laccs un objet dune classe, ncessite lexistence

    dune variable pointeur, dclare en dbut de traitement de la manire suivante :

    NomClasse NomVariablePointeur ;

    Dans le schma qui suit, la variable P permet daccder au produit de rfrence 34 et ainsi de lui appliquer diffrentes mthodes par la rfrence P.NomMthode.

    Avec un tel principe laccs n instances dune classe, implique la dclaration de n

    variables pointeurs de cette mme classe ce qui va entraner :

    - dune part limpossibilit dutiliser des structures itratives pour manipuler ces

    objets du fait des noms de variables diffrents,

    - dautre part le risque dun nombre insuffisant de variables pour des problmes dont

    on ne connat pas priori le nombre dinstances cres.

    Application: On considre la classe Produit dfinie partiellement ci-dessous :

    class Produit

    { private int Reference ;

    private String Designation ;private int Stock ;

    private int StockAlerte ;

    public Produit () ; // demande toutes les caractristiques dun produit et cr lobjet associ

    {System.out.print ("Rfrence du produit: ");

    Reference = Lire.i();

    System.out.print ("Dsignation du produit: ");

    Designation = Lire.S();

    System.out.print ("Stock: ");

    Stock = Lire.i();

    System.out.print ("Stock alerte: ");

    StockAlerte = Lire.i(); }

    Rfrence34Dsi nation

    Stock55StockAlerte15

    P

    Disquette

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    32/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 32 09/03/01

    public boolean ACommander ()

    { // Renvoie true si le stock est infrieur au stock alerte et false sinon

    return (Stock < StocIcAlerte);

    }

    public int SaRfrence ()

    { // Renvoie la rfrence du produit

    return this.Reference;

    }

    public int SonStock ()

    { // Renvoie le stock du produit

    return this.Stock;

    }

    On suppose que les variables P1 , P2 et P3 pointent sur 3 instances de la classe

    Produit . Ecrire les instructions qui affichent, parmi ces trois produits, la rfrence de ceux

    qui sont commander.

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

    { Produit P1, P2, P3;

    P1 = new Produit();

    P2 = new Produit();

    P3 = new Produit();

    if (P1.Acommander()) System.out.print (P1.SaRfrence());if (P2.Acommander()) System.out.print (P2.SaRfrence());

    if (P3.Acommander()) System.out.print (P3.SaRfrence());

    }

    }

    Pour faciliter la manipulation de plusieurs objets dune mme classe, le langage Java

    propose diffrents concepts dont les caractristiques de stockage sont rcapitules ci-dessous :

    Nom concept Type du stockage Nombre dobjets collectionns

    Tableau Volatile Fixe

    Vecteur Volatile Indtermin

    Dictionnaire (ou table de hachage) Volatile Indtermin

    Flux (fichiers "normaux") Permanent Indtermin

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    33/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 33 09/03/01

    II. LES TABLEAUX

    Pour crer un tableau destin mmoriser N pointeurs sur des objets dune classe il faut

    procder aux deux tapes suivantes :- dclarer une variable qui sera destine pointer sur le tableau par la syntaxe suivante :

    NomClasse [] NomVariable

    - crire linstruction charge de crer lobjet tableau par la syntaxe :

    NomVariable = new NomClasse[N]

    A lissue de cette dclaration, la variable spcifie dans le membre gauche de laffectation

    pointe sur un objet contenant N cases , destines chacune recevoir ladresse dun objet de

    la classe. Par exemple, pour crer un tableau pointant sur 5 produits on devra crire lesinstructions suivantes :

    Produit[] ListeProduits ;

    ListeProduits = new Produit[5] ;Le contenu des variables aprs lexcution de ces instructions pourrait tre reprsent ainsi :

    ListeProduits[i] rfrence l'adresse

    Il est important de savoir que la taille dun tableau, dfinie lors de lexcution par

    loprateur new , ne peut plus tre modifie ultrieurement. Il est, par contre, possible

    dacqurir, lors de lexcution, la taille du tableau souhait et de communiquer cette valeur

    loprateur new comme lillustre lexemple suivant :

    int N ;Produit[] ListeProduits ;

    System.out.println ( Nombre maximal de produits ? ) ;N=Lire.i() ;

    ListeProduits = new Produit[N] ;

    Les oprations que lon peut mettre en uvre sur un tableau se rpartissent en 2 catgories :

    - la premire catgorie regroupe les traitements qui agissent sur le tableau dans son

    intgralit.Par exemple linstruction ListeProduits.length renvoie le nombre de cases

    du tableau. length est en fait une proprit publique de lobjet ListeProduits .

    - la seconde catgorie concerne les traitement qui agissent sur chaque composant dun

    tableau. Pour la programmation de ces traitements, il faut savoir que laccs au ime

    lment du tableau est ralis par la rfrence : NomVariableTableau[i] (le premier

    lment porte le numro 0).

    Remarquons enfin que les tableaux permettent de mmoriser non seulement des adressesdobjets mais aussi des valeurs de type primitif.

    0 1 2 3 4

    null null null null null

    objet

    Produit

    objet

    Produit

    ListeProduits

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    34/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 34 09/03/01

    Application 1: On considre que le tableau ListeProduits est valoris :

    et pointe sur 5 objets de la classe Produits . Rcrire le traitement qui consiste afficher la

    rfrence des produits commander.class TestProduit () ;

    {public void static main (String args[])

    { Produit [ ] ListeProduits;

    int i = 0;

    ListeProduits = new Produit [5];

    // Chargement du tableau

    for (i = 0; i 4, i ++)

    { if (ListeProduits[i].Acommander())

    System.out.println(ListeProduits[i].SaRfrence());

    }

    // ou proprit publique// for (i = 0; i ListeProduits.length - 1; i ++)

    // { if (ListeProduits[i].Acommander()) mthode

    // System.out.println(ListeProduits[i].SaRfrence());

    // }

    }

    Application 2: On souhaite construire la classe Inventaire :

    destine grer lensemble des produits proposs par une entreprise. La description du dbut

    de cette classe a la forme suivante :

    class Inventaire

    { private Produit [] ListeProduits ;

    private int NbProduits = 0;

    public Inventaire()

    { ListeProduits = new Produit[100] ; }

    }

    a) Ecrire les trois mthodes suivantes :

    AjouterUnProduit () qui doit provoquer la cration dun objet de la classe Produit en

    demandant lutilisateur les diffrentes caractristiques du produit.

    RechercherUnProduit (int RefProduit) qui renvoie le produit dont la rfrence est

    spcifie en paramtre dentre. La valeur "null" est renvoye si le produit nexiste pas.

    AfficherProduitsACommander() qui affiche la rfrence de tous les produits dont lestock est infrieur au stock alerte.

    class Inventaire

    { private Produit [] ListeProduits;

    private int NbProduits = 0;

    public Inventaire()

    { ListeProduits = new Produit [100]; }

    public void AjouterunProduit()

    { ListeProduits[NbProduits] = new Produit;

    NbProduits ++;}

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    35/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 35 09/03/01

    public Produit RechercherUnProduit (int RefProduit){ int i=0;

    Produit tmp=null;

    boolean Trouve = false;

    while (! Trouve && i

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    36/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 36 09/03/01

    III. LES VECTEURS

    Les vecteurs ont t introduits afin de remdier limpossibilit de redimensionner un

    tableau une fois que celui-ci a t cr par loprateur new . Ainsi, les objets de la classe Inventaire prsente prcdemment, sont limits la mmorisation de 100 produits. La

    classe Vector est prdfinie (comme la classe String), et permet de grer (en mmoire

    centrale) un nombre indtermin dobjets, qui appartiennent la classe gnrique Object .

    Par exemple, le programme suivant cre un vecteur qui sera destin pointer sur un

    ensemble dobjets de la classe Object . Seul le nom attribu ce vecteur laisse penser que

    ce sont des objets de la classe Produit qui seront mmoriss dans cette structure. Au

    dpart, aucune case nest affecte au vecteur et cest au fur et mesure des ajouts que le

    vecteur va sagrandir. Les vecteurs ne sont pas typs, au dpart, on ne sait donc pas de quels

    objets il s'agit. En fait, on utilise une classe "gnrique".

    Vector ListeProduits ;ListeProduits = new Vector() ;

    3.1) La classe gnrique Object

    ou une premire approche de lhritage

    Tout objet issu dune classe est un objet de la classe Object et ce titre, hrite des

    mthodes publiques de cette classe. Cette relation est un peut tre schmatise ainsi et

    montre que les objets des classes Fraction ,. Produit ou dune classe quelconque C

    sont des objets de la classe Object . On dit que les classes Produit , Fraction et C

    sont des sous-classes de Object ou encore des classes drives de la classe Object . La

    classe Object est une super-classe, ou c'est la classe de toutes les classes, ou encore une

    classe de base.Super classe

    ou classe de base

    equalsest un

    sous classeou classe drive

    equals

    Exemple:

    Object

    Produit Fraction

    objet de la

    classe

    ListeProduits

    Classe C

    Compte

    Compte pargne Compte chque

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    37/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 37 09/03/01

    Compte tenu de cette hirarchie sur un produit de la classe Produit on peut appliquer

    les mthodes de la classe Produit mais aussi les mthodes de la classe Object . Par

    exemple la mthode clone() de la classe Object qui permet de crer le clone dun objetpeut tre appliqu aussi bien un objet de la classe Produit qu un objet de la classe

    Fraction .Fraction F1,F2 ;

    Produit P1, P2 ;

    P1 = new Produit() ;P2 = P1.clone() ; // Deux fractions identiques et non pas une seule fraction

    F1 = new Fraction(4,5) ;F2 = F1.clone() ; // car Fraction "hrite" la mthode clone() de Object.

    Il est possible de redfinir dans une sous-classe une mthode de la classe gnrique. Dans

    ce cas, on dit que la mthode est polymorpohe cest--dire a plusieurs formes. A chaque appel

    dune telle mthode, la forme excuter est choisie en fonction de lobjet associ lappel.

    Considrons par exemple la mthode equals de la classe Object . Cette mthodepermet de comparer les adresses de deux objets et renvoie true si ces adresses sont gales et

    false sinon. Ainsi dans lexemple qui suit P1.equals(P2) renvoie false car P1 et P2contiennent des adresses diffrentes.

    On peut redfinir la mthode equals au niveau de la classe Produit afin de

    renvoyer true si deux objets distincts contiennent les mmes valeurs. A lissue de cetteconception, la mthode equals a deux formes et le programme suivant montre la

    puissance du polymorphisme :

    Produit P1,P2 ;

    Fraction F1,F2 ;

    if (P1.equals(P2)) // cest la mthode equals de la classe Produit qui est excuteSystem.out.println (P1 et P2 sont deux objets diffrents mais contiennent les mmes valeurs ) ;

    if (F1.equals(F2)) // cest la mthode equals de la classe Object qui est excute

    System.out.println ( F1 et F2 dsignent le mme objet ) ;

    Rfrence34Dsi nation

    Stock55StockAlerte15

    P1

    Disquette

    Rfrence34Dsi nation

    Stock55StockAlerte15

    P2

    Disquette

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    38/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 38 09/03/01

    Cette hirarchie entre classes induit aussi la ncessit deffectuer des transtypages lors

    daffectation entre les variables de ces diffrentes classes. Le programme ci-dessous prsente

    ce principe pour les classes Object et Produit ainsi que le mcanisme du

    polymorphisme issu du transtypage.

    Object O1, O2 ;

    Produit P1, P2 ;

    .O1 = P1; // un produit est un objet donc laffectation est possible et le transtypage est implicite

    O2 = P2 ;P1 = (Produit) O1 ; // un objet nest pas forcment un produit donc il faut spcifier explicitement un cast

    //pour effectuer le transtypage ; si le cast nest pas spcifi, le compilateur refusera //laffectation car un objet nest pas forcement un produit. A lexcution, il peut y//avoir une erreur si la variable O1 nest pas un objet de la classe Produit.

    if (O1.equals(O2)) //cest la mthode equals de la classe Produit qui est excute car les objets// O1 et O2 appartiennent la classe Produit

    Mme si la notion de polymorphisme sera reprise et dtaille dans le chapitre suivant, il

    est important de retenir dores et dj les lments suivants (extraits de louvrage "Java, la

    synthse") :

    - le polymorphisme est la capacit pour une mme mthode de correspondre plusieurs

    formes de traitement, selon les objets auxquels la mthode est applique,

    - une telle facilit, qui permet le choix dynamique entre plusieurs formes de traitement

    suppose que le choix de la mthode soit fait au moment de lexcution. Dans

    linstruction prcdente (if O1.equals(O2)), le choix de la forme de mthode

    equals ne peut pas se faire la compilation car on ne sait pas sur quel type dobjet

    les variables O1 et O2 pointent.

    3.2) Les mthodes de la classe Vector

    Rappelons que chaque composant dun vecteur est un pointeur sur un objet de la classe

    Object . Compte tenu de ce qui vient dtre dit, ce pointeur peut adresser nimporte quel

    objet dune classe car Object est la super-classe de toutes les classes. Le schma suivant

    illustre ce principe bas sur un transtypage implicite.

    objet de la

    classe

    ListeProduitsProduit

    Rfrence34Dsi nation

    Stock55StockAlerte15

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    39/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    40/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 40 09/03/01

    public Produit RechercherUnProduit (int RefProduit)

    { int i=0;

    Produit tmp=null;

    boolean Trouve = false;

    while (! Trouve && i

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    41/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    42/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 42 09/03/01

    appartenant un package autre que java.lang , son niveau dutilisation dpend de son

    modificateur daccs :

    - public : la classe est accessible depuis nimporte quelle autre classe appartenant au

    package ou non

    - pas de modificateur : la classe est accessible seulement depuis les classes appartenant

    au mme package.

    Pour accder une classe dun package ayant le spcificateur public il est ncessaire de

    mentionner, dans le programme dutilisation, linstruction : import NomPackage.NomClasse

    Ainsi pour utiliser les classes Vector et Enumeration qui se trouvent dans lepackage java.util , on crit en dbut de traitement : import java.util.*

    Pour intgrer une classe un package, il est ncessaire de respecter la syntaxe ci-dessous :

    package NomPackage ;

    public class NomClasse

    {.}

    Quelques remarques :

    - Une classe ne peut appartenir qu un seul package.

    - Dans le cas o lon ne prcise pas la clause package lors de la cration dune classe, un

    package par dfaut, qui correspond au rpertoire courant, lui est automatiquement attribu.

    - Dans certains systmes, la variable systme CLASSPATH permet de dfinir tous les

    rpertoires susceptibles de contenir des packages. Ces rpertoires sont alors visits par le

    compilateur pour quil procde aux importations demandes. Laffectation de diffrents

    chemins daccs la variable CLASSPATH est ralise par la commande SET . Par

    exemple, la commande suivante dfinit comme localisation possible des packages lerpertoire courant et le rpertoire Lib .

    SET CLASSPATH = . ;C:\JAVA\JDK1.3\Lib

    IV. Les dictionnaires

    Dans un vecteur, laccs direct un composant nest possible que si lon connat son

    indice. Si on ne dtient pas cette information on doit procder une recherche squentielle.

    Ainsi la mthode RechercherUnProduit (Refproduit) met en uvre un parcours squentiel du

    vecteur ListeProduits afin de trouver le produit dont la rfrence est fournie en paramtre.Les objets de la classe Hashtable encore appels dictionnaires permettent de

    mmoriser un nombre indtermin dobjets dune classe et mettent la disposition de

    lutilisateur des mthodes capables de raliser des accs directs partir dune valeur de cl.

    Une cl est une donne de la classe qui est telle que tous les objets de cette classe ont des

    valeurs diffrentes. Elle permet donc didentifier chaque instance de la classe. Dans la classe

    Produit la donne Reference peut tre considre comme une cl.

    Pour crer un dictionnaire, il faut crire les deux instructions suivantes :

    Hashtable NomVariable ;

    NomVariable= new Hashtable()

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    43/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 43 09/03/01

    A lissue de lexcution de ces instructions la structure du dictionnaire pourrait tre

    schmatise ainsi :

    Variable de la classe

    Hastable

    Les mthodes de la classe Hashtable les plus couramment utilises sont dcrites et

    commentes dans le tableau ci-dessous :

    Nom de la mthode Rle

    put(objetCl,Objet) Ajoute une cl et son objet dans le dictionnaire

    get(objetCl) Renvoie lobjet associ la cl spcifie en paramtre

    remove(ObjetCl) Supprime dans le dictionnaire llment ayant la cl spcifie en

    paramtre

    size() Retourne le nombre dlments placs dans la liste

    keys () Renvoie sous forme dnumration la liste des cls mmorises.

    Application: On souhaite implanter la classe Inventaire destine mmoriser un ensemble de produits au moyen dun dictionnaire. En supposant que

    tout produit est identifi par sa rfrence, le dbut de description de la classe Inventaire a

    la forme suivante :

    import java.util.* ;

    public class Inventaire

    { private Hashtable ListeProduits ;

    public Inventaire()

    { ListeProduits = new Hashtable() ; }

    1. Rcrire les mthodes AjouterUnProduit et RechercherUnProduit2. Ecrire la mthode AfficherTout qui affiche la liste de tous les produits (rf et dsignation).

    Cl Objet

    Objet de la

    classe Object

    Objet de la

    classe Object

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    44/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 44 09/03/01

    V. Les flux

    5.1) Oprations sur un fichier

    Jusqu maintenant les objets crs taient stocks dans la mmoire vive de lordinateur et

    avaient de ce fait une dure de vie limite lexcution du programme. Pour mmoriser de

    faon permanente des objets, le langage Java propose les deux mcanismes suivants :

    - la srialisation qui consiste crire des informations relatives un objet sur un fichier,

    - et la dsrialisation qui correspond lopration rciproque cest--dire la

    reconstitution de lobjet en mmoire vive partir des informations lues sur le fichier.

    La mise en place de ces deux mcanismes est base sur lutilisation des classes

    ObjectOutputStream et ObjectInputStream . Un objet de la classe

    ObjectOutputStream est appel flux sortant et sera utile pour effectuer une oprationdcriture sur un fichier. Un objet de la classe ObjectOutpuStream est appel flux entrant

    et sera utile pour raliser une opration de lecture sur un fichier. Lextrait de programme

    suivant illustre la cration de ces deux objets.

    ObjectInputStream FE ;

    ObjectOutputStream FS ;

    FE = new ObjectInputStream (new FileInputStream( Produits.DTA ) ;

    FS = new ObjectOutputStream (new FileOutputStream ( Produits.DTA ) ;

    Remarques :

    - la cration dun objet de type flux entrant choue si le fichier spcifi en paramtre

    nexiste pas dans larborescence. Dans ce cas, une erreur de type "File Not FoundException" est mise. Dans le cas contraire, la tte de lecture associ ce flux se

    positionne sur le premier objet stock.

    - la cration dun objet de type flux sortant choue seulement dans le cas o le chemin

    daccs au fichier, spcifi en paramtre, nest pas cohrent avec larborescence. Dans le

    cas o le fichier existe dj son contenu est effac. Dans le cas o le fichier nexiste pas et

    que son chemin daccs est correct, il y a cration du fichier. Pour toutes ces situations

    la tte dcriture se positionne en dbut de fichier.

    - une fois que tous les traitements ont t raliss, il faut fermer les flux en leur appliquant

    la mthode close() . Par exemple FE.close() ferme le flux entrant point par la

    variable FE .

    Les objets que lon peut crire ou lire sur un fichier peuvent tre issues de nimporte

    quelle classe : prdfinie ( Vector , Hastable , String , etc) ou non. Dans le cas dune

    classe cre par le programmeur, il faudra rendre ses objets srialisables en prcisant dans

    len-tte de la classe la clause implements Serializable . Par exemple, pour enregistrer de

    manire permanente les objets de la classe Produit on devra prciser la clause

    implements de la manire suivante .

    public class Produit implements Serializable

    {}

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    45/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 45 09/03/01

    La lecture dun objet sur un fichier, est ralis en appliquant la mthode readObject()

    lobjet Flux entrant . Lobjet point par la tte de lecture est alors transfr en mmoire

    centrale et la tte progresse automatiquement sur lobjet suivant. Dans le programme suivant,

    la variable P pointe sur lobjet lissue de la lecture sur le fichier

    Produit P ;

    P = (Produit) FE.readObject() ;

    Remarques :

    - le cast est ncessaire pour effectuer le transtypage de lobjet lu.

    - dans le cas o la tte de lecture pointe aucun objet, la mthode readObject met

    lerreur ClassNotFoundException .

    Pour crire un objet sur un fichier, il suffit dappliquer la mthode writeObject

    lobjet Flux sortant . Lobjet, prsent en mmoire vive, est alors crit sur le fichier dans

    lemplacement point par la tte dcriture et celle-ci avance automatiquement sur le prochainemplacement libre.

    Produit P ;

    P = new Produit() ;

    FS.writeObject(P) ;

    Application: La classe ProdCatalogue

    Dont un extrait est prsent ci-dessous est destine mmoriser les produits proposs la

    vente par la socit X. Tous ces produits tant soumis au mme taux de T.V.A., celui-ci est

    stock en un exemplaire dans la variable de classe TauxTVA. Pour mmoriser de faon

    permanente ce taux et prendre en compte dventuelles modifications, celui-ci est enregistrdans le fichier Param.DTA .

    class ProdCatalogue

    {public static float TauxTVA ;

    private static ObjectInputStream FE;

    private static ObjectOutputStream FS;

    private int Reference ;

    private String Designation ;

    private PrixHT ;

    1. Ecrire les mthodes de classe LireTaux, ModifierTaux et EnregistrerTaux dfinies ci-dessous :

    La mthode LireTaux lit dans le fichier Param.DTA le taux de TVA enregistr etle stocke dans la variable de classe TauxTVA

    La mthode ModifierTaux (float NouveauTaux) modifie le taux en vigueur en lui

    affectant la valeur fournie en paramtre

    La mthode EnregistrerTaux enregistre dans le fichier Param.DTA le taux en

    vigueur

    2.Ecrire le constructeur de la classe ProdCatalogue destin crer un produit du catalogue

    en acqurant ses diffrentes caractristiques par lintermdiaire du clavier.

    3. Ecrire la mthode AfficherPrixTTC qui affiche le prix TTC du produit.

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    46/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 46 09/03/01

    5.2) La gestion des erreurs

    Comme il a t dit dans le paragraphe prcdent certaines oprations sur les fichiers peuvent conduire des erreurs dexcution. Par exemple, la cration dun flux entrant

    provoque une erreur si le fichier que lon veut lire nexiste pas dans larborescence. Chacune

    de ces erreurs, encore appeles exceptions, correspond un objet dune classe particulire qui

    est instanci lors de lincident. Ainsi, si lon suppose que le fichier Param.DTA nexiste

    pas, lexcution de linstruction :

    FE = new ObjectInputStream (new FileInputStream( Param.DTA ) ;provoque linstanciation dun objet de la classe FileNotFoundException (on dit encore

    quune exception de la classe FileNotFoundException est leve). A lissue de cette

    instanciation, le traitement en cours est interrompu et lexception est propage aux mthodes

    appelantes. Si aucune mthode ne traite lerreur, lexcution se termine avec un ou plusieurs

    messages derreurs.Toute mthode rfrenant des mthodes pouvant lever des exceptions telles que

    readObject ou le constructeur dun flux doit avertir le compilateur de ce fait en prcisant

    la clause supplmentaire trhows liste des classes dexceptions . Par exemple, len-tte de la

    mthode LireTaux de la classe ProdCatalogue devra, pour tre accepte par le

    compilateur avoir la forme ci-aprs :

    public static void LireTaux ()

    throws IOException, ClassNotFoundException

    {

    }

    Si la clause Throws est omise le compilateur signalera pour chaque type derreursusceptible de se produire, le message derreur suivant : "NomClasseException must be

    caught, or it must be declared in the throws clause of this method" car il sait pour chaque

    mthode appele, les exceptions quelle peut lever.

    Dans le cas o la mthode appelante veut traiter lerreur et non la propager, il faut utiliser

    les instructions try catch . La clause try englobe le traitement susceptible de lever

    des exceptions, la (ou les) clause(s) catch mentionne(nt) le traitement qui sera excute

    pour chaque type derreur commise. Le programme suivant illustre ce principe sur la mthode

    Lire pour laquelle on ne veut plus propager les erreurs leves mais les traiter en retournant la

    valeur null ou un message appropri. La clause throws devient inutile si on mentionne

    autant de clauses catch que de type derreurs.

    public static void LireTaux()

    {

    try

    {FE = new ObjectInputStream (new FileInputStream ("Param.DTA"));

    TauxTVA = ((Float) FE.readObject()).floatValue();

    FE.close();

    }

    catch (IOException Ex)

    {System.out.println ( Erreur de lecture sur Param.DTA ); }

    catch (ClassNotFoundException e)

    {System.out.println ( Le fichier Param.DTA ne contient pas les objets attendus ) ; }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    47/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 47 09/03/01

    Dans le cas o le traitement de lerreur est le mme quelque soit son type, on crira une

    seule instruction catch avec un nom de classe dexception gnrique. Cette notion est base

    sur la hirarchie des classes dexceptions dont un extrait (issu de louvrage Java la synthse)

    est prsent ci-aprs. Pour le programme prcdent on pourrait, par exemple, proposer la

    solution qui suit :

    public static void LireTaux()

    {

    try

    {FE = new ObjectInputStream (new FileInputStream ("Param.DTA"));

    TauxTVA = ((Float) FE.readObject()).floatValue();

    FE.close();

    }

    catch (Exception Ex)

    {System.out.println ( Erreur sur le fichier Param.DTA);

    }}

    Object

    Throwable

    Error Exception

    RunTimeExcep IOException

    Classe fille Classe mre

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    48/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 48 09/03/01

    Application:

    Du fait de la prsence de la clause throws dans les en-ttes des mthodes LireTaux et

    EnregistrerTaux la classe ProdCatalogue prsente ci-dessous nentrane plusderreurs la compilation. En effet, lors de lexcution de la mthode LireTaux , si le

    fichier Param.DTA nexiste pas, une erreur de type IOException est leve et propage

    aux mthodes appelantes ce qui entrane larrt de lexcution. On souhaite maintenant

    modifier cette mthode afin de ne plus stopper lexcution du programme mais de demander

    lutilisateur de communiquer un taux de TVA dans le cas o le fichier Param.DTA

    nexiste pas dans larborescence du support. Proposer une solution.

    import java.io.*;

    class ProdCatalogue

    {public static float TauxTVA;

    private static ObjectInputStream FE;private static ObjectOutputStream FS;

    private int Reference;

    private String Designation;

    private float PrixHT;

    public static void LireTaux() throws IOException, ClassNotFoundException

    {

    FE = new ObjectInputStream (new FileInputStream ("Param.DTA"));

    TauxTVA = ((Float) FE.readObject()).floatValue();

    FE.close();

    }

    public static void EnregistrerTaux() throws IOException

    {

    FS = new ObjectOutputStream (new FileOutputStream ("Param.DTA"));

    FS.writeObject (new Float(TauxTVA));

    FS.close();

    }

    public static void ModifierTaux (float NouveauTaux)

    { TauxTVA = NouveauTaux; }

    public ProdCatalogue()

    {System.out.println ("Rfrence ?");

    Reference = Lire.i();

    System.out.println ("Dsignation ?");

    Designation = Lire.S();

    System.out.println ("Prix HT ?");

    PrixHT = Lire.f();

    }

    public void AfficherPrixTTC()

    { System.out.println (PrixHT*TauxTVA); }}

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    49/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 49 09/03/01

    Auto-valuation n8 : les collections

    Dans le cadre du dveloppement d'un logiciel relatif au suivi du trafic d'un rseau

    INTRANET, on s'intresse aux classes Connexion et ListeConnexions dfiniespartiellement ci-dessous

    class Connexion{ private int Duree;

    private float VolumeEntrant;

    private float VolumeSortant;

    public Connexion (int D, float VE, float VS) // Constructeur de la classe{ }

    //Accesseurs en consultation qui renvoient la dure, le flux entrant et le flux sortant associs la connexionpublic int SaDuree()

    {...}

    public float SonvolumeEntrant()

    {...}

    public float SonvolumeSortant()

    {}

    }

    Remarques:

    On suppose que la dure d'une connexion est exprime en minutes entires et que les

    volumes sont exprims en KO.Aucun contrle n'est prvoir pour le constructeur de la classe.

    1. Ecrire l'ensemble des methodes

    class Connexion{ private int Duree;

    private float VolumeEntrant;

    private float VolumeSortant;

    public Connexion(int D, float VE, float VS) // Constructeur de la classe

    { Duree = D;

    VolumeEntrant = VE;

    VolumeSortant = VS;

    }

    // Accesseurs en consultation qui renvoient la dure, le flux entrant et le flux sortant associs la connexionpublic int SaDuree()

    { return (Duree); }

    public float SonvolumeEntrant()

    { return (VolumeEntrant); }

    public float SonvolumeSortant()

    { return (VolumeSortant); }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    50/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 50 09/03/01

    import java.util.*;

    class ListeConnexions{ private Vector Vect;

    public ListeConnexions() // Constructeur de la classe ListeConnexions

    {Vect = new Vector(); }

    // Mthode qui ajoute en dernire position de la liste une nouvelle connexion fournie en paramtre dans la listepublic void AjouterNouvelleConnexion (Connexion C)

    { Vect.add(C); }

    private int NbTotal() // Mthode quiaffiche le nombre total de connexions

    { return Vect.size(); }

    // Mthode qui affiche la dure total des connexions mmorises dans la liste

    private int DureeTotale()

    { int i, tot=0;for (i=0; i

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    51/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 51 09/03/01

    2. Ecrire le programme de test qui ralise les oprations suivantes:

    cration des quatre connexions suivantes dans la liste L

    Dure Volume entrant Volume Sortant

    1 14.4 78 10 5

    12 535 5678

    7 2 2

    Affichage de la liste L

    Affichage du temps moyen de connexion

    Cration de la liste des connexions LS dont la dure est suprieure 5 minutes et

    dont les flux sortant et entrant sont infrieurs 50 K

    Affichage de la liste LS

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

    { ListeConnexions L,LS;

    L = new ListeConnexions();

    L.AjouterNouvelleConnexion(new Connexion (1, 14.4f, 7f));

    L.AjouterNouvelleConnexion(new Connexion (8, 10f, 5f));L.AjouterNouvelleConnexion(new Connexion (12, 535f, 5768f));L.AjouterNouvelleConnexion(new Connexion (7, 2f, 2f));

    L.AfficherListe();

    System.out.println (L.DureeMoyenne());

    LS=L.Extract();

    LS.AfficherListe();

    }

    }

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    52/77

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    53/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 53 09/03/01

    L'HERITAGE EN JAVA

    I. INTRODUCTION..........................................................................................................54

    II. DEFINITION DE L'HERITAGE .............................................................................................562.1) Le constructeur d'une classe drive.........................................................................57

    2.2) Les proprits d'une classe drive ...........................................................................58

    2.3) Les mthodes d'une classe drive ............................................................................59III. MANIPULATIONS D'OBJETS ISSUS DE CLASSE MERE ET FILLE............................................60

  • 8/14/2019 Programmation Oriente Objet en JAVA.doc

    54/77

    Programmation oriente Objet en JAVA.doc

    ______________________________________________________________________________

    ___________________________________________________________________DI GALLO Frdric Page 54 09/03/01

    IINNFFOORRMMAATTIIQQUUEE CCNNAAMM AANNGGOOUULLEEMMEE 22000000--22000011

    LL''HHEERRIITTAAGGEE EENN JJAAVVAA

    I. INTRODUCTION

    Compte tenu des connaissances acquises jusqu' prsent, pour implmenter une relation

    est un entre deux entits A et B , la seule solution envisageable consiste intgrer

    l'entit A dans l'entit B. Celle technique appele composition est illustre dans le

    tableau ci-dessous au travers des classes Produit et ProduitAchete. Un produit est

    caractris par trois proprits: sa rfrence, sa dsignation, et son prix de vente HT. Unproduit achet est un produit qui a, en plus, les deux caractristiques suivantes:le nom de sonfournisseur, et son prix d'achat HT.

    class Produit{ private String Reference;

    private String Designation;

    private float PrixventeHT;

    public Produit(String R, String D, float PV) // Constructeur

    { Reference = R;

    Designation = D;

    PrixVenteHT = PV;

    }

    // Mthode qui augmente le prix de vente d'un pourcentage pass en paramtre

    public void AugmenterPrixVenteHT (float TauxM)

    { PrixVenteHT = PrixVenteHT *(l+TauxM);

    }

    // Mthode