Cours Java Mit Sylla

Embed Size (px)

Citation preview

  • 8/18/2019 Cours Java Mit Sylla

    1/133

    COURS DE PROGRAMMATION

    ORIENTÉE OBJET

     JAVA

    Mr SYLLA. Ingenieur en informatique 1

  • 8/18/2019 Cours Java Mit Sylla

    2/133

    Plan du Cours• Chapitre 1 : Introduction à Java

    • Chapitre 2 : Techniques de base du langage• Chapitre 3 : Les types primitifs

     

    Mr SYLLA. Ingenieur en informatique 2

     

    • Chapitre 5 : Programmation Orientée Objet• Chapitre 6 : Les tableaux

    • Chapitre 7: Les chaînes de caractères

  • 8/18/2019 Cours Java Mit Sylla

    3/133

    Plan du cours (fin)

    • Chapitre 8 : L’héritage• Chapitre 9 : Gestion des exceptions•  

    Mr SYLLA. Ingenieur en informatique3

     

    • Chapitre 11: Les Swing GUI• Chapitre 12 : Entrées Sorties

    • Chapitre 13: Collections et algorithmes• Chapitre 14 : Applets• Chapitre 15 : JDBC

  • 8/18/2019 Cours Java Mit Sylla

    4/133

    istorique !"rigines de #a$a% 1&&'

      Internet trs *eu connu+ ,orld ,ide ,e- ineistant .  -oom des PCs (*uissance)

     

    Chapitre 1 Introduction à Java

    Mr SYLLA. Ingenieur en informatique 4

     

    % Langage *our la communication des a**areils 5lectroniques .% 1&&3  mars ! le CSA lance M"SAIC+ le *remier na$igateur internet

    (*rotocole 6tt*+ langage 6tml)+ le 7e- d5colle...  5t5 ! "a0 c6ange d8orientation et s8ada*te 9 la tec6nologie internet

    % 1&&:  mai 1&&: ! *ro/et ot#a$a++ na$igateur ,;

  • 8/18/2019 Cours Java Mit Sylla

    5/133

    Plusieurs langages de *rogrammation ont $u le /our !

    Langage mac6ine

     

    Spécifique aux UAL

    Les générations des langages de programmation

    Mr SYLLA. Ingenieur en informatique :

    Langage assem eur

    Langage algorit6mique

    Langage orient5 o-/et

    C pascalco!ol "

    C## smalltal$ %ava&'()*A+ILI*, -.(LU*I+I*-& /IA+ILI*, )-U*ISA+ILI*-

  • 8/18/2019 Cours Java Mit Sylla

    6/133

     

    Imprégné du C## mais améliorant ses insuffisances&2 gestion automatique de la mémoire 3ar!age Collector4&2 facilité de stoc$age des fichiers sur disque sérialisation4

    Une gigantesque A'I  Application 'rogramming Interface4

     

    Java 5 un langage o!%et

    Mr SYLLA. Ingenieur en informatique =

     & une ra r e e c asses tr s mportante nter ace grap queréseau 6e! !ase de données "4& porta!ilité sans mesure& langage de plus en plus utilisé et évoluant rapidement7

  • 8/18/2019 Cours Java Mit Sylla

    7/133

    Interprétation Compilation Interprétation 8 Compilation

    'rogramme écrit en 9 'rogramme écrit en 9 'rogramme écrit en 9

    'rogramme interprété et compilé

    Mr SYLLA. Ingenieur en informatique >

    Interpréteur de 9 Compilateur de 9en langage machine

    Compilateur de 9 en : plus proche du langage

    ;achine4

    'rogramme enLangage de : 

    Interpréteur de : 

    'rogramme en langagemachine

  • 8/18/2019 Cours Java Mit Sylla

    8/133

    ""77

    ""7

    77777"

    ""77

    ""

    ""

    Code

    sourcecotédéveloppeur

    La ;achine .irtuelle %ava J.;4

    Mr SYLLA. Ingenieur en informatique ?

     %ava&compiler %avac4

    Interprétation par la;achine virtuelle Java pour

    lesS

  • 8/18/2019 Cours Java Mit Sylla

    9/133

    'rogrammation structurée Constitué

    'rocédures

    Structuresde données

     

    La 'rogrammation (rientée (!%et '7(7(4

    Mr SYLLA. Ingenieur en informatique &

    'rogrammation o!%et Constituéo!%ets

    Champs données4

    ;éthodes

     

    des procédures4

  • 8/18/2019 Cours Java Mit Sylla

    10/133

    Le concept de classe correspond simplement à la

    généralisation de type que l’on rencontre dans les langages

    Concept de classe

    Mr SYLLA. Ingenieur en informatique 1'

    classiques. En effet, une classe n’est rien d’autre que la

    description d’un ensemble d’objets ayant une structure de

    données commune et disposant des mêmes méthodes.

    Les objets apparaissent alors comme des variables d’un

    tel type classe (en P.O.O, on dit aussi qu’un objet est une

    instance de sa classe ).Bien entendu, seule la structure estcommune , les valeurs des champs étant propres à chaque

    objet. En revanche, les méthodes sont communes à l’ensemble

    des objets d’une même classe.

  • 8/18/2019 Cours Java Mit Sylla

    11/133

    La '7(7( 5l= encapsulation

    Mr SYLLA. Ingenieur en informatique 11

    'rincipe d=encapsulationdes données

    respect du

    Impossi!led=agir

    directementsur les

    données

  • 8/18/2019 Cours Java Mit Sylla

    12/133

    • Le JRE contient uniquement l'environnement d'exécution de programmes Java. Le JDK

    contient lui même le JRE. Le JRE seul doit être installé sur les machines ou desapplications java doivent être exécutées.• Depuis sa version 1.2, Java a été renommé Java 2. Les numéros de versions 1.2 et 2

    désignent donc la même version.• Le JDK a été renommé J2SDK (Java 2 Software Development Kit) mais la

    J)- Java )untime -nvironnment4

    Mr SYLLA. Ingenieur en informatique 12

      , ,

    Interpreteur) utilisée.• Le JRE a été renommé J2RE (Java 2 Runtime Édition).• Trois éditions de Java existent :• J2ME : Java 2 Micro Édition ·• J2SE : Java 2 Standard Édition ·• J2EE : Java 2 Entreprise Édition ·• Sun fourni le JDK, à partir de la version 1.2, sous les plate−formes Windows, Solaris et

    Linux.

  • 8/18/2019 Cours Java Mit Sylla

    13/133

    J@;- Java@ ;icro ,dition4

    & Applications sur environnement

    limité& s

  • 8/18/2019 Cours Java Mit Sylla

    14/133

    L= A'ILBA.P.I. (A**lication Programming Interface) est un ensem-le de classes etinterfaces *r5d5finies utilisa-les *ar le *rogrammeur 7;lles sont *r5sent5esdans des *ac0ages (/a$a.lang+ /a$a.mat6+ /a$a.util+ etc..

    n *rogramme #AA est constitu5 dBun certain nom-re de classes !@ des classes *r5d5finies de lBAPI (en$iron un millier de classes)

    Mr SYLLA. Ingenieur en informatique 14

    ** ca on rogramm ng n er ace .

    @ des classes d5finies *ar lButilisateur

    classes définiespour ce

    programme

     A'I

    PD"EDAMM;classe ! t*e dedonn5es

    F fonctions *ourles mani*ulerUn programme utiliseau maximum

    les fonctionnalit5spr5sentes dans lBA7'7I7

  • 8/18/2019 Cours Java Mit Sylla

    15/133

     Application standalone et Application -+

    Les a**lications rentrent g5n5ralement dans le cadre desa**lications standalone ou des a**lications 7e- destin5es 9 l8internet. Les a**lications autonomes sont des *rogrammes

    e5cut5s sous le contrGle du sstme

    Mr SYLLA. Ingenieur en informatique 1:

     

    dBe*loitation.Les *rogrammes C+ CFF H sont des a**lications dece t*e.

    Les a**lications 7e- sont e5cut5es lors de la$isualisation *ar un na$igateur ,;< dBune *ageML. ;n g5n5ral elles sont 65-erg5es *ar desser$eurs 7e- comme A*ac6e omcat. ;lles sont

    trs r5*andues a$ec la tec6nologie #;;.

    A**lication Standalone

    A**lication ,;<

  • 8/18/2019 Cours Java Mit Sylla

    16/133

     Applications 5la console vs 37U7I

    L8utilisateur fournit des infos au cla$iersous forme de lignes de tete. Le*rogramme d5cide du s5quencementdes o*5rations. L8o*5rateur est sollicit5

    'rogramme 9 interfaceconsole

    Mr SYLLA. Ingenieur en informatique 1=

    au moment $oulu.

    L8interaction *rogramme@o*5rateur sefait essentiellement $ia des com*osants

    gra*6iques. C8est la *rogrammation5$nementielle !le *rogramme r5agit 9des 5$nements *ro$oqu5s *ar l8utilisa@teur.

    'rogramme 9 interfacegraphique 5 3UI

    3raphical User Interface4

    JI K CAPID;

  • 8/18/2019 Cours Java Mit Sylla

    17/133

    Chapitre @ *echniques de !ase du langage

    Premier *rogramma #a$a.

    *ac0age 6ome.user./a$a.essai un *remier *rogrammeN

    Ceci est un commentaire finissant en fin de ligne

    Mr SYLLA. Ingenieur en informatique 1>

     

    ello ,orldN*u-lic class ello,orld O

    *u-lic static $oid main(String Q args) O

    Sstem.out.*rintln(Rello ,orld R)TT

    N ceci est un commentaires *ou$ant encadrerun nom-re quelconques de caractressur un nom-re quelconque de lignes N

    ello ,orld

  • 8/18/2019 Cours Java Mit Sylla

    18/133

    Structure du programme 1D@4

    *ac0age 6ome.user./a$a.essai

     

    Mr SYLLA. Ingenieur en informatique 1?

     

    O*u-lic static $oid main(String Q args)

    OSstem.out.*rintln(Rello ,orld R)

    TT

    K5finition de la classea$ec une seule m5t6ode(la m5t6ode main)

     

  • 8/18/2019 Cours Java Mit Sylla

    19/133

    Structure du programme @D@4

    Le mot cl5 static *r5cise que la m5t6ode main n8est *as li5e 9 une instance (o-/et)*articulire de la classe. Le *aramtre String Q args est un ta-leau de c6aVnes de caractres qui *ermet der5cu*5rer des arguments transmis au *rogramme au moment de son lancement.Ce aramtre est "

  • 8/18/2019 Cours Java Mit Sylla

    20/133

  • 8/18/2019 Cours Java Mit Sylla

    21/133

    Contenu du programme

    Le *rogramme est constitu5 d8une seule instruction !S

  • 8/18/2019 Cours Java Mit Sylla

    22/133

    -xécution du programme 1D@4

    La sau$egarde du *rogramme se fait im*5rati$ement dans un fic6ier qui*orte le nom ello,orld./a$a

    nom de la classeetension

     

    Mr SYLLA. Ingenieur en informatique 22

    Le code source d8une classe *u-lique doit tou/ours se trou$er dans unfic6ier *ortant le mUme nom et *oss5dant l8 etension ./a$a.

    La classe contenant la m5t6ode main est a**el5e la classe *rinci*ale

    du *rogramme. C8est cette classe qu8il faut e5cuter. ; JAI " ;;C;Z; L;S ISDCI"S K; LA M;"K; main.

  • 8/18/2019 Cours Java Mit Sylla

    23/133

    -xécution du programme @D@4

    "n *rocde 9 la C"MPILAI" de ce *rogramme *our la g5n5ration du -te code.

    Si elle se *asse -ien( sans erreurs) on o-tient un fic6ier d8etension .class . Ici+ il s8agitde ello,orld.class .

     

    Mr SYLLA. Ingenieur en informatique 23

    a$ac ello,orld./a$a ello,orld.class

    Commande /a$ac *our com*iler le source

    etension indis*ensa-le

     /a$a ello,orld

    Commande /a$a *our e5cuter le -tecode

    aucune etension ne doit figurer

    A;I"! en *ratique+ on tiendra tou/ours com*te des $aria-les d8en$ironnementPA et CLASSPA (cf. dia*os sui$antes).

  • 8/18/2019 Cours Java Mit Sylla

    24/133

    Les commandes de !ase du langage

     /a$ac ! *our la com*ilation ( g5n5rer le .class). /a$a ! *our l8e5cution ( du main).

     

    Mr SYLLA. Ingenieur en informatique 24

    !   .

     /a$adoc ! *our g5n5rer une documentationautomatique.

  • 8/18/2019 Cours Java Mit Sylla

    25/133

    Catégories d=instructions

    *ac0age info.fst.slla.*ro

    *u-lic class *esInstructionsO *u-lic static $oid main(String args Q )

      S stem.out. rint Rinstruction sim leR Instruction sim*le termin5e 

    Mr SYLLA. Ingenieur en informatique 2:

     

    int i [ 'if ( i \ 1''')Sstem.out.*rint(Rinstruction de structuration R)

    static O int ta- Q [ ne7 int12Q

    for (i [ 'i ] ta-.lengt6 iFF)ta-iQ [ i F1'T

    T

    *ar un *oint@$irgule

    Instruction de structuration( if+ for+H.)

    Instruction en -loc(*r5sence des O T )

  • 8/18/2019 Cours Java Mit Sylla

    26/133

    )0gles d=écriture en Java 1DH4

    Les diff5rentes entit5s utilis5es dans un *rogramme ( m5t6odes+ $aria-les+

    classes+ o-/ets+ H.) sont mani*ul5es au tra$ers d8identificateurs .

    n identificateur est form5 de lettres ou de c6iffres+ le *remier caractre 5tant@

    Mr SYLLA. Ingenieur en informatique 2=

      .

    minuscules a@_+ ainsi que le caractre ` soulign5 ( X ) et le caractre b

    ;em*le !

    ligne Cla$ier $aleurX: Xtotal X:= btotal 2nom-re

    Demarque trs im*ortante !

    #a$a est trs sensi-le 9 la casse ! ligne [ Ligne .

  • 8/18/2019 Cours Java Mit Sylla

    27/133

    )0gles d=écriture en Java @DH4

    a-stract assert -oolean -rea0 -te 

    n identificateur ne *eut *as a**artenir 9 la liste des mots r5ser$5s dulangage #a$a !

    Mr SYLLA. Ingenieur en informatique 2>

     

    continue default do dou-le elseetends false final finall floatfor if im*lements im*ort instanceofint interface long nati$e ne7null *ac0age *ri$ate *rotected *u-lic

    return s6ort static su*er s7itc6snc6roni_ed t6is t6ro7 t6ro7s transienttrue tr $oid $olatile

  • 8/18/2019 Cours Java Mit Sylla

    28/133

    )0gles d=écriture en Java HDH4

    oici quelques con$entions de codage en /a$a

    *u-lic class MaPremiereClasse

    O *u-lic $oid affic6e( int argument )

    om de classe commence *arune ma/uscule.

     

    Mr SYLLA. Ingenieur en informatique2?

    O int nom-re;ntier [12 + i [1

    final float "M

  • 8/18/2019 Cours Java Mit Sylla

    29/133

    Kocumentation en ligne et utilisation de classes

    Pour *ou$oir utiliser une classe+

    il faut et il suffit de connaVtre son interface(la d5claration comment5e de tous les mem-res *u-lics)consulta-le grce 9 la documentation en ligne

     

    Mr SYLLA. Ingenieur en informatique 2&

     etra t e a ocumentat on en gne e erm na

    NN cr5e un erminal de titre BtitreB et de taille en *iels B7B N B6B N*u-lic MJrame (String titre+ int 7+ int 6)O...TNN Affic6e un BmessageB et rend lBentier lu 9 *artir de la consoleN*u-lic int readInt (String message)NN affic6e lBentier BiB dans la console N

    *u-lic $oid *rintln (int i) O...T

    MJrame fen [ ne7 MJrame (Rri fusionR+3''+3'')int taille [ fen.readInt ( RKonner un entierR)fen.*rintln (tailleNtaille)

  • 8/18/2019 Cours Java Mit Sylla

    30/133

  • 8/18/2019 Cours Java Mit Sylla

    31/133

    A *ro*os des commentaires

    Commenter tou/ours les entUtes de fonctions

    n -on commentaire *ermet de *ou$oir utiliser la fonctionsans consulter le code.

    Mr SYLLA. Ingenieur en informatique31

     % il indique 9 lBaide dBune *6rase le rGle de la fonction en faisant

    inter$enir le nom de tous les *aramtres% il *r5cise le rGle de c6aque *aramtre

    % il indique la signification du r5sultat retourn5% il indique les restrictions sur la $aleur des *aramtres

    Commenter si n5cessaire des fragments de codes difficiles(un -on *rogramme en contient g5n5ralement *eu)

    $iter les commentaires inutilesA [: N a *rend la $aleur : N

  • 8/18/2019 Cours Java Mit Sylla

    32/133

    *

  • 8/18/2019 Cours Java Mit Sylla

    33/133

    Les commentaires #AAK"C

    Les commentaires /a$adoc NN H N

    sont des commentaires s*5ciau*ermettant la *roduction automatique de documentation

    au format 6tml.Ils sont *lac5s /uste a$ant ce quBils commentent.

    Mr SYLLA. Ingenieur en informatique 33

    -alises de commentaires#AAK"Cde classe

    -alises de commentaires#AAK"C

    de fonction

    see ]une autre classe\aut6or ]nom de lBauteur\$ersion ]n de $ersion\

    *aram ]nom *aramtre\ ]descri*tion\return ]descri*tion\ece*tion ]nom ece*tion\ ]descri*tion\since ]n de $ersion\

    de*recated

  • 8/18/2019 Cours Java Mit Sylla

    34/133

    Contenu dBune documentation /a$adoc

    Kescri*tion g5n5rale de la classe

    Kescri*tion des attri-uts (JI;LK)

    Mr SYLLA. Ingenieur en informatique 34

    Kescri*tion des constructeurs (C"SDC"D)

    Kescri*tion des m5t6odes (M;"K)

    La descri*tion des attri-uts+ des constructeurs et des m5t6odes *u-lics est donn5e@ -ri$ement en d5-ut de document@ en d5tail dans la suite du document.

  • 8/18/2019 Cours Java Mit Sylla

    35/133

    La commande /a$adoc

    E;;DAI" K; LA K"CM;AI" /a$adoc @d ]r5*ertoire o doi$ent Utre mis les fic6iers g5n5r5s\

    @source*at6 ]r5*ertoire(s) de -ase des fic6iers sources\]nom du *aquetage\

    Mr SYLLA. Ingenieur en informatique 3:

    @ source*at6le(s) r5*ertoire(s) de -ase des sources

    (sBil en a *lusieurs+ s5*arer *ar des (,indo7s) ou ! (linu))

    La documentation est ensuite consulta-le 9 *artir du fic6ier inde.6tml du r5*ertoirementionn5 a$ec lBo*tion @d .

  • 8/18/2019 Cours Java Mit Sylla

    36/133

    La commande /a$adoc! eem*le

    Pour g5n5rer la documentation des classes du *aquetage essai /a$adoc @d K!allslla/a$a*rogdoc

    @source*at6 C!sllasrcessai

    Mr SYLLA. Ingenieur en informatique 3=

    Pour g5n5rer la documentation des classes des *aquetages essai (dans C!slla)et eem*le.test (dans K!allslla)

     /a$adoc @d K!allslla/a$a*rogdoc@source*at6 C!sllasrcK!allsllasrcessai eem*le.test

    JI K CAPID;

  • 8/18/2019 Cours Java Mit Sylla

    37/133

    Chapitre HLes *

  • 8/18/2019 Cours Java Mit Sylla

    38/133

    Le t4?3=4? 9 214>4?3=4>long =4 -its ! h&2233>2'3=?:4>>:?'? 9 &2233>2'3=?:4>>:?'>

    Les t*es 5l5mentaires ont une taille idenque quelque soit la *latehforme

    dBe5cution.

  • 8/18/2019 Cours Java Mit Sylla

    39/133

    Le t

  • 8/18/2019 Cours Java Mit Sylla

    40/133

    Le t

  • 8/18/2019 Cours Java Mit Sylla

    41/133

    Le t

  • 8/18/2019 Cours Java Mit Sylla

    42/133

    Initialisation des varia!les 1D@4

    ;em*le !

    int nom-re d5claration de la $aria-le nom-renom-re [ 1'' initialisation de la $aria-le nom-re

     

    Mr SYLLA. Ingenieur en informatique 42

    int nom-re [ 1'' d5claration et initialisation de la $aria-le nom-re

    Demarque !ne $aria-le mani*ul5e dans une m5t6ode ($aria-le locale4 ou un !loc de$ratou/ours Utre initialis5e a$ant toute utilisation.

    La d5claration d8une $aria-le r5ser$e de la m5moire *our stoc0er sa $aleur .

    t*enom

    $aleur [ o*5rateur d8affectation( associatif de droite 9 gauc6e)

  • 8/18/2019 Cours Java Mit Sylla

    43/133

    Initialisation des varia!les @D@4

    ;n /a$a+ toute $aria-le a**artenant 9 un o-/et (d5finie comme 5tant un attri-ut delBo-/et) est initialis5e a$ec une $aleur *ar d5faut en accord a$ec son t*e au momentde la cr5ation.Cette initialisation ne sBa**lique *as au $aria-les locales des m5t6odes de la classe(cf !remarque *r5c5dente).

    Mr SYLLA. Ingenieur en informatique 43

    TYPE VALEUR PAR D FAUT

    boolean falsebyte, short, int, long 0

    float, double 0.0char u\000classe null

  • 8/18/2019 Cours Java Mit Sylla

    44/133

    Utilisation des varia!les

    *ac0age 6ome.user./a$a.essai

    *u-lic class tilaria-leO String c6aine  DD varia!le de t

  • 8/18/2019 Cours Java Mit Sylla

    45/133

    varia!les finalesle mot clé final4

    #a$a *ermet de d5clarer que la $aleur d8une $aria-le ne doit *as Utre

    modifi5e *endant l8e5cution du *rogramme

    *ac0age 6ome.user./a$a.essai *u-lic class aria-leJinale

     

    ne fois con$ena-lementinitialis5e une $aria-le finale

    Mr SYLLA. Ingenieur en informatique 4:

      na ong "M

  • 8/18/2019 Cours Java Mit Sylla

    46/133

    Les (pérateursarithmétiques !inaires4

    *ac0age 6ome.user./a$a.essai

    *u-lic class "*XArit6X

  • 8/18/2019 Cours Java Mit Sylla

    47/133

  • 8/18/2019 Cours Java Mit Sylla

    48/133

    Les (pérateurspriorité4

    Lorsque *lusieurs o*5rateurs a**araissent dans une mUme e*ression+ ilest n5cessaire de sa$oir dans quel ordre ils sont mis en /eu

    Les o 5rateurs unaires F et ont la riorit5 la lus 5le$5e.

    Mr SYLLA. Ingenieur en informatique 4?

     

    "n trou$e ensuite au mUme ni$eau+ les o*5rateurs N+ et .Au dernier ni$eau+ se retrou$ent les o*5rateurs -inaires F et @.

    ;n cas de *riorit5 identique + les calculs s8effectuent de gauc6e 9

    droite. "n dit que l8on a une associati$it5 de gauc6e 9 droite.

  • 8/18/2019 Cours Java Mit Sylla

    49/133

    pac$age home7user7%ava7essai G D test sur la division par ero de nom!res entiers D

    pu!lic class *est K 

    -xception sur la manipulationdes opérateurs1D@4

    Mr SYLLA. Ingenieur en informatique 4&

     K

    int valeurN1OGdou!le r5sultat N valeur D OGS

  • 8/18/2019 Cours Java Mit Sylla

    50/133

    -xception sur la manipulationdes opérateurs@D@4

    Pour les entiers+ la di$ision *ar _5ro (*ar ou ) conduit 9 une erreur

    d8e5cution. Plus *r5cis5ment+ il a d5clenc6ement de ce que l8on nomme uneece*tion de t*e Arit6metic;ce*tion.

    ous $errons *lus tard comment traiter les ecce*tions.

    Mr SYLLA. Ingenieur en informatique:'

    Si nous ne le faisons *as+ nous a-outissons 9 l8arrUt de l8e5cution du*rogramme+ a$ec un message de ce t*e!

    ;ce*tion in t6read ` main /a$a.lang.Arit6metic;ce*tion! - _5ro atest.main ( est./a$a!&)

    D;MADZ; !Pour les flottants+ aucune o*5ration ne conduit 9 un arrUt del8e5cution (*as mUme une di$ision *ar _5ro ) seulementon a une $aleur non e*loita-le.

  • 8/18/2019 Cours Java Mit Sylla

    51/133

    Conversions implicites1DR4

    Les o*5rateurs arit6m5tiques ne sont d5finis que lorsque leurs deu o*5randessont de mUme t*e. Mais+ $ous *ou$e_ 5crire des e*ressions mites danslesquelles inter$iennent des o*5randes de t*es diff5rents.

    u-lic class Con$ersionLe ale'1 O

    Mr SYLLA. Ingenieur en informatique :1

     *u-lic static $oid main(String args Q)

    O int a [ 1' float * [14 dou-le d[ * F a

    Sstem.out.*rintln(Rla $aleur de lBe*ression mite (*Fa) est !RFd)T

    T

    La valeur de l8expression mixte p#a4 est 5 @7O

  • 8/18/2019 Cours Java Mit Sylla

    52/133

    Conversions implicites@DR4

    dou!le dN p # aG

    ta*e 1! a est con$erti en float+ * reste float

     

    Mr SYLLA. Ingenieur en informatique :2

    # ta*e 2! on effectue *Fa qui sera de t*e float

    ta*e 3! le r5sultat est con$erti

    en dou-le

    ta*e 4! le r5sultat est stoc05 (affectation)dans la $aria-le d

    Ces 4 5ta*es sont

    r5alis5es *ar lecom*ilateur d8o

    con$ersionsim*licites

  • 8/18/2019 Cours Java Mit Sylla

    53/133

    Conversions implicitesHDR4

    Con$ersions d8a/ustement de t*e

    ne con$ersion telle que int en float est a**el5e a/ustement de t*e .;lle ne *eut se faire que sui$ant une 6i5rarc6ie qui *ermet de ne *as

    Mr SYLLA. Ingenieur en informatique :3

     int @\ long @\float @\dou-le

    < ! une con$ersion de dou-le en float ( *ar eem*le) n8est *as l5gale .*our l8eem*le *r5cdent on ne *eut *as faire !int 0 [ * F a erreur de com*ilation

  • 8/18/2019 Cours Java Mit Sylla

    54/133

    les o 5rateurs num5ri ues ne sont as d5finis our les t es - te c6ar

    Conversions implicitesDR4

    Promotions num5riques

    Mr SYLLA. Ingenieur en informatique :4

     et s6ort.oute o*5ration qui utilise l8un de ces t*es n5cessite une con$ersion*r5ala-le dans le t*e intCette con$ersion *orte le nom de *romotion num5rique .

  • 8/18/2019 Cours Java Mit Sylla

    55/133

    *u-lic class Con$ersionLegale'2 O*u-lic static $oid main(String args Q)

    O c6ar c [ jd8 le code du caractre jd8 est con$erti en ints6ort s [' la $aria-le s est con$ertie 5galement en int

    Conversions implicitesRDR4

    Mr SYLLA. Ingenieur en informatique ::

     

    int n[ c F s le r5sultat de t*e int est affect5 9 nSstem.out.*rintln(Rla $aleur de lBe*ression mite (cFs) est !RFn )

    TT

    La valeur de l8expression mixte c#s4 est 5 1OO

  • 8/18/2019 Cours Java Mit Sylla

    56/133

    Les opérateurs relationnels1D@4

    Opérateur signification<

    == =

    !=

     

    supérieur ou égal àégal à

    différent de

    m me *r or + ma s

    celle@ci est inf5rieur 9celle des *r5c5dents

    Ces o*5rateurs sont moins *rioritaires que les o*5rateurs arit6m5tiques.Ils soumettent eu aussi leurs o*5randes au *romotions num5riques eta/ustement de t*e .

  • 8/18/2019 Cours Java Mit Sylla

    57/133

    *u-lic class "*erXDelat O*u-lic static $oid main(String args Q)

    O int n [ 1' s6ort s [1'

    Les opérateurs relationnels@D@4

    -xemple 5

    Mr SYLLA. Ingenieur en informatique :>

     

    float [ 1''dou-le d[ 2''Sstem.out.*rintln(RAffic6age 1 !RF(n [ [ s) )Sstem.out.*rintln(RAffic6age 2 !RF(d ][ ) )

    T

    T  Affichage 1 5 true Affichage @ 5 false

  • 8/18/2019 Cours Java Mit Sylla

    58/133

    Les opérateurs logiques1DH4

    O érateur Si nification

    #a$a dis*ose d8o*5rateurs logiques class5es *ar ordre de *riorit5sd5croissantes (il n8eiste *as deu o*5rateurs de mUme *riorit5).

     

    Mr SYLLA. Ingenieur en informatique :?

    !&

    ^

    |

    &&||

    négationet

    ou exclusif 

    ou inclusif 

    et(avec cout-circuit)Ou inclusif(avec court-circuit

    Le r5sultat est

    tou/ours un

    -ool5en.

  • 8/18/2019 Cours Java Mit Sylla

    59/133

    (a]-) (c]d) ou (a]-) (c]d)

    *rend la $aleur true ($rai) si les deu e*ressions a]- et c]d sont toutes lesdeu $raies (true)+ la $aleur false (fau) dans le cas contraire.(a]-) (c]d) ou (a]-) (c]d)*rend la $aleur true si l8une au moins des deu conditions a]- et c]d est

    Les opérateurs logiques @DH4

    Mr SYLLA. Ingenieur en informatique :&

    $raie+ la $aleur false dans le cas contraire.

    (a]-) (c]d)*rend la $aleur true si une et une seule des deu conditions a]- et c]d est$raie+ la $aleur false dans le cas contraire.(a]-)*rend la $aleur true si la condition a]- est fausse+ la $aleur false dans le

    cas contraire. Cette e*ression *ossde la mUme $aleur que a\[-.

  • 8/18/2019 Cours Java Mit Sylla

    60/133

    Les opérateurs logiques HDH4

    Les o*5rateurs de cout@circuit et .

    Ces deu o*5rateurs reclent une *ro*ri5t5 trs im*ortante!leur second o*5rande (figurant 9 droite de l8o*5rateur) n8est

    Mr SYLLA. Ingenieur en informatique ='

     

    *our d5cider si l8e*ression corres*ondante est $raie oufausse.

    -xemple 5( 1: ]1' ) ( 1' \ 4) on 5$alue 1: ]1' + le r5sultat

    est fau donc on n8 5$alue *as 1' \ 4

    é

  • 8/18/2019 Cours Java Mit Sylla

    61/133

    (pérateursd=incrémentation et de décrémentation1D@4

    incr5mentation

    int i N 1O G

    i## G DD cette expression vaut 1O 

    -n fait en 5crivant 5int nN i## Gon a 5

     

    *ost incr5mentation

    Mr SYLLA. Ingenieur en informatique =1

     DDmais i vaut 11

    int % N 1O G

    ##% G DD cette expression vaut 11 DDet % vaut aussi 11

    nN i G

    i N i#1 G-t en 5crivant 5int pN ##% Gon a5 % N %# 1 Gp N% G*r5 incr5mentation

    Il eiste un o*5rateur de d5cr5mentation not5e & &

  • 8/18/2019 Cours Java Mit Sylla

    62/133

    ( é t

  • 8/18/2019 Cours Java Mit Sylla

    63/133

    (pérateurs

    d=affectation élargie

    int iN @O Gi N i # 1 G  DD i vaut @1

    i #N 1 G  DDi vaut aussi @1!

  • 8/18/2019 Cours Java Mit Sylla

    64/133

    (pérateurs

  • 8/18/2019 Cours Java Mit Sylla

    65/133

    p

    de manipulation de !its 1DH4

    Opérateur Signification

    Ils tra$aillent sur le motif -inaire d8un ;I;D+ a$ec *ossi-ilit5 de

    con$ersions im*licites.

    "*5rateurs -it 9 -it

    Mr SYLLA. Ingenieur en informatique =:

    &

    |

    ^

    >>>>

    ~(unaire)

    Et (bit à bit)

    Ou inclusif(bit à bit)

    Ou exclusif(bit à bit)

    Décalage à gauche

    Décalage arithmétique à droiteDécalage logique à droite

    Complément à un (bit à bit)

    Opérande 1Opérande 2

    00

    01

    10

    11

    &

    |

    ^

    0

    0

    0

    0

    1

    1

    0

    1

    1

    1

    1

    0

    (pérateurs

  • 8/18/2019 Cours Java Mit Sylla

    66/133

    p

    de manipulation de !its @DH4

    "*5rateur de d5calage ]]

    n de t

  • 8/18/2019 Cours Java Mit Sylla

    67/133

    (pérateurs

    de manipulation de !its HDH4

    "*5rateur de d5calage \\ et \\\

    n de t

    n222Hrésultat 111O111OO11O1111111O111O1OO111O

    résultat OOOO111OO11O1111111O111O1OO111O

    Les !its de gauche sont des !its identiques au !it de signe7222 identique 9 22 sauf que tous les !its de gauche sont 9 5ro7

    (pérateur

  • 8/18/2019 Cours Java Mit Sylla

    68/133

    ConditionnelY 5

     

    Mr SYLLA. Ingenieur en informatique =?

     temps NE!eauE

    elsetempsNE mauvaisE

    temps NcielNN!leu YE!eauE 5 E mauvaisE

    'riorité des opérateurs 1D@4

  • 8/18/2019 Cours Java Mit Sylla

    69/133

    'riorité des opérateurs 1D@4

    ordre de priorité décroissante4

    les parenthèses ( )

    les opérateurs d'incrémentation ++ -- --

    les o érateurs de multi lication division et *

    Mr SYLLA. Ingenieur en informatique =&

     modulo

     

    les opérateurs d'addition et soustraction + -

    les opérateurs de décalage >

    les opérateurs de comparaison < > =

  • 8/18/2019 Cours Java Mit Sylla

    70/133

    les opérateurs d'égalité == !=l'opérateur OU exclusif  ^

    l'opérateur ET &

    'riorité des opérateurs @D@4ordre de priorité décroissante4

    Mr SYLLA. Ingenieur en informatique >'

    l'opérateur OU |

    l'opérateur ET logique &&

    l'opérateur OU logique||

    les opérateurs d'assignement = += - =

    JI K CAPID;

    Chapitre

  • 8/18/2019 Cours Java Mit Sylla

    71/133

    Chapitre Les structures de contrTle

    Les instructions d’un programme (main) sont à priori exécutées de façonséquentielle.

    Les instructions de contrôle permettent de s’affranchir de cet ordre poureffectuer des choix et des boucles.

    Mr SYLLA. Ingenieur en informatique >1

    CHOIX :

    BOUCLES :

    if ….. else

    switch

    for ,

    whiledo … while

    break

    continue

    Branchement inconditionnel

    Choix 5if "else

  • 8/18/2019 Cours Java Mit Sylla

    72/133

    if "else

    s6itch

    package home.user.java.essai ;public class Exemple_If_Else{int final MIN = 100;int final Max = 1000;int solde ;

     

    package home.user.java.essai ;public class Exemple_Switch{int final MIN = 100;int final Max = 1000;int choix , solde;

     

    Mr SYLLA. Ingenieur en informatique >2

    pu c s a c vo ma n r ng args

    { if ( solde < MIN)System.out.println("solde insuffisant" ) ;else

    if (solde = = MAX)System.out.println("solde suffisant" ) ;

    }

    }

    pu c s a c vo ma n r ng args

    { switch(choix){ case 1: solde = MIN;System.out.println("solde insuffisant" )

    break;case 2: solde = MAX ;

    System.out.println("solde suffisant" ) ;break;default : break

    } }}

    S

  • 8/18/2019 Cours Java Mit Sylla

    73/133

    s6itch

    if (condition)

    instruction_1

    [ else 

    Condition booléenne ( true / false )Expressions quelconques

     

    Mr SYLLA. Ingenieur en informatique >3

     _ es croc e s ren ermen es ns ruc ons

    facultatives.switch (expression)

    { case constante_1 : [suite_d’instruction_1 ]

    case constante_2 : [suite_d’instruction_2 ]…………………..case constante_n : [suite_d’instruction_n ][ default : suite_d’instructions ]

    }

    Expression de type byte, char,short ou int .

    Expression constante d’ untypecompatible par affectationavec

    le type de expression

    L=instruction

  • 8/18/2019 Cours Java Mit Sylla

    74/133

    do 6hilepackage home.user.java.essai ;import java.util.Scanner ; // importation de classe de l’ API

    public class Exemple_Do_While{public static void main (String args [ ]){ Scanner clavier = new Scanner (System.in) ;

    do

    Mr SYLLA. Ingenieur en informatique >4

    { System.out.println ("saisir un entier strictement positif " ) ;

    n = clavier.nextInt ( ) ;  // saisir à partir du clavierif ( n < 0) System.out.println ("la saisie est invalidée: recommencez" ) ;

    }while ( (n < 0) || (n = = 0) );

    }}

    do instruction

    while (condition) ;

    Expression quelconque

    Condition booléenne

    L=instruction

  • 8/18/2019 Cours Java Mit Sylla

    75/133

    6hile

    package joseph.cours.java ;public class Exemple_While{public static void main(String args [ ]){ while ( n < = 0)

    { System.out.println ("saisir un entier strictement positif " ) ;

    Mr SYLLA. Ingenieur en informatique >:

    n = clavier.nextInt( ) ;  // saisir à partir du clavier

    if ( n < 0) System.out.println ("la saisie est invalidée: recommencez" ) ;}

    }}

    while (condition) ;

    instruction

    Condition booléenne

    Expression

    quelconque

    L=instruction

  • 8/18/2019 Cours Java Mit Sylla

    76/133

    for

    package joseph.cours.java ;public class Exemple_For{public static void main (String args [ ]){ int tab [ ] = new int [ 100] ;  // tableau d’entiers de taille 100

    for( int i = 0 ; i < 100 ; i ++ )

    Mr SYLLA. Ingenieur en informatique >=

    {

    tab [ i ] = i + 1;}

    }}

    for ( [initialisation] ;[condition] ; [incrémentation])

    instruction

    +ranchement inconditionnel

  • 8/18/2019 Cours Java Mit Sylla

    77/133

    !rea$ D continue

    Elle sert à interrompre le déroulement de la boucle, en passant àl’instruction suivant la boucle.

    Ces instructions s’emploient principalement au sein des boucles.

    breakpackage joseph.cours.java ;

    Mr SYLLA. Ingenieur en informatique >>

    public class Exemple_Break{

    public static void main (String args [ ]){ int tab [ ] = new int [ 10] ;  // tableau d’entiers de taille 10for( int i = 0 ; i < 10 ; i ++ )

    { if ( i = = 5 ) break ; // initialiser seulement les 5 premiers elts du tableautab [ i ] = i + 1;

    } // le break nous branche à la sortie du for pour continuerfor ( int i = 0 ; i < 10 ; i ++ )

    System.out.println (" éléments du tableau:" +" "+tab [ i] );}

    }

    éléments du tableau: 1 2 3 4 5 0 0 0 0 0

  • 8/18/2019 Cours Java Mit Sylla

    78/133

    package home.user.java.essai;public class Essai_Break_Imbr {

    public static void main (String args [ ]){ int tab [ ] = new int [ 10] ;  // tableau d’entiers de taille 10for( int i = 0 ; i < 10 ; i ++ )

     

    En cas de bouclesimbriquées,l’instruction breakfait sortir uniquementde la boucle la plusinterne.

    !rea$ avec im!rication de !oucles

    Mr SYLLA. Ingenieur en informatique >?

     for ( int j =i;j

  • 8/18/2019 Cours Java Mit Sylla

    79/133

    !rea$ avec étiquette

    package joseph.cours.java;public class Essai_Break_Etiq {

    public static void main (String args [ ]){ int tab [ ] = new int [ 10] ;  // tableau d’entiers de taille 10repeat: for( int i = 0 ; i < 10 ; i ++ )

     

    Mr SYLLA. Ingenieur en informatique >&

     for ( int j =i;j

  • 8/18/2019 Cours Java Mit Sylla

    80/133

    continue

    Continue ordinaire

    L’instruction continue permet de passer prématurément au

    tour de boucle suivant.

    package joseph.cours.java ; 

    Mr SYLLA. Ingenieur en informatique ?'

       _ _ public static void main (String args [ ])

    { int tab [ ] = new int [ 10] ;  // tableau d’entiers de taille 10for( int i = 0 ; i < 10 ; i ++ ) // ici

    { if ( i = = 5 ) continue ; // on poursuit la boucle fortab [ i ] = i + 1;

    }for ( int i = 0 ; i < 10 ; i ++ )System.out.println (" éléments du tableau:" +" "+tab [ i] );

    }} éléments du tableau: 1 2 3 4 5 0 6 7 8 9 10

  • 8/18/2019 Cours Java Mit Sylla

    81/133

    Continue avec étiquette

    package home.user.java.essai;public class Essai_Continue_Etiq {

    public static void main(String args [ ]){ int tab [ ] = new int [ 10] ;  // tableau d’entiers de taille 10again: for( int i = 0 ; i < 10 ; i ++ ) // cette fois le continue branche ici

    Mr SYLLA. Ingenieur en informatique ?1

    {

    for ( int j =i;j

  • 8/18/2019 Cours Java Mit Sylla

    82/133

    'rogrammation (rientée (!%et

    Le concept de classe

    Une classe est la description d’un ensemble de données et de fonctionsregroupées au sein d’une même entité (appelée objet).

     

    Mr SYLLA. Ingenieur en informatique?2

     d’un objet du monde réel.

    Un objet sera défini comme étant une entité concrète ou abstraite dumonde réel. Les objets contiennent des attributs et des méthodes.Chaque objet sera caractérisé par son jeu de données( on parlera d’

    attributs ou aussi de champs). Les fonctions qui agissent sur lesdonnées de l’objet sont aussi appelées méthodes.

  • 8/18/2019 Cours Java Mit Sylla

    83/133

    (!%et N identité # état # comportement

    - une identité qui lui est propre :

    Même si deux personnes ont des noms identiques, elles désignent deux

    Chaque objet possède :

    Mr SYLLA. Ingenieur en informatique?3

      . .

    - un état : les informations qui lui sont propresIl est défini par les valeurs associées à chacun des champs de la classe.Pour une personne : nom ,prénom, age, sexe, race ……

    - un comportement : les méthodes applicables à l’objetPour une personne : respirer, marcher, mourir ……

  • 8/18/2019 Cours Java Mit Sylla

    84/133

    Définition d’une classe

    Les champs x et y ne sont visiblesq’à l’intérieur de la classe et non àl’extérieur :principe de l’encapsulation desdonnées. Les données ne seront

    La méthode est accessible depuis n’

    importe quel programme.

    Mr SYLLA. Ingenieur en informatique?4

     accessibles que par l’intermédiaire

    de méthodes prévues à cet effet.

    {

    private int x ; // champ x d’un objet Pointprivate int y ; // champ y d’un objet Pointpublic void initialise ( int abs, int ord ){ x = abs ;

    y = ord ;}

    } // fin de la classe

    Permet d’attribuer des valeurs initiales

    aux champs de l’objet.NB :on verra que c’est au constructeurd’effectuer ce travail.

    Une méthode qui nefournit aucun résultat:

    void

  • 8/18/2019 Cours Java Mit Sylla

    85/133

    Remarques

    Une méthode peut être déclarée private : dans ce cas elle n’est visiblequ’à l’intérieur de la classe où elle est définie. Pour pouvoir l’utiliser dans

    Mr SYLLA. Ingenieur en informatique?:

      ,publique de sa classe ayant l’appelée.

    Il est fortement déconseillé de déclarer des champs avec l’attribut public ,cela nuit à l’encapsulation des données.

  • 8/18/2019 Cours Java Mit Sylla

    86/133

    Créer un o!%et N instancier une classe

    int a = 10 ;  // réservation de l’emplacement mémoire pour une variable de type int

    float x ; // réservation de l’emplacement mémoire pour une variable de type floatPoint a ;  // cette déclaration ne réserve pas d’emplacement pour un objet de type // mais simplement une référence à un objet de type Point.

    Mr SYLLA. Ingenieur en informatique?=

    La création d’un objet (on parle d’instanciation ) se fait avec l’opérateur newnew Point ( ) ;  // crée un emplacement pour un objet de type Point et

     // fournit sa référence comme résultat

    on pourra écrire :

    a= new Point ( ) ;  // crée un objet de type Point et on met sa reference dan // la variable a ?

    ?

    x

    yréférencea

    objetPoint

  • 8/18/2019 Cours Java Mit Sylla

    87/133

    ;anipulation d=o!%ets

    Une fois q’une référence à un objet est convenablement initialisée,on peut appliquer n’importe quelle méthode à l’objet correspondant .

    a.initialise ( 2,4 ) ;  //appelle la méthode initialise du type Point en  ’ ’

    Mr SYLLA. Ingenieur en informatique?>

      , // les arguments 2 et 4

    Opérateur d’accès.

  • 8/18/2019 Cours Java Mit Sylla

    88/133

    class Point01{

    private int x ; // champ x d’un objet Pointprivate int y ; // champ y d’un objet Pointpublic void initialise ( int abs, int ord )

     

    'etit programme de test

    On a deux classes dans le

    même fichier source. Seulela classe contenant leprogramme principal( main)

     

    Mr SYLLA. Ingenieur en informatique??

    { x = abs ;

    y = ord ;}} // fin de la classe Point01public class TestPoint01{ public static void main( String args [ ] )

    { Point01 a = new Point01 ( ) ;a.initialise( 10,12 ) ; // le champ x aura la valeur 10 et y 12}

    } // fin de la classe TestPoint01

    o re c ar e avecl’attribut public.

  • 8/18/2019 Cours Java Mit Sylla

    89/133

    Le constructeur 1DH4

    En Java, la création d’objet se fait par allocation dynamique grâce à

    l’opérateur new qui appelle une méthode particulière : le constructeur.Dans l’exemple précèdent, il n’y avait pas de constructeur mais plutôt c’étaitla méthode initialise qui se chargeait d’initialiser correctement les champs

    Mr SYLLA. Ingenieur en informatique?&

    d’un objet de type Point. La démarche proposée suppose que l’utilisateur fera

    appel de cette méthode au moment opportun pour initialiser correctement unobjet.En fait un constructeur permet d’automatiser l’initialisation d’un objet.

    Un constructeur est une méthode qui porte le même nom que lenom de la classe et qui est sans valeur de retour. Il peut disposd’un nombre quelconque d’arguments.

  • 8/18/2019 Cours Java Mit Sylla

    90/133

    Le constructeur @DH 4

    class Point02{

    private int x ; // champ x d’un objet Pointprivate int y ; // champ y d’un objet Pointpublic Point02 ( int abs, int ord ) // un constructeur à deux

    Mr SYLLA. Ingenieur en informatique&'

    arguments

    { x = abs ;y = ord ;}

    public void deplace (int dx, int dy ){ x += dx ; y += dy ;

    }public void affiche( ){ System.out.println("Point de coordonnées" + x + " et " +y);}

    }  //fin de la classe Point02

    D 4

  • 8/18/2019 Cours Java Mit Sylla

    91/133

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

    { Point02 a = new Point02 ( 10, 12 ) ; // le champ x aura la valeur 10 ety 12 a.affiche( ) ;

    a.deplace( 10,12 ) ;

    Le constructeur HDH4

     

    Mr SYLLA. Ingenieur en informatique&1

    a.affiche( ) ;

    } // fin de la classe TestPoint02

    Point de coordonnées : 10 et 12

    Point de coordonnées : 20 et 24

    Zuelques r0gles sur les constructeurs

  • 8/18/2019 Cours Java Mit Sylla

    92/133

    Une classe peut disposer de plusieurs constructeurs: ils se différencieront par le nombr

    et le type de leurs arguments.

    Une classe peut ne pas disposer de constructeur; dans ce cas on peut instancier des’

    Mr SYLLA. Ingenieur en informatique&2

      .

    Mais dès qu’une classe possède au moins un constructeur, ce constructeur par défautne peut plus être utilisé, dans le dernier exemple on ne pouvait pas faire :

    Point a = new Point ( ) ;// incorrect s’il y’a un constructeurUne classe peut disposer d’un constructeur sans arguments qui est bien différent duconstructeur par défaut (appelé souvent pseudo-constructeur).

    Un constructeur peut appeler un autre constructeur de la même classe (A VOIR).

    Un constructeur peut être déclaré public ou privé.

    C t ti d= !% t

  • 8/18/2019 Cours Java Mit Sylla

    93/133

    Construction d=un o!%et

    La construction et l’initialisation des champs d’un objet se font en 3 étapes :

    l’initialisation par défaut de tous les champs à une valeur "nulle", l’initialisation explicite lors de la déclaration du champ, l’exécution des instructions du constructeur.

    Mr SYLLA. Ingenieur en informatique

    &3

    public class TestInit{ private int nombre ;private int diviseur = 12 ;public TestInit( ) { nombre = 24 ;}public float diviser( ){ return (float) nombre / diviseur ;}

    }

    nombre = 0diviseur =0

    nombre = 0diviseur =12

    nombre =24diviseur =12

    Résultat : 2.0

     .aleur "nulle" suivant le t

  • 8/18/2019 Cours Java Mit Sylla

    94/133

    *

  • 8/18/2019 Cours Java Mit Sylla

    95/133

    final

    public class ChampFinal

    { private final int NOMBRE ; // initialisation différéeprivate final float MAX ;  // initialisation différéeprivate final int DIVISEUR = 12 ; // valeur fixée à la déclaration

    Mr SYLLA. Ingenieur en informatique

    &:

    public ChampFinal( int nbre)

    { NOMBRE = nbre ; // la valeur de NOMBRE dépendra de celle de nbreMAX = 20 ;  // la valeur de MAX est fixée à 20 une seule fois.}

    public float diviser( ){ return (float) NOMBRE / DIVISEUR ;}

    }ATTENTION: chaque objet possédera son propre champ NOMBRE,malgré que ce dernier est déclaré final.

    Contrat et implémentation

  • 8/18/2019 Cours Java Mit Sylla

    96/133

    Une bonne conception orientée objets s’appuie sur lanotion de contrat , qui revient à considérer q’une classe estcaractérisée par un ensemble de services définis par :-- les en-têtes de ses méthodes publiques ,-- le comportement de ses méthodes .

     

    Mr SYLLA. Ingenieur en informatique

    &=

    Le reste, c’est-à-dire les champs et les méthodes privés

    ainsi que le corps des méthodes publiques, n’a pas à êtreconnu de l’utilisateur . Il constitue ce que l’on appellesouvent l’implémentation de la classe .En quelque sorte, le contrat définit ce que fait la classetandis que l’implémentation précise comment elle le fait .

    Le grand mérite de l’encapsulation des données est depermettre au concepteur d’une classe d’en modifierl’implémentation sans que l’utilisateur n’ait à modifier lesprogrammes qui l’exploitent .

     Affectation d=o!%ets

  • 8/18/2019 Cours Java Mit Sylla

    97/133

    Point a ;

    a = new Point (12,10 ) ;

     11

    12

    10a

    Mr SYLLA. Ingenieur en informatique

    &>

    o n = new o n , ;

    b

    a = b ;1210

    1114

    a

    bSera candidat auramasse-miettes

    s’il n’est plus référencéDésormais a et b désignent le même objet.

    affectation d’objet

    )éférence nulle5 le mot clé

    null

  • 8/18/2019 Cours Java Mit Sylla

    98/133

    nullclass Point03{

    private int x ; // champ x d’un objet Pointprivate int y ; // champ y d’un objet Pointpublic Point03 ( int abs, int ord ) // un constructeur à deux arguments

     

    Mr SYLLA. Ingenieur en informatique

    &?

    { x = abs ;y = ord ;

    }public Point03 coincide (Point03 p )

    { Point03 t = null ; // t est locale donc il est nécessaire de l’initialiserif ((p.x = = this.x) && ( p.y = = this.y )) t = this;

    else t = null;return t ;}

    }  //fin de la classe Point03

    Les variables locales doivent

    toujours être initialisées avant touteutilisation.

    Comparaison d=o!%ets 1D@45

    versus equals

  • 8/18/2019 Cours Java Mit Sylla

    99/133

    N N versus equalspublic class Point03{ private int x ; // champ x d’un objet Point

    private int y ; // champ y d’un objet Pointpublic Point03 ( int abs, int ord ) // un constructeur à deux arguments{ x = abs ;

     

    Mr SYLLA. Ingenieur en informatique

    &&

    y = or ;}

    public static void main(String args [ ] ){Point03 a = new Point03 ( 1,1 );Point03 b = new Point03 ( 1,1 );System.out.println ("avec = = : " + a == b);System.out.println ("avec equals :" + a.equals ( b ));

    }}  //fin de la classe Point03 Résultat avec = = : false

    avec equals : false

    Comparaison d=o!%ets @D@4

  • 8/18/2019 Cours Java Mit Sylla

    100/133

    = = teste s’il s’agit du même objet ( pas d’une copie ).equals teste l’égalité de contenu de deux objets .

    Mr SYLLA. Ingenieur en informatique

    1''

    ATTENTION :dans l’exemple précédent la méthode equals dont il s’agit est cellede la classe Object (la super classe de toutes les classes en Java).Souvent, vous serez emmené à redéfinir cette méthode.Elle a pour en-tête:

    public boolean equals (Object o )

    L’opérateur != s’applique également à des références d’objet pour tester la différence.

    Champs et méthodes de classe5

    le mot clé static

  • 8/18/2019 Cours Java Mit Sylla

    101/133

    le mot clé static 7

    Champs de classe

    Les champs de classe ou champs statiques existent en un seul exemplaire pourtoutes les instances de la classe. On les déclare avec le mot clé static .

    Mr SYLLA. Ingenieur en informatique

    1'1

    public class ChampStatic{

    int n ;static int k ;

    }

    ChampStatic a = new ChampStatic( ) ;ChampStatic b = new ChampStatic( ) ;

    a.nb.n

    a.kb.k

    a.k et b.k peuvent être remplacés par ChampStatic.k . Mais si k est privé, on nepeut faire ceci.

    Exemple d’utilisation de champs de classe

  • 8/18/2019 Cours Java Mit Sylla

    102/133

    public class ChampStatic {private static int nombreInstanceCrees;  // champ static pour stocker le nombrepublic ChampStatic ( )  // d’objets créés

    { nombreInstanceCrees++; // on incrémente de 1 à chaque création d’un objet}

     

    Mr SYLLA. Ingenieur en informatique1'2

    public void affiche ( ){

    System.out.println ("nombre d’objets créés :" + nombreInstanceCrees );}public static void main (String args [ ])

    { ChampStatic a = new ChampStatic ( );

    a.affiche ( );ChampStatic b = new ChampStatic ( );b.affiche ( );

    }}

    nombre d’objets créés : 1nombre d’objets créés : 2

  • 8/18/2019 Cours Java Mit Sylla

    103/133

    Méthodes de classe

    Une méthode d’une classe ayant un rôle indépendant de toute instance de la classe doiêtre déclarée avec le mot clé static et elle ne ourra être a li uée à aucun ob et de c

    Mr SYLLA. Ingenieur en informatique 1'3

     classe, contrairement aux méthodes d’instances.

    L’appel de la méthode ne nécessitera que le nom que de la classe.

    ATTENTION :

    Une méthode statique ne peut pas agir sur des champs usuel

    c’est-à-dire non statiques.

    Exemple d’utilisation de méthodes de classe

  • 8/18/2019 Cours Java Mit Sylla

    104/133

    public class MethodeStatic {private long n;

    private static long nombreInstanceCrees; // champ static pour stocker le nombrepublic MethodeStatic( long k)  // d’objets créés

    { nombreInstanceCrees++ ;

    Mr SYLLA. Ingenieur en informatique1'4

    n = k ;}

    public void affiche ( ){

    System.out.println ("nombre d’objets créés :" + nombreObjet( ) );}

    public static long nombreObjet( ){ return nombreInstanceCrees;}

    }

    Bloc d’initialisation statique

  • 8/18/2019 Cours Java Mit Sylla

    105/133

    Remarque :

    l’initialisation d’un champ statique se limite uniquement à :- l’initialisation par défaut,- l’initi lis tion ex licite éventuelle.

    Mr SYLLA. Ingenieur en informatique 1':

     

    Les blocs statiques sont souvent utilisés pour initialiser des variables complexes dont l’initialisation ne peut être faite par une simple instruction.Les instructions n’ont accès qu’aux champs statiques de la classe.

    Les instructions d’un bloc statique sont exécutées de façon automatique et une seule fois

    lorsque la classe est chargée.

    Exemple d’utilisation de bloc statique

  • 8/18/2019 Cours Java Mit Sylla

    106/133

    public class BlocStatic {private double solde;

    private static int [ ] tab ;static { tab = new int[10]; // bloc d’initialisation délimité par des accolades

      =

    Mr SYLLA. Ingenieur en informatique

    1'=

     tab[ i ] = i + 1;

    }  // fin du bloc staticpublic BlocStatic (double solde) {this.solde = solde;

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

    BlocStatic a = new BlocStatic( 12000 ); for (int i=0;i < tab.length; i++)System.out.print (tab[i]+" ");

    }} // fin de la classe

    1 2 3 4 5 6 7 8 9 10

    Surdéfinition de méthodes

  • 8/18/2019 Cours Java Mit Sylla

    107/133

    Surdéfinition de méthodes

     

    Mr SYLLA. Ingenieur en informatique 1'>

    a sur n on e m o es s gn e qu un m me nom e m o

    peut être utilisé plusieurs fois dans une même classe . Dans ce cle nombre et/ou le type des arguments doit nécessairement chan

    On peut parler indifféremment de surdéfinition, surcharge ou

    overloading (en Anglais).

    Exemple de surdéfinition de méthode

  • 8/18/2019 Cours Java Mit Sylla

    108/133

    public class ExempleSurdefinition {private int x ;

    private int y ;public ExempleSurdefinition (int abs, int ord ) { x=abs; y=ord; }public void deplace (int dx, int dy) { x += dx ; y += dy ; }

     

    Mr SYLLA. Ingenieur en informatique1'?

    public void deplace (int dx ) { x += dx ;}

    public void affiche(){ System.out.println(" Point de coordonnees :"+ x+ " "+y);}public static void main(String[] args) {ExempleSurdefinition ex = new ExempleSurdefinition(10,10);ex.deplace ( 10 ); // appel de deplace ( int )

    ex.affiche ( );ex.deplace( 10, 10 ); // appel de deplace (int , int )ex.affiche( );}

    }

    Point de coordonnes : 20 10Point de coordonnes : 30 20

  • 8/18/2019 Cours Java Mit Sylla

    109/133

    Surdéfinition de constructeurs

  • 8/18/2019 Cours Java Mit Sylla

    110/133

    Les constructeurs peuvent être surdéfinis comme toute autre méthode.

    public class Individu {private String nom;private String prenom; Attribut de t e

    Mr SYLLA. Ingenieur en informatique11'

     private Compte c;

     /* constructeur à deux arguments*/ public Individu ( String lenom, String leprenom ) {nom = lenom;prenom = leprenom;

    }

     /* constructeur à trois arguments */ public Individu (String lenom, String leprenom, Compte cp) {nom = lenom;prenom = leprenom;c = cp; } }

     objet. Il doit exister

    obligatoirement uneclasse Compte.

    *ransfert d=informations

    avec les méthodes

  • 8/18/2019 Cours Java Mit Sylla

    111/133

    avec les méthodesEn Java, la transmission d’informations se fait toujours par valeur.

    La transmission, par exemple d’un argument à une méthode oud’une valeur de retour se fait toujours par valeur.

     

    Mr SYLLA. Ingenieur en informatique 111

    A RETENIRe e ransm ss on a es cons quences o a emen

    différentes, selon que l’on manipule des types primitifs ou

    bien des types objet ( c-à-d des références).

    RAPPELTransmission par valeur : la méthode reçoit une copie de lavaleur de l’argument effectif sur laquelle elle travaille. Pas depossibilité d’agir sur la valeur de l’argument effectif.Transmission par référence ( par adresse): la méthode reçoitl’adresse de l’argument effectif sur laquelle elle travailledirectement. Ici, possibilité de modifier donc la valeur del’argument effectif.

    Illustration de la transmission de messages avec

    les méthodes (1/2)

  • 8/18/2019 Cours Java Mit Sylla

    112/133

    public class TransValeurTypePrimitif {private double res;

    public TransValeurTypePrimitif (double n) {res = n;

    Argument muet.2

    Mr SYLLA. Ingenieur en informatique112

    public double add ( double p ){

    return res += p;}

    public static void main(String[] args) {TransValeurTypePrimitif trans = new TransValeurTypePrimitif (12);

    System.out.println ( trans.add ( 10 ) );}

    }

    10

    10p

    p contientune copiede la valeurde l’argumenteffectif.

    Argument effectif.1

    34

    Illustration de la transmission de messages avec

    les méthodes (2/2)

  • 8/18/2019 Cours Java Mit Sylla

    113/133

    public class Point {private int x;

    private int y;public Point (int abs, int ord) {x = abs; 

    Référence à un objet de type Pointtransmise en ar ument d’une

    Mr SYLLA. Ingenieur en informatique

    113

    y = ord;}public boolean coincide ( Point p){return ( p.x == x && p.y == y);

    }public static void main (String [ ] args) {Point a = new Point(10,12);Point b = new Point(12,12);System.out.println( a.coincide ( b ) );

    }}

     Méthode.

    p

    b

    1212

    a 1210

     Autoréférence 5 this [4

  • 8/18/2019 Cours Java Mit Sylla

    114/133

    Dans un appel de la forme a.coincide ( b ), la méthode reçoit une information lui

    permettant d’identifier l’objet ayant fait l’appel. Si l’information est transmise, laméthode pourra agir sur les champs spécifiques de l’objet.Cette transmission est gérée automatiquement par le compilateur.

     

    Mr SYLLA. Ingenieur en informatique 114

    Mais on peut vouloir agir sur l’objet globalement au lieu d’agir sur les champs.

    Dans ce cas Java utilise le mot clé

    this. Dans l’exemple précédent, on peut remplace

    la méthode coincide par celle-ci:

    public boolean coincide ( Point p){  // this reference ici l’objet courant ie celui ayant fait l’appel de coincide

    return ( p.x == this.x && p.y == this.y);}

    Dans un appel a.coincide (b) a désigne l’objet courant.

     Autoréférence 5 this @D@4

  • 8/18/2019 Cours Java Mit Sylla

    115/133

    L’utilisation de this est très pratique dans l’écriture des méthodes et surtout des

    constructeurs.

    Mr SYLLA. Ingenieur en informatique 11:

     // noms de champs et noms d’attributs

     //différentspublic Point ( int abs, int ord ) {x = abs;y = ord;

    }

     // noms de champs et noms d’attributs

     //identiquespublic Point ( int x, int y ) {this.x = x;this.y = y;

    }

     Appel d=un constructeur dans un

    autre constructeur7 1D@4

  • 8/18/2019 Cours Java Mit Sylla

    116/133

    Un constructeur peut appeler un autre constructeur de la même classe en utilisant l

    mot clé this. L’objectif majeur est la simplification du code et aussi pour desproblèmes de sécurité.

    public class Individu { 

    Cette classe eut êtr

    Mr SYLLA. Ingenieur en informatique

    11=

    private String nom;private String prenom;

    private Compte c;public Individu ( String lenom, String leprenom ) {nom = lenom;prenom = leprenom;

    }public Individu (String lenom, String leprenom, Compte c1) {nom = lenom;prenom = leprenom;c = c1;

    } }

     écrite de façon plussophistiquée commesuit …

     Appel d=un constructeur dans un

    autre constructeur7 @D@4

  • 8/18/2019 Cours Java Mit Sylla

    117/133

    public class Individu2 {private String nom;

    private String prenom;private Compte c;public Individu2 ( String nom, String prenom ) {

     

    Mr SYLLA. Ingenieur en informatique 11>

    .this.prenom = prenom;

    }public Individu2 (String nom, String prenom, Compte c) { // appel du constructeurs a deux arguments

    this (nom, prenom);this. c = c;

    } }

    ATTENTION :L’appel this (…) doit nécessairement être la première instructiodu constructeur appelant.

    (!%et mem!re

  • 8/18/2019 Cours Java Mit Sylla

    118/133

    Objet membre = référence à un objet

    public class Point { public class Cercle { 

    Mr SYLLA. Ingenieur en informatique

    11?

    private int y;

    public Point (int abs, int ord) {x = abs;y = ord;

    }public void affiche ( )

    {System.out.println(" Point :" +x " " +y);}

    }

     private Point p; // objet membre

    public Cercle (double r, int x, int y) {this.r = r;p = new Point (x, y);

    }public void affiche ( )

    {System.out.println("Cercle de rayon :" +r);System.out.print(" et de centre:" );p.affiche());

    }}

    Les classes internes

  • 8/18/2019 Cours Java Mit Sylla

    119/133

    Une classe est dite interne lorsque que sa définition est située àl’intérieur de la

    définition d’une autre classe. Les classes internes (inner classes)peuvent être situées à différent niveau d'une classe normale.Il existe uatre t es de classes imbri uées :

    Mr SYLLA. Ingenieur en informatique 11&

     - les classes internes simples, définies au niveau des classes,- les classes internes statiques, représentant une classe de sommetintérieure,- les classes locales, définies au niveau des méthodes,- les classes internes anonymes, définies au niveau d'une instance.Les classes internes sont particulièrement utiles pour :

    - permettre de définir une classe à l'endroit ou une seule autre en a besoin

    - définir des classes de type adapter (essentiellement à partir du JDK 1.1 pour traiterdes évenements émis par les interfaces graphiques)- définir des méthodes de type callback d'une façon générale.

    Classes internes simples(1/5)

    package essai01;

  • 8/18/2019 Cours Java Mit Sylla

    120/133

    package essai01;public class ClasseParente {

    private int x = 10, static int y = 20;

    public int addition ( ) { return (x + y); }public class ClasseInterne //DEBUT CLASSE INTERNE{ static int p = 20;  //erreur de compilation,

     

    Mr SYLLA. Ingenieur en informatique 12'

    s a c na n = ; cons an e s a quepublic int multiplier ( )

    { return x*y + addition ( ); }} //FIN CLASSE INTERNE

    public static void main (String [ ] args) {ClasseParente ob_out = new ClasseParente ( );

     //ClasseInterne ob_in0 = new ClasseInterne ( ); IMPOSSIBLE

    ClasseInterne ob_in = ob_out.new ClasseInterne ( );System.out.println (ob_in.multiplier ( ));

     // System.out.println (ob_out.multiplier ( )); //ERREUR // System.out.println (ob_in.addition ( )); IMPOSSIBLE

    } }

    Classes internes simples(2/5)

  • 8/18/2019 Cours Java Mit Sylla

    121/133

    Une classe interne peut être déclarée avec n’importe quel modificateur d’accès (( 

    Quelques remarques importantes:

    Mr SYLLA. Ingenieur en informatique

    121

    , , , , .Elles sont membres à part entière de la classe qui les englobe et peuvent accéder à tou

    membres de cette dernière.Les classes internes ne peuvent pas être déclarées à l'intérieur d'initialiseursstatiques (blocs statiques).

    Les classes internes ne doivent pas déclarer de membres statiques, sauf s'ils

    comportent le modificateur final, dans le cas contraire, une erreur de compilation seproduit. Toutefois, les membres statiques de la classe externe peuvent être héritéssans problème par la classe interne.

    Les classes imbriquées sont capables d'accéder à toutes les variables et méthodes dela classe parente, y compris celles déclarées avec un modificateur private.

    Classes internes simples (3/5)

  • 8/18/2019 Cours Java Mit Sylla

    122/133

    La notation particulière:

    ClasseInterne ob_in = ob_out.new ClasseInterne();

    On retient:

    Mr SYLLA. Ingenieur en informatique 122

    spécifie que l'objet créé est une instance de la classe interneassociée à l'objet résultant de l'instanciation d'une classe de plus haut niveau.L'instanciation de la classe interne passe obligatoirement par une instancepréalable de la classe d'inclusion.La classe parente est d'abord instanciée, puis c'est au tour de la classe interne de l'êtr

    par l'intermédiaire de l'objet résultant de la première instance.

    Classes internes simples (4/5)

  • 8/18/2019 Cours Java Mit Sylla

    123/133

    Il est possible d'utiliser une méthode de la classe parente pour créer directementune instance de la classe interne. Toutefois, lors de l'appel de la méthode, il sera

    nécessaire de créer une instance de la classe d'inclusion.package essai0;

    ublic class ClasseParente02

    Mr SYLLA. Ingenieur en informatique 123

     private int x = 10, int y = 20;public int addition ( ){ ClasseInterne02 obj_in = new ClasseInterne02( );

    return (x + y)+ obj_in .multiplier ( );}public class ClasseInterne02

    { public int multiplier ( ){ return x*y ;}

    }}

    Classes internes simples (5/5)

    public class ClasseParente03 {

  • 8/18/2019 Cours Java Mit Sylla

    124/133

    Parfois, il peut

    être nécessairededistinguer les

    public class ClasseParente03 {

    private int x = 10, int y = 20 ;

    public int addition( ){ ClasseInterne03 obj_in= new ClasseInterne03 (10,10);return (x + y)+ obj_in.multiplier();

    Mr SYLLA. Ingenieur en informatique 124

    variablessituées dans les

    classesinterne etexterne.

    public class ClasseInterne03

    { private int x = 12; private int y = 14;public ClasseInterne03 (int x, int y){ this.x = x + ClasseParente03.this.x;

    this.y = y + ClasseParente03.this.y;}public int multiplier( )

    { return x*y ;} }}

    Classes internes statiques

    bli l P t 04 {

    Elles sont membres à part entière de la classe qui les englobent et peuventaccéder uniquement aux membres statiques de cette dernière.

  • 8/18/2019 Cours Java Mit Sylla

    125/133

    Les classes internesstatiques peuvent

    accéder à l'ensembledes membresstatiques de leur

    public class Parente04 {private static int x = 1, y = 2;

    private int z = 3;public int addition ( ){ return x + y + z;}public static int multiplier( ){ return x*y;}

    Mr SYLLA. Ingenieur en informatique 12:

    c asse paren e,l'instar des méthodes

    de classe.private static int k = 1;private int p = 2;public void diviser ( ){ System.out.println (new Parente04( ).addition ( )/p+x+y);}}

    public static void imprimer(){System.out.println ( multiplier ( ) / x+y+k );} }public static void main(String [ ] args) {Parente04.Interne04( ).imprimer ( );new Parente04.Interne04( ).diviser ( )} }

    s a c

    Classes locales

  • 8/18/2019 Cours Java Mit Sylla

    126/133

    Une classe locale est définie à l'intérieur d'une méthode ou un bloc, et agît

    librement et essentiellement au sein de cette dernière.Elles peuvent être static ou non.

    Mr SYLLA. Ingenieur en informatique 12=

    Il n'est possible de déclarer des classes locales, dont la portée est limitée au bloc,

    qu'avec les modificateurs final ou abstract. Les modificateurs suivants : public,protected, private et static, sont interdits.Les données membres d'une classe externe peuvent être accédés par la classe locale.

    Seules les variables locales et les paramètres de la méthode d'inclusion, déclarée

    avec le modificateur final, peuvent être exploitées par les classes internes locales,sinon une erreur se produit lors de la compilation. De plus, ces variables doiventêtre impérativement initialisées avant leur emploi dans la classe locale.

    Classes locales

    public class ClasseExterne {

  • 8/18/2019 Cours Java Mit Sylla

    127/133

    public class ClasseExterne {private int x,y; private static int z;

    public void addition( int p){final int k = 9;int u = 121; // inutilisable dans

    p et u ne peuvent pasêtre utilisés dans ClassLocale.

    Par contre , k est déclarée finaldonc on peut l’utiliser.

    Mr SYLLA. Ingenieur en informatique 12>

    ClasseLocale

    class ClasseLocale {boolean verif ( ){if (x+ y+ k = = z) return true;else return false;

    }

    }} // fin bloc de méthode

    }

    REMARQUE:

    Lorsqu'une classe estdéclarée dans une méthodestatique, alors les variablesd'instances de la classe externene sont plus accessibles pour la

    classe imbriquée.L'utilisation d'une classe localene dépend pas de l'instanciationd'une classe externe.

    Classes anonymes

  • 8/18/2019 Cours Java Mit Sylla

    128/133

    Les classes anonymes (anonymous classes) sont déclarées immédiatement après

    l'expression d'instanciation d'une classe, permettant directement d'étendre oud'implémenter respectivement la classe ou l'interface instanciée.Elles sont définies et instanciées à la volée sans posséder de nom.

    Mr SYLLA. Ingenieur en informatique 12?

    new Classe ([Liste d'arguments]) { // Instructions de la classe anonyme... };new Interface ( ) { // Instructions de la classe anonyme... };

    Les classes anonymes obéissent aux mêmes restrictions que les classes locales et dene peuvent ni être abstraites (abstract) ni être statiques (static).Par contre, elles portent toujours implicitement le modificateur final.En fait, aucun modificateur n'est permis dans une déclaration de classe anonyme

    On verra l’utilité des classes anonymes en programmation évènementielle.

    3ros plan sur les pac$ages

    Un package regroupe un ensemble de classes sous un même espace de nom

  • 8/18/2019 Cours Java Mit Sylla

    129/133

    Un package regroupe un ensemble de classes sous un même espace de nomLes noms des packages suivent le schéma : name.subname…

    Une classe Watch appartenant au package time.clock doit se trouverobligatoirement dans le fichier time/clock/Watch.class.

     

    Mr SYLLA. Ingenieur en informatique 12&

     contenant les classes à charger.

    L’instruction package indique à quel paquetage appartient la ou les classe (s)l’unité de compilation (le fichier).Les répertoires contenant les packages doivent être présents dans la variabled’environnement CLASSPATH.En dehors du package, les noms des classes sont: packageName.classNameL’instruction import packageName permet d’utiliser des classes sans lespréfixer par leur nom de package.Les API sont organisées en package ( java.lang, java.io, javax.swing,….)

    ?roits d=acc0s et paquetage

  • 8/18/2019 Cours Java Mit Sylla

    130/133

    En Java, il y a quatre types de droits d’accès aux méthodes et aux champs d’un objed’une classe. Autrement dit, la portée de la visibilité des méthodes et champsest assurée par les mots clés: private, protected, vide (droit de paquetage), et public.

      ’

    Mr SYLLA. Ingenieur en informatique 13'

      ,Nous séparons la visibilité des champs et celle des méthodes.

    Paquetage et visibilité des champs(encapsulation des membres)

  • 8/18/2019 Cours Java Mit Sylla

    131/133

    class c1{public int a;

    int b;protected int c;

    rivate int d

    class c4 extends c1{

    ….} a c

    Mr SYLLA. Ingenieur en informatique 131

     

    class c2 extends c1{

    ……}

    class c3 {

    ….}

    package A

    class c5 {

    …..}

    package B

    a b c a b c a

    Exemple d’accès aux membres

    sylla/classes/ graph/2D/ Circle java sylla/classes/ graph/3D/ Sphere java

  • 8/18/2019 Cours Java Mit Sylla

    132/133

    sylla/classes/ graph/2D/ Circle.javapackage graph.2D;

    public class Circle {…..}

    sylla/classes/ graph/3D/ Sphere.javapackage graph.3D;

    public class Sphere {…..}

    Mr SYLLA. Ingenieur en informatique 132

    sylla/classes/ TestPackage/ MainClass.java

    package testpackage;import graph.2D.*;public class MainClass {public static void main (String args [ ]){

    graph.2D.Circle c1= new graph.2D.Circle (50);

    Circle c2 = new Circle (80);graph.3D.Sphere s1 = new graph.3D.Sphere (100); //OKSphere s2 = new Sphere (50), // error: class testpackage.Sphere not

    found}

    import graph.3D.Sphere,  //nécessaire

    Paquetage et visibilité des méthodes

  • 8/18/2019 Cours Java Mit Sylla

    133/133

    class c1{public void f( );

    void g( );protected void h( );

    rivate void k

    class c4 extends c1{

    ….} f( ) h( )

    Mr SYLLA. Ingenieur en informatique 133

     

    package A

    class c2 extends c1{

    ……}

    f( ) g( ) h( )

    class c3 {

    ….}f( ) g( ) h( )

    package B

    class c5 {

    …..}

    f( )

    FIN DU CHAPITRE