Vous êtes sur la page 1sur 76

Programmation orient objet JAVA

Premire partie

JAVA Programmation oriente objet

Hafidi Imad
1

imad.hafidi@gmail.com

Historique de Java (1)


Java a t dvelopp partir de dcembre 1990 par une quipe de Sun Microsystems dirige par James Gosling Au dpart, il s agissait de dvelopper un langage de programmation pour permettre le dialogue entre de !uturs ustensiles domestiques "r, les langages e#istants tels que $%% ne sont pas la &auteur ' recompilation d(s qu)une nouvelle puce arrive, comple#it de programmation pour l)criture de logiciels !iables, gestion ramasse*miettes, t&reads +++

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Historique de Java (2)


1990 ' ,criture d)un nouveau langage plus adapt la ralisation de logiciels embarqus, appel "A.etit, !iable et indpendant de l)arc&itecture /estin la tlvision interactive

1990 ' le 1,2 3 dcolle 4, Sun redirige ce langage vers 5nternet ' les qualits de portabilit et de compacit du langage "A- en ont !ait un candidat par!ait une utilisation sur le rseau+ $ette radaptation prit pr(s de 6 ans+ 1997 ' Sun rebaptisa "A- en Java 8nom de la machine caf autour de laquelle se runissait
James Gosling et ses collaborateurs9

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Historique de Java (3)


:es dveloppeurs Java ont ralis un langage indpendant de toute arc&itecture de telle sorte que Java devienne idal pour programmer des applications utilisables dans des rseau# &trog(nes, notamment 5nternet+ :e dveloppement de Java devint alors un en;eu stratgique pour Sun et l)quipe crivit un navigateur appel <otJava capable d e#cuter des programmes Java+ :a version 6+0 du navigateur de =etscape a t dveloppe pour supporter Java, suivi de pr(s par Microso!t 85nternet ,#plorer 09 :)intr>t pour la tec&nologie Java s est accru rapidement' 52M, "racle et d)autres ont pris des licences Java+

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les diffrentes versions de Java


/e nombreuses versions de Java depuis 1997 Java 1+0 en 1997 Java 1+1 en 199? Java 1+6 en 1999 8Java 6, version 1+69 Java 1+0 en 6001 8Java 6, version 1+09 Java 1+@ en 6006 8Java 6, version 1+@9 Java 7+0 en 600@ Java ?+0 en 600? Aoir BiCipedia Dvolution tr(s rapide et succ(s du langage Ene certaine maturit atteinte avec Java 6 Mais des probl(mes de compatibilit e#istent entre les versions 1+1 et 1+6F1+0F1+@ avec certains navigateurs
Hafidi Imad-ENSA de Khouribga-Cours JAVA

Histoire r!ente
,n mai 600G, Sun publie l ensemble des outils Java dans un 3 pacCage 4 "penJ/- sous licence libre+ :a socit "racle a acquis en 6009 l)entreprise Sun Microsystems+ "n peut dsormais voir apparaHtre le logo "racle dans les documentations de l)api Java+ :e 16 avril 6010, James Gosling, le crateur du langage de programmation Java dmissionne d "racle pour des moti!s qu il ne sou&aite pas divulguer+ 5l tait devenu le directeur tec&nologique de la division logicielle client pour "racle+

"

Hafidi Imad-ENSA de Khouribga-Cours JAVA

#u $rob%&me au $rogramme
=cessit d analyser le probl(me pour pouvoir le traduire en une solution in!ormatique (cela semble vident, mais pourtant!) avant de construire un bItiment, on !ait un plan+ $e n est pas di!!rent en in!ormatique ' conception de l algorit&me, i+e+ une rponse 8rationnelle9 au probl(me pos puis mise en Juvre tec&nique * le codage * dans un langage de programmation, dans notre cas Java+

'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Ana%(se du $rob%&me (1)


Se poser les bonnes questions
Kuelles sont les ob;ets qui interviennent dans le probl(meL Kuelles sont les donnes, les ob;ets, que le programme va manipulerL Kuelles vont >tre les relations entre ces ob;etsL Kuelles sont les oprations que ;e vais pouvoir e!!ectuer sur ces ob;etsL

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Ana%(se du $rob%&me (2)


Savoir >tre ' e!!icace ' quelle mt&ode me permettra d obtenir le plus vite, le plus clairement, le plus simplement possible les rsultats attendus L paresseu# ' dans ce que ; ai dvelopp avant, que puis*;e rutiliser L prvoyant ' comment s assurer que le programme sera !acilement rutilisable et e#tensible L

Hafidi Imad-ENSA de Khouribga-Cours JAVA

+ara!tristiques du %angage Java

1,

Hafidi Imad-ENSA de Khouribga-Cours JAVA

+ara!tristiques du %angage Java (1)


Simple
Apprentissage !acile !aible nombre de mots*cls simpli!ications des !onctionnalits essentielles /veloppeurs oprationnels rapidement

Mamilier
Synta#e proc&e de celle de $F$%%
11 Hafidi Imad-ENSA de Khouribga-Cours JAVA

+ara!tristiques du %angage Java (2)


"rient ob;et
Java ne permet d)utiliser que des ob;ets (hors les types de base) Java est un langage objet de la !amille des langages de classe comme $%% ou SmallNalC :es grandes ides reprises sont ' encapsulation, dualit classe Finstance, attribut, mt&ode F message, visibilit, dualit inter!aceFimplmentation, &ritage simple, red!inition de mt&odes, polymorp&isme

SOr
Seul le bytecode est transmis, et 3vri!i4 par l interprteur 5mpossibilit d accder des !onctions globales ou des ressources arbitraires du syst(me
12 Hafidi Imad-ENSA de Khouribga-Cours JAVA

+ara!tristiques du %angage Java (3)


Miable
Gestion automatique de la mmoire
(ramasse miette ou !garbage collector!)

Gestion des e#ceptions Sources d)erreurs limites typage !ort, pas d)&ritage multiple, pas de manipulations de pointeurs, etc+ Ari!ications !aites par le compilateur !acilitant une plus grande rigueur du code
13 Hafidi Imad-ENSA de Khouribga-Cours JAVA

+ara!tristiques du %angage Java (4)


Java est indpendant de l)arc&itecture
:e bytecode gnr par le compilateur est indpendant de toute arc&itecture+ Noute application peut donc tourner sur une plate*!orme implmentant une mac&ine virtuelle Java " #crire une fois, e$cuter partout %

Java est multi*tIc&es


,#cution de plusieurs processus e!!ectuant c&acun une tIc&e di!!rente Mcanismes de sync&ronisation Monctionnement sur des mac&ines multiprocesseurs
14 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Java- un %angage de $rogrammation


Applications Java ' programmes autonomes, Pstand*aloneP Applets 8mini*programmes9 ' .rogrammes e#cutables uniquement par l)intermdiaire d)une autre application
navigateur Beb ' =etscape, 5nternet e#plorer, <ot;ava application spci!ique ' AppletvieBer

Java est souvent considr comme tant uniquement un langage pour crire des applets alors que c)est aussi un vrai langage de programmation Java est souvent con!ondu avec le langage de script Javascript auquel il n)est en aucune mani(re apparent
1 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Java- un %angage ind$endant. (1)


Java est un langage interprt
:a compilation d)un programme Java cre du pseudo*code portable ' le Pbyte*codeP Sur n)importe quelle plate*!orme, une mac&ine virtuelle Java peut interprter le pseudo*code a!in qu)il soit e#cut

:es mac&ines virtuelles Java peuvent >tre


des interprteurs de byte*code indpendants 8pour e#cuter les programmes Java9 contenues au sein d)un navigateur 8pour e#cuter des applets Java9

1"

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Java- un %angage ind$endant. (2)


Avantages ' Portabilit
/es mac&ines virtuelles Java e#istent pour de nombreuses plates*!ormes dont ' Solaris, 1indoBs, Mac"S

Dveloppement plus rapide


courte tape de compilation pour obtenir le byte*code, pas d)dition de liens, dboguagge plus ais,

Le byte-code est plus compact que les excutables


pour voyager sur les rseau#+

1'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Java- un %angage ind$endant. (3)


5nconvnients '
=cessite l installation d un interprteur pour pouvoir e#cuter un programme Java :)interprtation du code ralentit l)e#cution :es applications ne bn!icient que du dnominateur commun des di!!rentes plate*!ormes limitation, par e#emple, des inter!aces grap&iques Gestion gourmande de la mmoire 5mpossibilit d oprations de 3 bas niveau 4 lies au matriel

1)

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Langage !om$i%
Etapes qui ont lieu avant l'excution pour un langage compil comme C++
Fichier de code Librairies

Compilation

Code objet

Edition de liens

Programme excutable

Autres code objet Fichier d'entte

1*

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Langage inter$rt
Cas de Java Avant excution Excution

Autres byte code

Fichier de code Java MaClasse.java

Compilation javac

Byte code MaClasse.class

Machine virtuelle Java (JVM) java

2,

Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java
Java !ournit de nombreuses librairies de classes remplissant des !onctionnalits tr(s diverses ' c)est l)A.5 Java
A.5 8Application and .rogramming 5nter!ace F5nter!ace pour la programmation d)applications9 ' ,nsemble de bibliot&(ques permettant une programmation plus aise car les !onctions deviennent indpendantes du matriel+

$es classes sont regroupes, par catgories, en paquetages 8ou PpacCagesP9+

21

Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java (2)


:es principau# paquetages ;ava+util ' structures de donnes classiques ;ava+io ' entres F sorties ;ava+lang ' c&aHnes de caract(res, interaction avec l)"S, t&reads ;ava+applet ' les applets sur le Beb ;ava+aBt ' inter!aces grap&iques, images et dessins ;ava#+sBing ' pacCage rcent proposant des composants 3 lgers 4 pour la cration d inter!aces grap&iques ;ava+net ' socCets, EQ: ;ava+rmi ' Qemote Met&od 5nvocation 8pas abord dans ce cours9 ;ava+sql ' !ournit le pacCage J/2$

22

Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java (3)


:a documentation de Java est standard, que ce soit pour les classes de l)A.5 ou pour les classes utilisateur
possibilit de gnration automatique avec l outil Javadoc+

,lle est au !ormat <NM:+


intr>t de l)&yperte#te pour naviguer dans la documentation
23 Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java (4)


.our c&aque classe, il y a une page <NM: contenant '
la &irarc&ie d)&ritage de la classe, une description de la classe et son but gnral, la liste des attributs de la classe 8locau# et &rits9, la liste des constructeurs de la classe 8locau# et &rits9, la liste des mt&odes de la classe 8locau# et &rits9, puis, c&acune de ces trois derni(res listes, avec la description dtaille de c&aque lment+

24

Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java ( )
"R trouver les in!ormations sur les classes de l A.5
sous le rpertoire ;dC1+#FdocsFapi dans le J/les documentations de l A.5 se tlc&argent et s installent 8en gnral9 dans le rpertoire dans lequel on installe ;ava+ .ar e#emple si vous aveS installer Java dans le rpertoire /'FAppsF;dC1+GF, vous dcompresser le !ic&ier Sip contenant les documentations dans ce rpertoire+ :es docs de l A.5 se trouveront alors sous ' /'FAppsF;dC1+GFdocsFapiFinde#+&tml Sur le site de Sun, on peut la retrouver &ttp'FFdocs+oracle+comF;avaseFGFdocsFapiF

Hafidi Imad-ENSA de Khouribga-Cours JAVA

L/AP0 de Java (")

2"

Hafidi Imad-ENSA de Khouribga-Cours JAVA

1uti% de dve%o$$ement 2 %e J#3


,nvironnement de dveloppement !ourni par Sun J/- signi!ie Java /evelopment -it 8-it de dveloppement Java9+ 5l contient '
les classes de base de l)A.5 ;ava 8plusieurs centaines9, la documentation au !ormat <NM: le compilateur ' ;avac la JAM 8mac&ine virtuelle9 ' ;ava le visualiseur d)applets ' appletvieBer le gnrateur de documentation ' ;avadoc etc+
2' Hafidi Imad-ENSA de Khouribga-Cours JAVA

4(nta5e du %angage Java

2)

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les !ommentaires
FT commentaire sur une ou plusieurs lignes TF
Identiques ceux existant dans le langage !

FF commentaire de !in de ligne


Identiques ceux existant en !""

FTT commentaire d)e#plication TF


Les commentaires d#explication se placent gnralement juste avant une dclaration $d#attribut ou de mt%ode& Ils sont rcuprs par l#utilitaire javadoc et inclus dans la documentation ainsi gnre'
Hafidi Imad-ENSA de Khouribga-Cours JAVA

2*

0nstru!tions- b%o!s et b%an!s


:es instructions Java se terminent par un ; :es blocs sont dlimits par '

{ pour le dbut de bloc } pour la !in du bloc


En bloc permet de d!inir un regroupement d instructions+ :a d!inition d une classe ou d une mt&ode se !ait dans un bloc+

:es espaces, tabulations, sauts de ligne sont autoriss+ $ela permet de prsenter un code plus lisible+

3,

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Point d/entre d/un $rogramme Java


.our pouvoir !aire un programme e#cutable il !aut tou;ours une classe qui contienne une mt&ode particuli(re, la mt&ode 3 main 4
c est le point d entre dans le programme ' le microprocesseur sait qu il va commencer e#cuter les instructions partir de cet endroit
public static void main(String arg[ ]) { / }

31

Hafidi Imad-ENSA de Khouribga-Cours JAVA

65em$%e (1)
Fichier Bonjour.java

public class Bonjour { //Accolade dbutant la classe Bonjour public static void main(String args[]) { //Accolade dbutant la mthode main /* Pour linstant juste une instruction */ System.out.println(bonjour); } //Accolade fermant la mthode main } //Accolade fermant la classe Bonjour

La classe est lunit de base de nos programmes. Le mot cl en Java pour dfinir une classe est class

32

Hafidi Imad-ENSA de Khouribga-Cours JAVA

65em$%e (2)
Fichier Bonjour.java

public class Bonjour { public static void main(String args[]) { System.out.println(bonjour); } }

Accolades dlimitant le dbut et la fin de la dfinition de la class Bonjour

Accolades dlimitant le dbut et la fin de la mthode main

Les instructions se terminent par des ;

33

Hafidi Imad-ENSA de Khouribga-Cours JAVA

65em$%e (3)
Fichier Bonjour.java

public class Bonjour { public static void main(String args[]) { System.out.println(bonjour); } }

Une mthode peut recevoir des paramtres. Ici la mthode main reoit le paramtre args qui est un tableau de chane de caractres.

34

Hafidi Imad-ENSA de Khouribga-Cours JAVA

+om$i%ation et e5!ution (1)


Fichier Bonjour.java Compilation en bytecode java dans une console DOS: javac Bonjour.java Gnre un fichier Bonjour.class Excution du programme (toujours depuis la console DOS) sur la JVM : java Bonjour Affichage de bonjour dans la console Le nom du fichier est ncessairement celui de la classe avec lextension .java en plus. Java est sensible la casse des lettres.

public class Bonjour { public static void main(String[] args) { System.out.println(bonjour); } }

Hafidi Imad-ENSA de Khouribga-Cours JAVA

+om$i%ation et e5!ution (3)


.our rsumer, dans une console /"S, si ; ai un !ic&ier 2on;our+;ava pour la classe 2on;our '
;avac 2on;our+;ava
$ompilation en bytecode ;ava 5ndication des erreurs de synta#e ventuelles Gnration d un !ic&ier 2on;our+class si pas d erreurs

;ava 2on;our
Java est la mac&ine virtuelle ,#cution du bytecode =cessit de la mt&ode main, qui est le point d entre dans le programme

3"

Hafidi Imad-ENSA de Khouribga-Cours JAVA

0dentifi!ateurs (1)
"n a besoin de nommer les classes, les variables, les constantes, etc+ U on parle d identi!icateur+ :es identi!icateurs commencent par une lettre, _ ou $ Attention : Java distingue les majuscules des minuscules $onventions sur les identi!icateurs ' Si plusieurs mots sont accols, mettre une ma;uscule c&acun des mots sau! le premier+
e#emple ' uneAariable,ntiere

:a premi(re lettre est ma;uscule pour les classes et les inter!aces


e#emples ' MaClasse, UneJolieFenetre

3'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

0dentifi!ateurs (2)
$onventions sur les identi!icateurs '
:a premi(re lettre est minuscule pour les mt&odes, les attributs et les variables e#emples ' setLongueur, i, uneFenetre :es constantes sont enti(rement en ma;uscules e#emple ' LONGUEUR_MAX

3)

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les mots rservs de Java


abstract boolean break byte case catch char class continue const default do double else extends false final finally float for goto if implements import instanceof int interface long native new

null package private protected public return short static super switch

synchronized this throw throws transient true try void volatile while

3*

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (1)


,n Java, tout est ob;et sau! les types de base+ 5l y a &uit types de base '
un type boolen pour reprsenter les variables ne pouvant prendre que 2 valeurs (vrai et faux, 0 ou 1, etc.) : boolean avec les valeurs associes true et false un type pour reprsenter les caractres : char quatre types pour reprsenter les entiers de divers taille : byte, short, int et long deux types pour reprsenter les relles : float et double

:a taille ncessaire au stocCage de ces types est indpendante de la mac&ine+ Avantage ' portabilit 5nconvnient ' PconversionsP coOteuses
4, Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (2) 2 %es entiers


:es entiers 8avec signe9
byte ' cod sur V bits, peuvent reprsenter des entiers allant de *6G 6G W1 8*16V %16G9 s%ort ' cod sur 1? bits, peuvent reprsenter des entiers allant de *617 617 W1 int ' cod sur 06 bits, peuvent reprsenter des entiers allant de *601 601 W1 long ' cod sur ?@ bits, peuvent reprsenter des entiers allant de *6?0 6?0 W1

41

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (3) 2 %es entiers


=otation
6 entier normal en base dcimal 6: entier au !ormat long en base dcimal (10 entier en valeur octale 8base V9 (xM entier en valeur &e#adcimale 8base 1?9

"prations sur les entiers


oprateurs arit&mtiques %, *, T F 'division enti(re si les 6 arguments sont des entiers X ' reste de la division enti(re e#emples '
17 F @ donne 0 17 X 6 donne 1
42 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (4) 2 %es entiers


"prations sur les entiers 8suite9 les oprateurs d incrmentation "" et de dcrmentation et -a;oute ou retranc&e 1 une variable int n Y 16U int m=7; int n=7; n %%U FFMaintenant n vaut 10 int a=2 * ++m; //a vaut 16, m vaut 8 n%%U 3 quivalent 4 n Y n%1U int b=2 * n++; //b vaut 14, n vaut 8 n**U 3 quivalent 4 n Y n*1U V%%U est une instruction illgale peut s utiliser de mani(re su!!i#e ' %%n+ :a di!!rence avec la version pr!i#e se voit quand on les utilisent dans les e#pressions+ ,n version su!!i#e la 8dFinc9rmentation s e!!ectue en premier

43

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases ( ) 2 %es re%s


:es rels
!loat ' cod sur 06 bits, peuvent reprsenter des nombres allant de *1007 % 1007 double ' cod sur ?@ bits, peuvent reprsenter des nombres allant de *10@00 %10@00

=otation
@+77 ou @+77D rel double prcision @+77) rel simple prcision

44

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (") 2 %es re%s


:es oprateurs
oprateurs classiques %, *, T, F attention pour la division '
17 F @ donne 0 division entire 17 X 6 donne 1 11+0 F @ donne 6+G7 8si l un des termes de la division est un rel, la division retournera un rel9+

puissance ' utilisation de la mt&ode poB de la classe Mat&+


double y Y Mat&+poB8#, a9 quivalent #Za, # et a tant de type double
4 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (') 2 %es boo%ens


:es boolens
boolean contient soit vrai 8true9 soit !au# 8)alse9

:es oprateurs logiques de comparaisons


,galit ' oprateur == /i!!rence ' oprateur != suprieur et in!rieur strictement ' oprateurs > et < suprieur et in!rieur ou gal ' oprateurs >= et <=
4" Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases ()) 2 %es boo%ens


=otation boolean x; x= true; x= false; x= (5==5); // l e#pression 87YY79 est value et la valeur est a!!ecte # qui vaut alors vrai x= (5!=4); // x vaut vrai, ici on obtient vrai si 5 est diffrent de 4 x= (5>5); // x vaut faux, 5 n'est pas suprieur strictement 5 x= (5<=5); // x vaut vrai, 5 est bien infrieur ou gal 5

4'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (*) 2 %es boo%ens


:es autres oprateurs logiques
et logique ' && ou logique ' || non logique ' ! ,#emples ' si a et b sont 6 variables boolennes boolean a,b, c; a= true; b= false; c= (a && b); // c vaut !alse c= (a || b); // c vaut true c= !(a && b); // c vaut true c=!a; // c vaut !alse
4) Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (1,) 2 %es !ara!t&res


:es caract(res
c%ar ' contient une seule lettre le type c&ar dsigne des caract(res en reprsentation Enicode $odage sur 6 octets contrairement AS$55FA=S5 cod sur 1 octet+ :e codage AS$55FA=S5 est un sous*ensemble d Enicode =otation &e#adcimale des caract(res Enicode de [ \u0000 [ \uMMMM + .lus d in!ormation sur Enicode ' BBB+unicode+org

4*

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (11) 2 %es !ara!t&res

=otation
char a,b,c; // a,b et c sont des variables du type c&ar a='a'; // a contient la lettre )a) b= '\u0022' //b contient le caractre guillemet : " c=97; // # contient le caract(re de rang 9G ' 'a'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les t($es de bases (12) e5em$%e et remarque


int x = 0, y = 0; float z = 3.1415F; double w = 3.1415; long t = 99L; boolean test = true; char c = 'a';

Qemarque importante '


Java e#ige que toutes les variables soient d!inies et initialises+ :e compilateur sait dterminer si une variable est susceptible d)>tre utilise avant initialisation et produit une erreur de compilation+
1 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (1)


:es structures de contr]le classiques e#istent en Java '
i)* else s+itc%* case* de)ault* brea, )or +%ile do* +%ile

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (2) 2 if 8 e%se


5nstructions conditionnelles
,!!ectuer une ou plusieurs instructions seulement si une certaine condition est vraie i) $condition& instructionU et plus gnralement ' i) $condition& ^ bloc d&instructions_ condition doit 'tre un boolen ou renvoyer une valeur boolenne ,!!ectuer une ou plusieurs instructions si une certaine condition est vri!ie sinon e!!ectuer d autres instructions i) $condition& instruction() else instruction*U et plus gnralement i) $condition& ^ (er bloc d&instructions_ else ^*+me bloc d&instruction_

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (3) 2 if 8 e%se


Max.java public class Max { public static void main(String args[]) { int nb1, nb2; nb1 = Keyboard.readInt("Entrer un entier:"); nb2 = Keyboard.readInt("Entrer un entier:"); if (nb1 > nb2) System.out.println("lentier le plus grand est "+ nb1); else System.out.println("lentier le plus grand est "+ nb2); } }

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (4) 2 9:i%e


2oucles indtermines
"n veut rpter une ou plusieurs instructions un nombre indtermins de !ois ' on rp(te l instruction ou le bloc d instruction tant que une certaine condition reste vraie nous avons en Java une premi(re boucle B&ile 8tant que9 +%ile 8condition9 -bloc d&instructions. les instructions dans le bloc sont rptes tant que la condition reste vraie+ "n ne rentre ;amais dans la boucle si la condition est !ausse d(s le dpart

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es ( ) 2 9:i%e


2oucles indtermines
un autre type de boucle avec le B&ile' do ^bloc d&instructions_ +%ile 8condition9 les instructions dans le bloc sont rptes tant que la condition reste vraie+ "n rentre tou;ours au moins une !ois dans la boucle ' la condition est teste en !in de boucle+

"

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (") 2 9:i%e


Facto1.java public class Facto1 { public static void main(String args[]) { int n, result,i; n = Keyboard.readInt("Entrer une valeur pour n"); result = 1; i = n; while (i > 1) { result = result * i; i--; } System.out.println( "la factorielle de " + n + " vaut " + result); } }
' Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (') 2 for


2oucles dtermines
"n veut rpter une ou plusieurs instructions un nombre dtermins de !ois ' on rp(te l instruction ou le bloc d instructions pour un certain nombre de pas+ :a boucle !or !or 8int i Y 1U i `Y 10U i%%9 System+out+println8i9U FFa!!ic&age des nombres de 1 10 une boucle !or est en !ait quivalente une boucle B&ile )or 8instruction(/ e$pression(/ e$pression*9 ^bloc_ a est quivalent a instruction (U +%ile 8e$pression(9 ^bloc/ e$pression*__

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es ()) 2 for


Facto2.java public class Facto2 { public static void main(String args[]) { int n, result,i; n = Keyboard.readInt("Entrer une valeur pour n"); result = 1; for(i =n; i > 1; i--) { result = result * i; } System.out.println( "la factorielle de " + n + " vaut " + result); } }

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (*) 2 s9it!:


Slection multiples
l utilisation de i! F else peut s avrer lourde quand on doit traiter plusieurs slections et de multiples alternatives pour cela e#iste en Java le s+itc% F case asseS identique celui de $F$%% :a valeur sur laquelle on teste doit >tre un c&ar ou un entier 8 l e#clusion d un long9+ : e#cution des instructions correspondant une alternative commence au niveau du case correspondant et se termine la rencontre d une instruction brea, ou arrive la !in du s+itc%
", Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les stru!tures de !ontr7%es (1,) 2 s9it!:


Alternative.java public class Alternative { public static void main(String args[]) { int nb = Keyboard.readInt("Entrer un entier:"); switch(nb) { case 1: System.out.println("Un"); break; case 2: System.out.println("Deux"); break; default: System.out.println("Autre nombre"); break; } } }
"1 Hafidi Imad-ENSA de Khouribga-Cours JAVA

Variable contenant la valeur que lon veut tester.

Premire alternative : on affiche Un et on sort du bloc du switch au break; Deuxime alternative : on affiche Deux et on sort du bloc du switch au break; Alternative par dfaut: on ralise une action par dfaut.

Les tab%eau5 (1)


:es tableau# permettent de stocCer plusieurs valeurs de m>me type dans une variable+
:es valeurs contenues dans la variable sont repres par un indice ,n langage ;ava, les tableau# sont des ob;ets

/claration
int tab [ ]; String chaines[ ];

$ration d)un tableau


tab = new int [20]; // tableau de 20 int chaines = new String [100]; // tableau de 100 chaine

"2

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 (2)


:e nombre d)lments du tableau est mmoris+ Java peut ainsi dtecter l)e#cution le dpassement d)indice et gnrer une e#ception+ Mot cl lengt&
5l est rcuprable par nomTableau.length
int taille Y tab+lengt&U FFtaille vaut 60

$omme en $F$%%, les indices d un tableau commencent [ 0 + /onc un tableau de taille 100 aura ses indices qui iront de 0 99+

"3

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 (3)


5nitialisation
tab[0]=1; tab[1]=2; //etc. noms[0] = new String( "Boule"); noms[1] = new String( "Bill");//etc

$ration et initialisation simultanes


String noms [ ] = {"Boule","Bill"}; Point pts[ ] = { new Point (0, 0), new Point (10, -1)};

"4

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 (4)


Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } }

Pour dclarer une variable tableau on indique le type des lments du tableau et le nom de la variable tableau suivi de [ ] on utilise new <type> [taille]; pour initialiser le tableau On peut ensuite affecter des valeurs au diffrentes cases du tableau : <nom_tableau>[indice]

Les indices vont toujours de 0 (taille-1)


" Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 ( )
Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x0000 0x258 0 0 0 0

""

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 (")


Tab1.java public class Tab1 { public static void main (String args[]) { int tab[ ] ; tab = new int[4]; tab[0]=5; tab[1]=3; tab[2]=7; tab[3]=tab[0]+tab[1]; } } Mmoire

0x258

5 0 0 3 0 7 0 8

"'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

Les tab%eau5 (')


Tab2.java public class Tab2 { public static void main (String args[]) { String tab[ ] ; tab = new String[4]; tab[0]=new String("Pif"); tab[1]=new String("Paf"); tab[2]=new String( toto"); tab[3]=new String( ENSAK"); } } Mmoire 0x0258 0x0106 0x0116 0x0126 0x0136

"Pif" "Paf" toto" ENSAK."

")

Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse 4tring (1)


Attention ce n est pas un type de base+ 5l s)agit d)une classe d!ini dans l A.5 Java 8/ans le pacCage ;ava+lang9 String s="aaa"; // s contient la chane "aaa" mais String s=new String("aaa"); // identique la ligne prcdente :a concatnation
l oprateur " entre 6 String les concat(ne ' String str1 = "Bonjour ! "; String str2 = null; str2 = "Comment vas-tu ?"; String str3 = str1 + str2; / * Concatnation de chanes : str3 contient " Bonjour ! Comment vas-tu ?"
"* Hafidi Imad-ENSA de Khouribga-Cours JAVA

#iffren!es entre objets et t($es de base


Mmoire int x=3,y=3; x == y est vrai 3 3 0x768 0x852 String s1="abc",s2="abc"; s1 == s2 est faux... Quand on compare 2 variables dun type de base on compare leur valeur. Quand on compare 2 objet avec les oprateurs on compare leur rfrence (leur adresse en mmoire). Introduction de la mthode equals() pour les objets : s1.equals(s2) est vrai
', Hafidi Imad-ENSA de Khouribga-Cours JAVA

Abc ....

Abc ....

La !%asse 4tring (2)


:ongueur d un ob;et String '
mt&ode int lengt&89 ' renvoie la longueur de la c&aHne String str1 Y Pbon;ourPU int n Y str1+lengt&89U FF n vaut G

Sous*c&aHnes
mt&ode String substring8int debut, int !in9 e#traction de la sous*c&aine depuis la position debut ;usqu la position !in non*comprise+ String str6 Y str1+substring80,09U FF str6 contient la valeur PbonP le premier caract(re d une c&aHne occupe la position 0 le deu#i(me param(tre de substring indique la position du premier caract(re que l on ne sou&aite pas copier
'1 Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse 4tring (3)


Qcupration d un caract(re dans une c&aHne
mt&ode c&ar c&arAt8int pos9 ' renvoie le caract(re situ la position pos dans la c&aHne de caract(re laquelle on envoie se message String str1 Y Pbon;ourPU c&ar unJ Y str1+c&arAt809U FF unJ contient le caract(re );)

Modi!ication des ob;ets String


:es String sont inaltrables en Java ' on ne peut modi!ier individuellement les caract(res d une c&aHne+ .ar contre il est possible de modi!ier le contenu de la variable contenant la c&aHne 8la variable ne r!rence plus la m>me c&aHne9+ str1 Y str1+substring80,09 % P soirPU FT str1 contient maintenant la c&aHne PbonsoirP TF

'2

Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse 4tring (4)


:es c&aHnes de caract(res sont des ob;ets '
pour tester si 6 c&aHnes sont gales il !aut utiliser la mt&ode boolean equals8String str9 et non 00 pour tester si 6 c&aHnes sont gales la casse pr(s il !aut utiliser la mt&ode boolean equals5gnore$ase8String str9 String str1 Y P2onJourPU String str6 Y Pbon;ourPU String str0 Y Pbon;ourPU boolean a, b, c, dU a Y str1+equals8P2onJourP9U FFa contient la valeur true b Y 8str6 Y Y str09U FFb contient la valeur !alse c Y str1+equals5gnore$ase8str69UFFc contient la valeur true d Y Pbon;ourP+equals8str69U FFd contient la valeur true

'3

Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse 4tring ( )
Kuelques autres mt&odes utiles
boolean starts1it&8String str9 ' pour tester si une c&aine de caract(re commence par la c&aine de caract(re str boolean ends1it&8String str9 ' pour tester si une c&aHne de caract(re se termine par la c&aine de caract(re str
String str1 Y Pbon;our PU boolean a Y str1+starts1it&8PbonP9UFFa vaut true boolean b Y str1+ends1it&8P;ourP9UFFb vaut true

'4

Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse 4tring (")


Plus dinformations dans les documentations de lAPI dans le package java.lang

'

Hafidi Imad-ENSA de Khouribga-Cours JAVA

La !%asse ;at:
:es !onctions mat&matiques les plus connues sont regroupes dans la classe Mat& qui appartient au pacCage ;ava+lang les !onctions trigonomtriques les !onctions d arrondi, de valeur absolue, +++ la racine carre, la puissance, l e#ponentiel, le logarit&me, etc+ $e sont des mt&odes de classe 8static9 double calcul Y 1at%'sqrt 81at%'po+87,69 % 1at%'po+8G,699U double sqrt8double #9 ' racine carre de # double po+8double #, double y9 ' # puissance y

'"

Hafidi Imad-ENSA de Khouribga-Cours JAVA