Vous êtes sur la page 1sur 83

Programmation oriente objet

Licence dInformatique
Programmation oriente Objet
Franois
BonnevilleJava
- LIFC - Universit de Franche-Comt
Langage
Me contacter : francois.bonneville@aricia.fr

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 sagissait de dvelopper un langage
de programmation pour permettre le dialogue entre
de futurs ustensiles domestiques
Or, les langages existants tels que C++ ne sont pas la hauteur :
recompilation ds qu'une nouvelle puce arrive, complexit de
programmation pour l'criture de logiciels fiables...

FranoisBonneville

Historique de Java (2)

1990 : Ecriture d'un nouveau langage plus adapt la ralisation


de logiciels embarqus, appel OAK

Petit, fiable et indpendant de l'architecture

Destin la tlvision interactive

Non rentable sous sa forme initiale

1993 : le WEB dcolle , Sun redirige ce langage vers Internet :


les qualits de portabilit et de compacit du langage OAK en ont
fait un candidat parfait une utilisation sur le rseau. Cette
radaptation prit prs de 2 ans.

1995 : Sun rebaptisa OAK en Java (nom de la machine caf autour de


laquelle se runissait James Gosling et ses collaborateurs)

FranoisBonneville

Historique de Java (3)

Les dveloppeurs Java ont ralis un langage indpendant


de toute architecture de telle sorte que Java devienne idal
pour programmer des applications utilisables dans des rseaux
htrognes, notamment Internet.
Le dveloppement de Java devint alors un enjeu stratgique
pour Sun et l'quipe crivit un navigateur appel HotJava
capable dexcuter des programmes Java.

La version 2.0 du navigateur de Netscape a t dveloppe


pour supporter Java, suivi de prs par Microsoft (Internet
Explorer 3)

L'intrt pour la technologie Java sest accru rapidement:


IBM, Oracle et d'autres ont pris des licences Java.
FranoisBonneville

Les diffrentes versions de Java

De nombreuses versions de Java depuis 1995

Java 1.0 en 1995


Java 1.1 en 1996
Java 1.2 en 1999 (Java 2, version 1.2)
Java 1.3 en 2001 (Java 2, version 1.3)
Java 1.4 en 2002 (Java 2, version 1.4)
Java 5 en 2004
Java 6 en 2006 celle que nous utiliserons dans ce cours
Java 7 en 2011

volution trs rapide et succs du langage


Une certaine maturit atteinte avec Java 2
Mais des problmes de compatibilit existaient

entre les versions 1.1 et 1.2/1.3/1.4


avec certains navigateurs

FranoisBonneville

Histoire rcente

En mai 2007, Sun publie lensemble des outils Java


dans un package OpenJDK sous licence libre.
La socit Oracle a acquis en 2009 l'entreprise Sun
Microsystems. On peut dsormais voir apparatre le
logo Oracle dans les documentations de l'api Java.
Le 12 avril 2010, James Gosling, le crateur du langage
de programmation Java dmissionne dOracle pour des
motifs quil ne souhaite pas divulguer. Il tait devenu le
directeur technologique de la division logicielle client
pour Oracle.
Aot 2012: faille de scurit importante dans Java 7
FranoisBonneville

Que penser de Java? (1)

Les plus :

Il a su bnficier de lessor dInternet


Il a su simposer dans de nombreux domaines
Un environnement gratuit et de nombreux
outils disponibles
Une large communaut trs active

FranoisBonneville

Que penser de Java? (2)

Les moins :

Trop mdiatis?
Problmes de compatibilit
Avec les premires versions
Avec certains navigateurs (les navigateurs ne
sont pas crits par Sun)
Problmes de vitesse, mais existence de
solutions pour y pallier (compilateur natif,
compilation du bytecode la vole)
FranoisBonneville

Que penser de Java? (3)


Un bon langage
Un langage adapt aux besoins de
dveloppements actuels
qui a su se baser sur les acquis du pass.
Au del de leffet de mode, un succs mrit
qui ne devrait pas se dmentir dans le futur

FranoisBonneville

Organisation du cours (1)

Nous verrons

Caractristiques de Java et son environnement de dveloppement


Structures fondamentales
La programmation par objets en Java
Hritage
Polymorphisme
Les exceptions, les entres / sorties en Java
Les collections en Java
Les paquetages

Nous essaierons daborder les thmes suivants si nous en avons le


temps :

La programmation des interfaces graphiques en Java (AWT et Swing), les


applets
Les threads (appels aussi processus lgers)
La programmation rseau
Laccs aux bases de donnes

FranoisBonneville

10

Rfrences (1)

Bibliographie

Au cur de Java 2 : Volume I - Notions fondamentales.


C. Hortsmann et G. Cornell. The Sun Microsystems Press.
Java Series. CampusPress.
Au cur de Java 2 : Volume II - Fonctions avances.
C. Hortsmann et G. Cornell. The Sun Microsystems Press.
Java Series. CampusPress.
Passeport pour lalgorithmique objet. Jean-Pierre Fournier.
Thomsom Publishing International.

FranoisBonneville

11

Rfrences (2)

Webographie

Pour rcuprer le kit de dveloppement de Sun


http://java.sun.com/ (racine du site)
Outils de dveloppement
Eclipse : http://www.eclipse.org
JBuilder 5 : http://www.borland.fr/download/jb5pers/
Des exemples de programmes comments
http://www.technobuff.com/javatips/ (en anglais)
http://developer.java.sun.com/developer/JDCTechTips/ (en
anglais)

FranoisBonneville

12

Du problme au programme

Ncessit danalyser le problme pour pouvoir


le traduire en une solution informatique
(cela semble vident, mais pourtant!)

avant de construire un btiment, on fait un plan. Ce


nest pas diffrent en informatique : conception de
lalgorithme, i.e. une rponse (rationnelle) au
problme pos
puis mise en uvre technique - le codage - dans un
langage de programmation, dans notre cas Java.

FranoisBonneville

13

Analyse du problme (1)


Se

poser les bonnes questions

Quelles sont les objets qui interviennent


dans le problme? Quelles sont les
donnes, les objets, que le programme va
manipuler?
Quelles vont tre les relations entre ces
objets? Quelles sont les oprations que je
vais pouvoir effectuer sur ces objets?
FranoisBonneville

14

Analyse du problme (2)


Savoir

tre :

efficace : quelle mthode me permettra


dobtenir le plus vite, le plus clairement, le
plus simplement possible les rsultats
attendus ?
paresseux : dans ce que jai dvelopp
avant, que puis-je rutiliser ?
prvoyant : comment sassurer que le
programme sera facilement rutilisable et
extensible ?
FranoisBonneville

15

Caractristiques du langage Java

Caractristiques du langage Java (1)

Simple

Apprentissage facile
faible nombre de mots-cls
simplifications des fonctionnalits essentielles
Dveloppeurs oprationnels rapidement

Familier

Syntaxe proche de celle de C/C++


FranoisBonneville

17

Caractristiques du langage Java (2)

Orient objet

Java ne permet d'utiliser que des objets (hors les types de base)
Java est un langage objet de la famille des langages de classe
comme C++ ou SmallTalk
Les grandes ides reprises sont : encapsulation, dualit classe
/instance, attribut, mthode / message, visibilit, dualit
interface/implmentation, hritage simple, redfinition de
mthodes, polymorphisme

Sr

Seul le bytecode est transmis, et vrifi par linterprteur


Impossibilit daccder des fonctions globales ou des
ressources arbitraires du systme
FranoisBonneville

18

Caractristiques du langage Java (3)

Fiable

Gestion automatique de la mmoire


(ramasse-miette ou "garbage collector")

Gestion des exceptions


Sources d'erreurs limites
typage fort,
pas d'hritage multiple,
pas de manipulations de pointeurs, etc.
Vrifications faites par le compilateur facilitant
une plus grande rigueur du code
FranoisBonneville

19

Caractristiques du langage Java (4)


Java est indpendant de l'architecture

Le bytecode gnr par le compilateur est indpendant


de toute architecture. Toute application peut donc
tourner sur une plate-forme implmentant une
machine virtuelle Java
Ecrire une fois, excuter partout

Java est multi-tches

Excution de plusieurs processus effectuant chacun une


tche diffrente

Mcanismes de synchronisation
Fonctionnement sur des machines multiprocesseurs

FranoisBonneville

20

Java, un langage de programmation

Applications Java : programmes autonomes, "standalone"


Applets (mini-programmes) : Programmes excutables
uniquement par l'intermdiaire d'une autre application

navigateur web : Netscape, Internet explorer, Hotjava


application spcifique : Appletviewer

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 confondu avec le langage de script
Javascript auquel il n'est en aucune manire apparent
FranoisBonneville

21

Java, un langage indpendant? (1)

Java est un langage interprt

La compilation d'un programme Java cre du


pseudo-code portable : le "byte-code"
Sur n'importe quelle plate-forme, une machine
virtuelle Java peut interprter le pseudo-code
afin qu'il soit excut

Les machines virtuelles Java peuvent tre

des interprteurs de byte-code indpendants


(pour excuter les programmes Java)
contenues au sein d'un navigateur
(pour excuter des applets Java)
FranoisBonneville

22

Java, un langage indpendant? (2)

Avantages :

Portabilit
Des machines virtuelles Java existent pour de
nombreuses plates-formes dont : Linux, Windows,
MacOS
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 rseaux.
FranoisBonneville

23

Java, un langage indpendant? (3)

Inconvnients :

Ncessite linstallation dun interprteur pour pouvoir


excuter un programme Java

L'interprtation du code ralentit l'excution


Les applications ne bnficient que du dnominateur
commun des diffrentes plate-formes
limitation, par exemple, des interfaces graphiques
Gestion gourmande de la mmoire
Impossibilit doprations de bas niveau lies au
matriel

FranoisBonneville

24

Langage compil
Etapes qui ont lieu avant l'excution pour un langage compil
comme C++
Fichier
de
code

Compilation

Librairies

Code objet

Edition de liens

Programme
excutable

Autres code objet


Fichier
d'entte

FranoisBonneville

25

Langage interprt
Cas de Java

Avant excution

Excution

Autres byte code

Fichier
de code
Java
MaClasse.java

Compilation

Byte code

javac

MaClasse.class

FranoisBonneville

Machine virtuelle
Java (JVM)
java

26

LAPI de Java

Java fournit de nombreuses librairies de classes


remplissant des fonctionnalits trs diverses :
c'est l'API Java

API (Application and Programming Interface


/Interface pour la programmation d'applications) :
Ensemble de bibliothques permettant une
programmation plus aise car les fonctions deviennent
indpendantes du matriel.

Ces classes sont regroupes, par catgories, en


paquetages (ou "packages").

FranoisBonneville

27

LAPI de Java (2)

Les principaux paquetages

java.util : structures de donnes classiques


java.io : entres / sorties
java.lang : chanes de caractres, interaction avec l'OS, threads
java.applet : les applets sur le web
java.awt : interfaces graphiques, images et dessins
javax.swing : package rcent proposant des composants lgers
pour la cration dinterfaces graphiques
java.net : sockets, URL
java.rmi : Remote Method Invocation (pas abord dans ce cours)
java.sql : fournit le package JDBC (pas abord dans ce cours)

FranoisBonneville

28

LAPI de Java (3)

La documentation de Java est standard,


que ce soit pour les classes de l'API ou
pour les classes utilisateur

possibilit de gnration automatique avec


loutil Javadoc.

Elle est au format HTML.

intrt de l'hypertexte pour naviguer dans la


documentation
FranoisBonneville

29

LAPI de Java (4)

Pour chaque classe, il y a une page HTML


contenant :

la hirarchie d'hritage de la classe,


une description de la classe et son but gnral,
la liste des attributs de la classe (locaux et hrits),
la liste des constructeurs de la classe (locaux et hrits),
la liste des mthodes de la classe (locaux et hrits),
puis, chacune de ces trois dernires listes, avec la
description dtaille de chaque lment.
FranoisBonneville

30

LAPI de Java (5)

O trouver les informations sur les classes de


lAPI

sous le rpertoire jdk1.x/docs/api dans le JDK


les documentations de lAPI se tlchargent et
sinstallent (en gnral) dans le rpertoire dans lequel
on installe java.
Par exemple si vous avez installer Java dans le
rpertoire D:/Apps/jdk1.4/, vous dcompresser le fichier
zip contenant les documentations dans ce rpertoire.
Les docs de lAPI se trouveront alors sous :
D:/Apps/jdk1.4/docs/api/index.html
Sur le site de Sun, on peut la retrouver
http://java.sun.com/docs/index.html
FranoisBonneville

31

LAPI de Java (6)

FranoisBonneville

32

Outil de dveloppement : le JDK

Environnement de dveloppement fourni par Sun


JDK signifie Java Development Kit (Kit de
dveloppement Java).
Il contient :

les classes de base de l'API java (plusieurs centaines),


la documentation au format HTML
le compilateur : javac
la JVM (machine virtuelle) : java
le visualiseur d'applets : appletviewer
le gnrateur de documentation : javadoc
etc.

FranoisBonneville

33

Java, un langage novateur?

Java n'est pas un langage novateur : il a puis


ses concepts dans d'autres langages existants et
sa syntaxe sinspire de celle du C++.
Cette philosophie permet Java

De ne pas drouter ses utilisateurs en faisant "presque


comme ... mais pas tout fait"
D'utiliser des ides, concepts et techniques qui ont fait
leurs preuves et que les programmeurs savent utiliser

En fait, Java a su faire une synthse efficace de


bonnes ides issues de sources d'inspiration
varies

Smalltalk, C++, Ada, etc.


FranoisBonneville

34

Syntaxe du langage Java

Les commentaires

/* commentaire sur une ou plusieurs lignes */

// commentaire de fin de ligne

Identiques ceux existant dans le langage C


Identiques ceux existant en C++

/** commentaire d'explication */

Les commentaires d'explication se placent


gnralement juste avant une dclaration (d'attribut
ou de mthode)
Ils sont rcuprs par l'utilitaire javadoc et inclus
dans la documentation ainsi gnre.
FranoisBonneville

36

Instructions, blocs et blancs

Les instructions Java se terminent par un ;


Les blocs sont dlimits par :

{ pour le dbut de bloc


} pour la fin du bloc
Un bloc permet de dfinir un regroupement
dinstructions. La dfinition dune classe ou dune
mthode se fait dans un bloc.

Les espaces, tabulations, sauts de ligne sont


autoriss. Cela permet de prsenter un code
plus lisible.
FranoisBonneville

37

Point dentre dun programme Java

Pour pouvoir faire un programme excutable il


faut toujours une classe qui contienne une
mthode particulire, la mthode main

cest le point dentre dans le programme : le


microprocesseur sait quil va commencer excuter les
instructions partir de cet endroit
public static void main(String arg[ ])
{
/
}

FranoisBonneville

38

Exemple (1)
Fichier Bonjour.java

public classBonjour
{//AccoladedbutantlaclasseBonjour

La classe est lunit de


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

public static void main(Stringargs[])


{//Accoladedbutantlamthodemain
/*Pourlinstantjusteuneinstruction*/
System.out.println(bonjour);
}//Accoladefermantlamthodemain
}//AccoladefermantlaclasseBonjour

FranoisBonneville

39

Exemple (2)
Fichier Bonjour.java

public classBonjour

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

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

Accolades dlimitant le dbut


et la fin de la mthode main

}
}

Les instructions se terminent


par des ;

FranoisBonneville

40

Exemple (3)
Fichier Bonjour.java

public classBonjour
{

Une mthode peut recevoir


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

public static void main(String args[])


{
System.out.println(bonjour);
}
}

FranoisBonneville

41

Compilation et excution (1)


Le nom du fichier est ncessairement
celui de la classe avec lextension
.java en plus. Java est sensible la
casse des lettres.

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

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

FranoisBonneville

42

Compilation et excution (3)

Pour rsumer, dans une console DOS, si jai un fichier


Bonjour.java pour la classe Bonjour :

javac Bonjour.java
Compilation en bytecode java
Indication des erreurs de syntaxe ventuelles
Gnration dun fichier Bonjour.class si pas derreurs
java Bonjour
Java est la machine virtuelle
Excution du bytecode
Ncessit de la mthode main,qui est le point dentre dans le
programme

FranoisBonneville

43

Identificateurs (1)

On a besoin de nommer les classes, les variables,


les constantes, etc. ; on parle didentificateur.
Les identificateurs commencent par
une lettre, _ ou $
Attention : Java distingue les majuscules des minuscules

Conventions sur les identificateurs :

Si plusieurs mots sont accols, mettre une majuscule


chacun des mots sauf le premier.
exemple : uneVariableEntiere
La premire lettre est majuscule pour les classes et les
interfaces
exemples : MaClasse,UneJolieFenetre
FranoisBonneville

44

Identificateurs (2)

Conventions sur les identificateurs :

La premire lettre est minuscule pour les


mthodes, les attributs et les variables
exemples : setLongueur,i,uneFenetre
Les constantes sont entirement en majuscules
exemple : LONGUEUR_MAX

FranoisBonneville

45

Les mots rservs de Java


abstract

default

goto

null

synchronized

boolean

do

if

package

this

break

double

implements

private

throw

byte

else

import

protected

throws

case

extends

instanceof

public

transient

catch

false

int

return

true

char

final

interface

short

try

class

finally

long

static

void

continue

float

native

super

volatile

const

for

new

switch

while

FranoisBonneville

46

Les types de bases (1)

En Java, tout est objet sauf les types de base.


Il y a huit types de base :

untypeboolenpourreprsenterlesvariablesnepouvantprendreque2valeurs
(vraietfaux,0ou1,etc.):booleanaveclesvaleursassociestrueetfalse
untypepourreprsenterlescaractres:char
quatretypespourreprsenterlesentiersdediverstaille:byte,short,intetlong
deuxtypespourreprsenterlesrelles:floatetdouble

La taille ncessaire au stockage de ces types est indpendante de la


machine.

Avantage : portabilit
Inconvnient : "conversions" coteuses

FranoisBonneville

47

Les types de bases (2) : les entiers

Les entiers (avec signe)

byte : cod sur 8 bits, peuvent reprsenter des


entiers allant de -27 27 1 (-128 +127)
short : cod sur 16 bits, peuvent reprsenter des
entiers allant de -215 215 1
int : cod sur 32 bits, peuvent reprsenter des
entiers allant de -231 231 1
long : cod sur 64 bits, peuvent reprsenter des
entiers allant de -263 263 1
FranoisBonneville

48

Les types de bases (3) : les entiers

Notation

2 entier normal en base dcimal


2L entier au format long en base dcimal
010 entier en valeur octale (base 8)
0xF entier en valeur hexadcimale (base 16)

Oprations sur les entiers

oprateurs arithmtiques +, -, *
/ :division entire si les 2 arguments sont des entiers
% : reste de la division entire
exemples :

15 / 4 donne 3
15 % 2 donne 1

FranoisBonneville

49

Les types de bases (4) : les entiers

Oprations sur les entiers (suite)

les oprateurs dincrmentation ++


et de dcrmentation et -

ajoute ou retranche 1 une variable


int n = 12;
n ++; //Maintenant n vaut 13

n++; quivalent n = n+1;


n--; quivalent n = n-1;
8++; est une instruction illgale
peut sutiliser de manire suffixe : ++n. La diffrence avec la
version prfixe se voit quand on les utilisent dans les expressions.
En version suffixe la (d/inc)rmentation seffectue en premier
int m=7; int n=7;
int a=2 * ++m; //a vaut 16, m vaut 8
int b=2 * n++; //b vaut 14, n vaut 8

FranoisBonneville

50

Les types de bases (5) : les rels

Les rels

float : cod sur 32 bits, peuvent reprsenter des


nombres allant de -1035 + 1035
double : cod sur 64 bits, peuvent reprsenter
des nombres allant de -10400 +10400

Notation

4.55 ou 4.55D rel double prcision


4.55f rel simple prcision
FranoisBonneville

51

Les types de bases (6) : les rels

Les oprateurs

oprateurs classiques +, -, *, /
attention pour la division :

15 / 4 donne 3 division entire


15 % 2 donne 1
11.0 / 4 donne 2.75
(si lun des termes de la division est un rel, la
division retournera un rel).

puissance : utilisation de la mthode pow de la


classe Math.

double y = Math.pow(x, a) quivalent x^a, x


et a tant de type double
FranoisBonneville

52

Les types de bases (7) : les boolens

Les boolens
boolean

contient soit vrai (true) soit faux (false)

Les oprateurs logiques de comparaisons


: oprateur ==
Diffrence : oprateur !=
suprieur et infrieur strictement :
oprateurs > et <
suprieur et infrieur ou gal :
oprateurs >= et <=
Egalit

FranoisBonneville

53

Les types de bases (8) : les boolens

Notation

boolean x;
x= true;
x= false;
x= (5==5); // l expression (5==5) est value et la valeur est
affecte x qui vaut alors vrai
x= (5!=4); // xvautvrai,icionobtientvraisi5estdiffrentde4
x= (5>5); // xvautfaux,5n'estpassuprieurstrictement5
x= (5<=5); // xvautvrai,5estbieninfrieurougal5

FranoisBonneville

54

Les types de bases (9) : les boolens

Les autres oprateurs logiques

et logique : &&
ou logique : ||
non logique : !
Exemples : si a et b sont 2 variables boolennes
boolean a,b, c;
a= true;
b= false;
c= (a && b); // c vaut false
c= (a || b); // c vaut true
c= !(a && b); // c vaut true
c=!a; // c vaut false

FranoisBonneville

55

Les types de bases (10) : les caractres

Les caractres

char : contient une seule lettre


le type char dsigne des caractres en reprsentation
Unicode
Codage sur 2 octets contrairement ASCII/ANSI
cod sur 1 octet. Le codage ASCII/ANSI est un
sous-ensemble dUnicode
Notation hexadcimale des caractres Unicode de
\u0000 \uFFFF .
Plus dinformation sur Unicode :
www.unicode.org
FranoisBonneville

56

Les types de bases (11) : les caractres


Notation
char a,b,c; // a,b et c sont des variables du type char
a='a'; // a contient la lettre 'a'
b= '\u0022' //b contient le caractre guillemet : "
c=97; // x contient le caractre de rang 97 : 'a'

FranoisBonneville

57

Les types de bases (12)


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

Remarque importante :

Java exige que toutes les variables soient dfinies


et initialises. Le compilateur sait dterminer si
une variable est susceptible d'tre utilise avant
initialisation et produit une erreur de compilation.
FranoisBonneville

58

Les structures de contrles (1)


Les

structures de contrle classiques


existent en Java :

if, else
switch, case, default, break
for
while
do, while
FranoisBonneville

59

Les structures de contrles (2) : if / else

Instructions conditionnelles

Effectuer une ou plusieurs instructions seulement si une


certaine condition est vraie
if (condition) instruction;
et plus gnralement : if (condition)
{ bloc dinstructions}
condition doit tre un boolen ou renvoyer une valeur boolenne

Effectuer une ou plusieurs instructions si une certaine


condition est vrifie sinon effectuer dautres instructions
if (condition) instruction1; else instruction2;
et plus gnralement if (condition) { 1er bloc dinstructions}
else {2me bloc dinstruction}
FranoisBonneville

60

Les structures de contrles (3) : if / else


Max.java
import java.io.*;
public class Max
{
public static void main(String args[])
{
Console console = System.console();
int nb1 = Integer.parseInt(console.readLine("Entrer un entier:"));
int nb2 = Integer.parseInt(console.readLine("Entrer un autre entier:"));
if (nb1 > nb2)
System.out.println("l'entier le plus grand est "+ nb1);
else
System.out.println("l'entier le plus grand est "+ nb2);
}
}

FranoisBonneville

61

Les structures de contrles (4) : while

Boucles indtermines

On veut rpter une ou plusieurs instructions un nombre


indtermins de fois : on rpte linstruction ou le bloc
dinstruction tant que une certaine condition reste vraie
nous avons en Java une premire boucle while (tant que)
while (condition) {bloc dinstructions}
les instructions dans le bloc sont rptes tant que la
condition reste vraie.
On ne rentre jamais dans la boucle si la condition est
fausse ds le dpart

FranoisBonneville

62

Les structures de contrles (5) : while

Boucles indtermines

un autre type de boucle avec le while:


do {bloc dinstructions} while (condition)
les instructions dans le bloc sont rptes tant
que la condition reste vraie.
On rentre toujours au moins une fois dans la
boucle : la condition est teste en fin de boucle.

FranoisBonneville

63

Les structures de contrles (6) : while


Facto1.java
import java.io.*;
public class Facto1
{
public static void main(String args[])
{
int n, result,i;
n = Integer.parseInt(System.console().readLine("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);
}
}

FranoisBonneville

64

Les structures de contrles (7) : for

Boucles dtermines

On veut rpter une ou plusieurs instructions un nombre


dtermins de fois : on rpte linstruction ou le bloc
dinstructions pour un certain nombre de pas.
La boucle for
for (int i = 1; i <= 10; i++)
System.out.println(i); //affichage des nombres de 1 10
une boucle for est en fait quivalente une boucle while
for (instruction1; expression1; expression2) {bloc}
est quivalent
instruction 1; while (expression1) {bloc; expression2}}

FranoisBonneville

65

Les structures de contrles (8) : for


Facto2.java
import java.io.*;
public class Facto2
{
public static void main(String args[])
{
int n, result,i;
n = Integer.parseInt(System.console().readLine("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);
}
}

FranoisBonneville

66

Les structures de contrles (9) : switch

Slection multiples

lutilisation de if / else peut savrer lourde quand on doit traiter


plusieurs slections et de multiples alternatives
pour cela existe en Java le switch / case assez identique celui de
C/C++
La valeur sur laquelle on teste doit tre un char ou un entier (
lexclusion dun long).
Lexcution des instructions correspondant une alternative
commence au niveau du case correspondant et se termine la
rencontre dune instruction break ou arrive la fin du switch

FranoisBonneville

67

Les structures de contrles (10) : switch


Alternative.java
import java.io.*;

Variable contenant la valeur


que lon veut tester.

public class Alternative


Premire alternative :
{
on affiche Un et on sort
public static void main(String args[])
du bloc du switch au break;
{
int nb = Integer.parseInt(System.console().readLine("Entrer une valeur pour n:"));
switch(nb)
{
Deuxime alternative :
case 1:
on affiche Deux et on sort
System.out.println("Un"); break;
du bloc du switch au break;
case 2:
System.out.println("Deux"); break;
default:
Alternative par dfaut:
System.out.println("Autre nombre"); break;
on ralise une action
}
par dfaut.
}
}

FranoisBonneville

68

Les tableaux (1)

Les tableaux permettent de stocker plusieurs valeurs de


mme type dans une variable.

Dclaration

Les valeurs contenues dans la variable sont repres par un indice


En langage java, les tableaux sont des objets
inttab[];
Stringchaines[];

Cration d'un tableau

tab=newint[20];//tableaude20int
chaines=newString[100];//tableaude100chaine

FranoisBonneville

69

Les tableaux (2)

Le nombre d'lments du tableau est mmoris. Java


peut ainsi dtecter l'excution le dpassement d'indice
et gnrer une exception. Mot cl length
Il est rcuprable par nomTableau.length
int taille = tab.length; //taille vaut 20

Comme en C/C++, les indices dun tableau


commencent 0 . Donc un tableau de taille 100 aura
ses indices qui iront de 0 99.

FranoisBonneville

70

Les tableaux (3)

Initialisation
tab[0]=1;
tab[1]=2;//etc.
noms[0]=newString("Boule");
noms[1]=newString("Bill");//etc

Cration et initialisation simultanes


Stringnoms[]={"Boule","Bill"};
Pointpts[]={newPoint(0,0),newPoint(10,1)};

FranoisBonneville

71

Les tableaux (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];
}
}

Les indices vont toujours


de 0 (taille-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]

FranoisBonneville

72

Les tableaux (5)


Tab1.java

Mmoire

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];
}
}

FranoisBonneville

0x0000
0x258
0
0
0
0

73

Les tableaux (6)


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];
}
}

FranoisBonneville

Mmoire

0x258

5
0
0
3
0
7
0
8

74

Les tableaux (7)


Tab2.java

Mmoire

public class Tab2


{
public static void main (String args[])
{
String tab[ ] ;
tab = new String[4];
tab[0]=new String("Pierre");
tab[1]=new String("Paul");
tab[2]=new String("Jacques");
tab[3]=new String("Philippe");
}
}

0x0258
0x0106
0x0116
0x0126
0x0136

"Pierre"
"Paul"
"Jacques"
"Philippe"

FranoisBonneville

75

La classe String (1)

Attention ce nest pas un type de base. Il s'agit d'une


classe dfini dans lAPI Java (Dans le package java.lang)
String s="aaa"; // s contient la chane "aaa" mais
String s=new String("aaa"); // identique la ligne prcdente

La concatnation
loprateur + entre 2 String les concatne :
String str1 = "Bonjour ! ";
String str2 = null;
str2 = "Comment vas-tu ?";
String str3 = str1 + str2; / * Concatnation de chanes : str3
contient " Bonjour ! Comment vas-tu ?"

FranoisBonneville

76

Diffrences entre objets et types de base


Mmoire
3

int x=3,y=3;
x == y est vrai

3
0x768
0x852

String s1="abc",s2="abc";
s1 == s2 est faux...

Abc
....

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

Abc
....

FranoisBonneville

77

La classe String (2)

Longueur dun objet String :

mthode int length() : renvoie la longueur de la chane


String str1 = "bonjour";
int n = str1.length(); // n vaut 7

Sous-chanes

mthode String substring(int debut, int fin)


extraction de la sous-chaine depuis la position debut jusqu la
position fin non-comprise.
String str2 = str1.substring(0,3); // str2 contient la valeur "bon"
le premier caractre dune chane occupe la position 0
le deuxime paramtre de substring indique la position du premier
caractre que l on ne souhaite pas copier

FranoisBonneville

78

La classe String (3)

Rcupration dun caractre dans une chane

mthode char charAt(int pos) : renvoie le caractre situ la position


pos dans la chane de caractre laquelle on envoie se message
String str1 = "bonjour";
char unJ = str1.charAt(3); // unJ contient le caractre 'j'

Modification des objets String

Les String sont inaltrables en Java : on ne peut modifier


individuellement les caractres dune chane.
Par contre il est possible de modifier le contenu de la variable
contenant la chane (la variable ne rfrence plus la mme chane).
str1 = str1.substring(0,3) + " soir"; /* str1 contient maintenant la
chane "bonsoir" */

FranoisBonneville

79

La classe String (4)

Les chanes de caractres sont des objets :

pour tester si 2 chanes sont gales il faut utiliser la mthode


boolean equals(String str) et non ==
pour tester si 2 chanes sont gales la casse prs il faut utiliser la
mthode boolean equalsIgnoreCase(String str)
String str1 = "BonJour";
String str2 = "bonjour"; String str3 = "bonjour";
boolean a, b, c, d;
a = str1.equals("BonJour"); //a contient la valeur true
b = (str2 = = str3); //b contient la valeur false
c = str1.equalsIgnoreCase(str2);//c contient la valeur true
d = "bonjour".equals(str2); //d contient la valeur true

FranoisBonneville

80

La classe String (5)

Quelques autres mthodes utiles

boolean startsWith(String str) : pour tester si une chaine de


caractre commence par la chaine de caractre str
boolean endsWith(String str) : pour tester si une chane de
caractre se termine par la chaine de caractre str
String str1 = "bonjour ";
boolean a = str1.startsWith("bon");//a vaut true
boolean b = str1.endsWith("jour");//b vaut true

FranoisBonneville

81

La classe String (7)


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

FranoisBonneville

82

La classe Math

Les fonctions mathmatiques les plus connues sont


regroupes dans la classe Math qui appartient au
package java.lang

les fonctions trigonomtriques


les fonctions darrondi, de valeur absolue, ...
la racine carre, la puissance, lexponentiel, le logarithme, etc.

Ce sont des mthodes de classe (static)


double calcul = Math.sqrt (Math.pow(5,2) + Math.pow(7,2));
double sqrt(double x) : racine carre de x
double pow(double x, double y) : x puissance y

FranoisBonneville

83