Vous êtes sur la page 1sur 159

Institut Suprieur dElectronique

et de Communication de Sfax

POO : Java

Programmation Oriente Objet


en Java (POO)

Responsable

Tarak CHAARI

T. CHAARI

tarak.chaari@gmail.com

POO : Java

Objectifs de ce cours

T. CHAARI

Dcouverte du Java et de son approche Objet


Matriser la syntaxe du langage
Savoir utiliser les classes de base et les objets

Contenu

POO : Java

Cest quoi Java?


Les bases du langage
Concept Objet du langage Java
Classes et Objets en Java
Programmation oriente objet avance Java
Les classes de bases
Exercices et corrigs

T. CHAARI

POO : Java

Chapitre

1
C'est quoi Java ?

T. CHAARI

1- Cest quoi Java


1-1 Historique du langage Java (1/2)
Ide originale de James Gosling

POO : Java

Lobjectif tait de commander sa machine caf


distance (pour trouver un caf chaud lors de sa rentre
la maison)
Il a voulu dvelopper cette commande en C
Aprs plusieurs mois: il a trouv plusieurs difficults d
la complexit du langage C et sa dpendance du
systme dexploitation
=> il faut un langage plus simple et mieux adapt
la communication sur internet
Cette ide a t reprise par SUN MicroSystems aprs
T. CHAARI

avoir recrut James Gosling

1- Cest quoi Java


1-1 Historique du langage Java (2/2)

POO : Java

En 1990: premire version du langage Java sous la


direction de Bill Joy et James Gosling.
En

1993,

avec

l'intrt

grandissant

d'Internet,

ce

langage, se mtamorphose en langage ddi Internet :


SUN diffuse le premier browser HotJava qui permet
d'excuter des programmes Java encapsuls dans des
pages WEB (i.e. des applets Java) de plus en plus
vivantes .
1996 : Les Java Dveloppement Kits (JDK) ou (J2SDK)
sont disponibles gratuitement pour la plupart des
machines du march.
2009: Java a t rachet par Oracle

T. CHAARI

1- Cest quoi Java


1-2 Caractrisation du langage Java (1/8)
Le langage Java est familier :

POO : Java

Java est un langage familier trs proche du langage


C, C++. Par exemple :
Mme types de base que C++ (int, float, double, etc.),
Mme formes de dclarations que C++,
Mme structure de contrle que C++ (if, while, for, etc.).
Le langage Java est simple :
Java est un langage simple par rapport au langage C
et C++.
Il n'y a plus de pointeurs et des manipulations les concernant ;
Java se charge (presque) de restituer au systme les zones
mmoire inaccessibles et ce sans l'intervention du
programmeur.
T. CHAARI

1- Cest quoi Java


1-2 Caractrisation du langage Java (2/8)

POO : Java

Le langage Java est orient objet :


Paquetage pour la rutilisation :
java.lang : classes de base
java.awt : interfaces graphiques

java.net : communication rseaux (socket et URL)


java.applet : API Applet
Le langage Java est distribu :

Supporte

des

applications

rseaux

communication java.net)
URL : permet l accs des objets distants
T. CHAARI

RMI : Remote Method Invocation

(protocoles

de

1- Cest quoi Java


1-2 Caractrisation du langage Java (3/8)

POO : Java

Le langage Java est un langage intermdiaire:


Un programme Java n'est pas compil en code
machine ;
Il sera compil en code intermdiaire interprt nomm
ByteCode.
Lors de l'excution le ByteCode sera interprt laide dune
machine dite virtuelle JVM (Java Virtual Machine).
Le langage Java est portable et indpendant des platesformes :
Le code intermdiaire produit
indpendant des plates-formes.

T. CHAARI

ByteCode

est

Il pourra tre excut sur tous types de machines et systmes


pour peu qu'ils possdent l'interprteur de code Java JVM .

1- Cest quoi Java


1-2 Caractrisation du langage Java (4/8)

POO : Java

Production dune application Java standard

Bytecode
Prog.java

COMPILATEUR
JAVA

Class1.class

Code source
Class2.class

Bytecode = Pseudo code machine qui contrairement du code


binaire natif, n'est pas excut directement par le processeur ce qui a
pour consquence de ralentir son excution.
T. CHAARI

1- Cest quoi Java


1-2 Caractrisation du langage Java (5/8)

POO : Java

Excution dune application Java standard

Bytecode
JVM
Prog.class

INTERPRETEUR
DE BYTECODE

Rsultats

JVM = Programme capable d'interprter les instructions contenues


dans les fichiers ByteCode Java afin de les excuter.
T. CHAARI

1- Cest quoi Java

POO : Java

1-2 Caractrisation du langage Java (6/8)

T. CHAARI

1- Cest quoi Java


1-2 Caractrisation du langage Java (7/8)

POO : Java

Systme dexploitation

T. CHAARI

MVJ
Code Java

1- Cest quoi Java

POO : Java

1-2 Caractrisation du langage Java (8/8)

Le langage Java est robuste et sr :


Dtection des erreurs dinvocation des mthodes :
java est fortement typ
seules des conversions sres sont automatiques

Fiabilit de la gestion de la mmoire


pas de pointeurs
ramasse miettes automatique
contrle automatique daccs aux tableaux et aux chanes de
caractres.
Le langage Java est multithread :
JAVA permet lexcution simultane de plusieurs processus
lgers (thread)

Classe java.lang.thread avec les mthodes permettant de :


T. CHAARI

Dmarrer, Excuter, Stopper ces processus.


contrler les synchronisations et ltat cohrent des donnes.

1- Cest quoi Java


1-3 Java vs C++

POO : Java

Un programme Java est une classe.

Une

mthode
main() avec
=> main(String[] args)

un

type

de

retour

void.

Une constante est dfinie au sein dune classe laide de


linstruction final.
Linstruction include est remplace par linstruction import
suivie par un nom complet de la classe.
Reprsentation des caractres et des identificateurs sur 16 bits
(Unicode).
Pas de pointeurs, seulement des rfrences.

T. CHAARI

1- Cest quoi Java


1-4 Java par lexemple

Fichier XXX.java
POO : Java

// Commentaire

Dfinition dune classe XXX


Mthode main ( )

Une application Java minimale doit contenir une classe :


Portant le mme nom que le fichier ayant lextension
.java dans lequel elle est enregistre.

Comportant (au moins) une mthode :


appele main,
de type public et static,
T. CHAARI

ayant un argument de type String[ ],

1- Cest quoi Java


1-4 Java par lexemple

POO : Java

Programme Java minimal :

Fichier PremierProgramme.java
// Ce programme se contente dafficher le message Ca Marche

class PremierProgramme
{
public static void main(String args[] )
{
System.out.println("Ca Marche");
}
}

T. CHAARI

1- Cest quoi Java


1-4 Java par lexemple

POO : Java

Fichier PremierProgramme.java
// Ce programme se contente dafficher le message Ca Marche

La premire ligne du programme PremierProgramme


est une ligne de commentaire :
Elle commence par //.
Tout ce qui est compris entre ces deux caractres et
la fin de la ligne est ignor par le compilateur.

T. CHAARI

En revanche, dautres outils peuvent utiliser le texte


contenu dans ce type de commentaire.

1- Cest quoi Java

POO : Java

1-4 Java par lexemple

class PremierProgramme
{
}
Le mot class veut dire que nous allons dfinir une nouvelle
classe Java, suivi du nom de cette classe.
En Java, les majuscules et les minuscules sont considrs
comme des caractres diffrents.
PremierProgramme
PREMIERProgramme.

T. CHAARI

nest

pas

identique

Les caractres { et } marquent le dbut et la fin


du bloc dinstructions raliser par la classe.

1- Cest quoi Java


1-4 Java par lexemple

POO : Java

public static void main(String args[] )


{

}
main() { : signifie que nous allons dfinir une mthode
appele main.
Le mot main indique que cette mthode est la mthode
principale de la classe.
Un interprteur Java a pour fonction dexcuter les
instructions contenues dans le bloc dinstruction de la
mthode principale main, du programme quon lui soumet.

T. CHAARI

Une mthode est une sorte de procdure (ensemble


dinstructions) appartenant une classe.

1- Cest quoi Java


1-4 Java par lexemple

POO : Java

public static void main(String args[] )


{
}
le mot void signifie que la mthode main ne renvoie
aucune valeur.
args[ ] est le paramtre dentre de type String de la
mthode main.
les mots public et static dcrivent chacun
caractristique de la mthode (voir plus loin).

T. CHAARI

une

1- Cest quoi Java

POO : Java

1-4 Java par lexemple

public static void main(String args[] )


{
System.out.println("Ca Marche");
}

System.out.println est une commande permettant


dafficher la chane de caractre Ca MARCHE sur la
sortie par dfaut de votre machine qui est lcran.

T. CHAARI

1- Cest quoi Java


1-5 Exemple dune application Java standard
Fichier PremierProgramme.java
POO : Java

// Ce programme se contente dafficher le message Ca Marche

class PremierProgramme
{
static void affiche( )
{
System.out.println("Ca Marche");
}
public static void main(String args[] )
{
affiche( );
}

}
T. CHAARI

1- Cest quoi Java


1-6 Le Java developper Kit : JDK

POO : Java

Le JDK ou J2SDK (Java 2 Software Development Kit):


est lensemble des outils ncessaires pour dvelopper
et excuter une application Java.

Des environnement intgrs de dveloppement Java sont


actuellement :
commercialiss (Visual j++, Symnatec caf, etc.)
distribus gratuitement travers le Web (Eclipse).

T. CHAARI

1- Cest quoi Java


1-7 Outils principaux fournis par le JDK
Le compilateur javac:

POO : Java

Compile les fichiers sources java de nom XXX.java.


Traduit les fichiers sources en ByteCode :
Produit autant de fichier .class quil y a de classe dfinie dans
le fichier .java.
Linterprteur java:
Prend en paramtre le nom de la classe.

Cherche le ou les fichiers .class qui lui correspondent.


Appelle la mthode main de la classe.
Le documenteur javadoc:

T. CHAARI

Gnre automatiquement une documentation sous la


forme de fichiers html partir des fichiers sources
comments.

1- Cest quoi Java


1-8 J2RE (Java 2 Runtime Environment)

POO : Java

Contient tout ce qui est ncessaire pour diffuser vos


applications.
En cas dune application devant tre diffuse au public
sur un CD-ROM, vous ne pouvez pas supposer que
chaque utilisateur sera quip dune JVM.
Il est ncessaire daccompagner chaque application dune
machine virtuelle .

Cest cette fin que Oracle met la disposition de tous,


gratuitement le J2RE. Celui-ci contient tous les lments
ncessaires pour faire fonctionner une application Java, par
opposition au J2SDK, qui contient tout ce qui est ncessaire
pour dvelopper une application.
Le J2RE peut tre diffus librement sans payer aucun droit
Oracle.
T. CHAARI

1- Cest quoi Java


1-9 Ecrire une application Java en ligne de
commandes
Pr requis

POO : Java

Un diteur de texte
Etapes :
Ecrire
le
code
source
du
programme
PremierProgramme.java dans un fichier portant le
nom de la classe.
Respecter
la
casse
(majuscules/minuscules).

des

Compiler
le
code
PremierProgramme.java.

source:

caractres
javac

Un fichier PremierProgramme.class contenant du


ByteCode sera gnr.
T. CHAARI

Excuter le ByteCode : java PremierProgramme

1-10 Ecrire une application Java avec un IDE

POO : Java

Simple
diteurs
dveloppement

T. CHAARI

ou

environnement

de

1- Cest quoi Java


1-10 Ecrire une application Java avec un IDE (1/4)
Pr requis

POO : Java

ECLIPSE : www.eclipse.org

T. CHAARI

Etapes :
Crer un projet.
File new Java Project
Project name Test

1- Cest quoi Java


1-10 Ecrire une application Java avec un IDE (2/4)
Etapes (suite) :

POO : Java

Crer une classe.

T. CHAARI

File new Class


Name Test

1- Cest quoi Java


1-10 Ecrire une application Java avec un IDE (3/4)
Etapes (suite) :

POO : Java

Insrer linstruction System.out.println("Ca Marche");


dans le corps de la mthode main.

T. CHAARI

1- Cest quoi Java


1-10 Ecrire une application Java avec un IDE (4/4)
Etapes (suite) :

POO : Java

Compiler le code source.

T. CHAARI

Excuter le ByteCode

1- Cest quoi Java

POO : Java

1-11 Point faible de Java

T. CHAARI

Pas aussi rapide quun programme natif.


Gourmand en mmoire.

1- Cest quoi Java


1-12 Rfrences

POO : Java

Sites Web :

Site officiel Java (JDK et doc.) :


http://www.javasun.com
http://www.oracle.com/technetwork/java/javase/documentati
on/index.html
Info sur Java :
http://www.javaworld.com.

T. CHAARI

POO : Java

Chapitre

2
Les bases du langage

T. CHAARI

2- Les bases du langage


2.1 Les commentaires (1/4)

POO : Java

Tout programme (grand ou petit, simple ou complexe)


contient (ou devrait contenir) des commentaires.
Ils ont pour but d'expliquer :
Ce qu'est sens faire le programme,
Les conventions adoptes,
Tout autre information rendant le programme lisible
soi mme et surtout autrui.
Java dispose de trois types de commentaires :
Les commentaires multilignes,
Les commentaires lignes,
T. CHAARI

Les commentaires de type documentation.

2- Les bases du langage


2.1 Les commentaires (2/4)

POO : Java

Commentaires en lignes
Les commentaires lignes dbutent avec les symboles
``//'' et qui se terminent la fin de la ligne.

// Ce programme imprime la chane


// de caractres " bonjour " l'cran

...
Ils sont utiliss pour des commentaires courts qui
tiennent sur une ligne.
T. CHAARI

2- Les bases du langage


2.1 Les commentaires (3/4)

POO : Java

Commentaires multilingnes :
Un commentaire multiligne commence
caractres ``/*'' et se terminent par ``*/''.

par

/* Ce programme imprime la chane


de caractres "bonjour" l'cran
*/

A l'intrieur de ces dlimiteurs toute suite


caractres est valide (sauf videmment ``*/'').
T. CHAARI

les

de

2- Les bases du langage


2.1 Les commentaires (4/4)

POO : Java

Commentaires de types documentation :

Ces commentaires, appels aussi commentaires javadoc,


servent documenter les classes que l'on dfinit.
Ces commentaires sont encadrs entre ``/**'' et ``*/'' .

/** Documentation de la classe .


*/
Java exige que ces commentaires figurent avant la dfinition
de la classe, d'un membre de la classe ou d'un constructeur.
Ces commentaires serviront produire automatiquement
(avec l'outil javadoc) la documentation sous forme HTML
l'image de la documentation officielle de Oracle.

T. CHAARI

2- Les bases du langage


2.3 Les types de donnes lmentaires

POO : Java

Le langage Java est un langage fortement typ :


Chaque variable et chaque expression possde un
type bien dfini.
Le choix dun type est en fonction de l'tendu de
valeur souhaite pour vos variables.
Les types de donnes de Java sont diviss en deux grands
groupes :
Les types primitifs (ou de base)
Exemple : Les types numriques, le type boolen, Le type
caractre.
T. CHAARI

Les types rfrences.

2- Les bases du langage


2.4 Les types primitifs numriques (1/2)

POO : Java

Les types numriques entiers


Taille en bits
Etendue

byte

short

int

long

16

32

64

-128
..
127

-32768
..
32767

-231 .. 231-1

-263 .. 263-1

Le bit y est utilis pour dcrire les tailles.


Un bit ne peut prendre que deux valeurs (0 ou 1).
n bits ne peuvent dfinir que 2n valeurs.
Un octet ou byte en anglais = 8 bits.
Un octet peut donc contenir 28 (soit 256) valeurs
distinctes.
T. CHAARI

2- Les bases du langage


2.4 Les types primitifs numriques (2/2)

POO : Java

Les types numriques flottants


De mme que pour les types numriques, il existe deux types
pour les nombres flottants :
float,
double.
la seule diffrence rsidant dans la taille utilise pour stocker
une valeur de ce type.

Taille en bits
Exemple
valeur
T. CHAARI

de

float

double

32

64

3.25

3.25

2- Les bases du langage


2.5 Le type primitif boolen

POO : Java

Ce type est introduit en Java par le mot cl boolen.

Ce type est un vrai type boolen


il accepte seulement deux tats :
l'un est nomm true :
Symbolise un tat d'acceptation,
l'autre, nomm false,
Symbolise un tat de rfutation.
Attention, contrairement au langage C, le type boolen en
Java n'est pas un sous-type numrique :
En C par exemple, la valeur 0 est considre comme
fausse et les autres valeurs entires comme vraies.

T. CHAARI

2- Les bases du langage

POO : Java

2.6 Le type primitif caractre

Ce type, introduit par le mot cl char, et permet la gestion


des caractres.
Java utilise le codage de caractres universel Unicode qui
est un extension du codage ASCII.

Le codage ASCII utilise 8 bits et permet de reprsenter


seulement 128 caractres.

T. CHAARI

2- Les bases du langage


2.7 Les types rfrences

POO : Java

Tout type non primitif, est un type de rfrence.

Le rle dun type de rfrence est de rfrencer ou reprer


une zone mmoire.

Un type de rfrence a un rle analogue celui des


pointeurs du langage C .
Plus de dtails plus loin

T. CHAARI

2- Les bases du langage


2.8 Dclaration et initialisation des variables

POO : Java

Syntaxe :
Type identificateur [= constante ou expression];
int NbredeMois = 12 ; int NbredeMois = 4*3 ;
int nbrDeDoigts = 012 ;
boolean Unboolean = false ;
float Unfloatant = 1.3f ;
char Uncaractre = 'c' ; char Uncaractre = \n' ;
String Unstring= " bonjour \n " ;
Et ventuellement, un modificateur daccs ou de
visibilit : final float pi=3.14159

T. CHAARI

String n'est pas un type primitif, mais une classe

2- Les bases du langage


2.9- Les oprateurs
Les oprateurs dans Java sont regroups par :

POO : Java

type doprations :

daffectation
numrique,
de comparaison,
logique,
sur les chanes de caractres,
de manipulations binaires.

T. CHAARI

le nombre doprandes :
unaire,
binaire,
ternaire.

2- Les bases du langage

POO : Java

2.10- Oprateurs unaires


Oprateurs
unaires

Action

Exemple

ngation

i=-j

++

incrmentation de 1

i=j++ ou i=++j

--

dcrmentation de 1

i=j-- ou i=--j

++ et -- peuvent prfixer ou postfixer la variable.


i = j++ : post-incrmentation
La valeur en cours de j est affecte i et ensuite la valeur de j
est incrmente de 1.
i = ++ j : pr-incrmentation
La valeur en cours de j est incrmente de 1 et ensuite la valeur
de j est affecte i.

T. CHAARI

2- Les bases du langage

POO : Java

2.11- Oprateurs binaires

Oprateurs
binaires

Action

Exemple

addition

i = j+k;

+=
-

i += 2;
soustraction

-=
*
*=
/

T. CHAARI

i= i - j

x=2*y;
x *=x;

x= x * x

i =j/k;

/=

division
(tronque si les
arguments sont entiers)

x /= 10;

modulo

i = j %k;

%=

i= i + 2

i = j - k;
i -= j;

multiplication

Syntaxe
quivalente

i %=2

x= x /10

i= i %2

2- Les bases du langage


2.12- Oprateurs relationnels

POO : Java

Le rsultat d'une comparaison est une valeur boolenne


(vrai ou faux).

T. CHAARI

Dans le langage Java, le rsultat d'une comparaison est


true ou false.

Oprateurs
relationnels

Action

Exemple

<

plus petit que

x<i;

>

plus grand que

i>100;

<=

plus petit ou gal que

j<=k;

>=

plus grand ou gal que

c>=a;

==

gal

i==20;

!=

diffrent de

c!=z;

2- Les bases du langage

POO : Java

2.13- Oprateurs logiques

T. CHAARI

Oprateurs
logiques

Action

Exemple

ngation

!p;

&

ET

p & (i<10)

OU

p|q

Syntaxe
quivalent

2- Les bases du langage


2.14- Oprateurs ternaire

POO : Java

Un unique oprateur ternaire.


Cette expression est une sorte de si-alors-sinon sous
forme d'expression :
a = (condition e) ? x : y
si la condition e est vraie alors a vaut x sinon elle vaut y.
Exemple : a = (v==2) ? 1 : 0;
Cette expression affecte la variable a la valeur 1 si v vaut 2,
sinon affecte la variable a la valeur 0.

T. CHAARI

2- Les bases du langage


2.15 structures de contrle : if
Syntaxe :

POO : Java

if (expression boolene ) instruction ;


Exemple :

Rsultat daffichage

public class IfApplication1 {


public static void main(String[ ] args)
{

int i = 4 ;
if ( i %2 != 0 ) System.out.print (" i est impair ");
}
}

Attention
:
L'expression
logique
obligatoirement de type boolean.
T. CHAARI

attendue

est

si l'on crit if ( i = 1 ), le compilateur dtectera une erreur, car


le type de l'expression logique est alors int.

2- Les bases du langage


2.15 structures de contrle : if - else
Exemple

POO : Java

Syntaxe
if (expression boolenne )
{
instruction 1 ;

instruction i ;
}
else
{
instruction j ;

instruction n ;
}

public class If_elseApplication {


public static void main(String[ ] args)
{
int i = 4 ;

if (i % 2 == 0 )
{

System.out.println (" i est pair " );

}
else
{
}

Rsultat daffichage
i est pair

T. CHAARI

System.out.println (" i est impair " );

2- Les bases du langage


2.15 structures de contrle : if else - if

POO : Java

Syntaxe

if (expression boolene 1)
public class if_else_ifApplication {
{
instruction 1 ;
public static void main(String[ ] args)

{
instruction i ;
int i = 1, j =2 ;
}
if (i == j )
{
else if (expression boolene 2 )
System.out.println (" i est gal j " );
{
instruction j;
}

else if ( i>j)
instruction m ;
{
System.out.println (" i est suprieur j" );
}
}
else
else
{
{
instruction m+1 ;
System.out.println (" i est positive " );

}
}
Rsultat daffichage
i est positive

T. CHAARI

Exemple

2- Les bases du langage


2.15 structures de contrle : switch
Exemple

POO : Java

Syntaxe
switch (variable)
{
case valeur 1 :

public class SwitchApplication {


public static void main(String[ ] args)
{
int i = 1,
switch (i)
{ case 0 :
System.out.println (" 0 " );
break;
case 1 :
System.out.println (" 1 " );
break;
case 2 :
System.out.println (" 2 " );
break;
default :
System.out.println (i);
break;
}

instr1_1; instr1_2;
break;

...

case valeur N :
instrN_1; instrN_2;
break;

default: /* optionnel */
instrD_1; instrD_2; ...
break;

Rsultat daffichage

1
T. CHAARI

2- Les bases du langage


2.15 structures de contrle : for
Exemple :
public class ForApplication {

POO : Java

public static void main(String[ ] args)


{
int somme = 0;
for ( int compteur = 1, max = 4 ; compteur < max ; compteur++)

{
somme = somme + compteur;

}
System.out.println (somme );
}
}

T. CHAARI

Rsultat daffichage

Fonctionnement :
initialisation du compteur,
comparaison avec max,
ralisation des instructions,
Incrmentation du compteur et on recommence.

2- Les bases du langage


2.15 structures de contrle : while
Exemple :

POO : Java

public class WhileApplication {

public static void main(String[ ] args)


{

int compteur =1; int max = 4 ; int somme = 0;

while (compteur < max )


{
somme = somme + compteur ;

compteur++;

System.out.println (somme );
}

T. CHAARI

Rsultat daffichage
6

2- Les bases du langage


2.15 structures de contrle : do - while
Exemple :
public class Do_WhileApplication {

POO : Java

public static void main(String[ ] args)


{
int compteur =1; int max = 4 ; int somme = 0;

do
{

somme = somme + compteur ;


compteur++;

}
while (compteur < max ) ;

System.out.println (somme );
}
}

T. CHAARI

Rsultat daffichage
6

2- Les bases du langage


2.15 structures de contrle : break

POO : Java

Utilisation :
Pour sortir dune structure de boucle avant que la
condition du test soit remplie.
Quand la boucle rencontre une instruction break, elle se
termine immdiatement en ignorant le code restant.
public class BreakApplication {
public static void main(String[ ] args)
{
int compteur =0;

while (compteur < 10 )


{

System.out.println (compteur );
compteur++;

}
T. CHAARI

if (compteur == 5) break;

Rsultat daffichage
0
1
2
3
4

2- Les bases du langage


2.15 structures de contrle : continue

POO : Java

Utilisation :
Pour ignorer le reste de la boucle et reprendre
lexcution litration suivante de la boucle.
public class ContinueApplication {
public static void main(String[ ] args)
{
int compteur =0;

for(compteur=0 ; compteur< 6 ; compteur++ )


{
Rsultat daffichage
if (compteur == 4) continue;
}
}

T. CHAARI

System.out.println (compteur );

0
1
2
3
5

2- Les bases du langage


2.16 Les conversions des types (1/8)

POO : Java

Il y a 2 catgories de conversions possibles :


Conversions explicites :
celles faites sur une demande explicite par un programmeur.
Conversions implicites :
celles faites automatiquement par un compilateur :
lors d'une affectation,
lors d'une promotion arithmtique,
lors d'un passage de paramtres (lors de l'invocation d'une
mthode),
T. CHAARI

2- Les bases du langage


2.16 Les conversions des types (2/8)
Conversion explicite :

POO : Java

Objectif :
changer le type d'une donne si besoin.
Comment ? :
Prfixer loprande par le type choisi.
Encadrer le type choisi par des parenthses.
Exemple :
double d = 2.5 ;
long l = (long) d ;
T. CHAARI

2- Les bases du langage

POO : Java

2.16 Les conversions des types (3/8)

Conversion implicite lors d'une affectation :


Objectif :
changer automatiquement le type d'une donne si besoin.
Comment ? :
Exemple :

Un type char peut tre utilis partout o une valeur de


type int est permise.

T. CHAARI

2- Les bases du langage


2.16 Les conversions des types (4/8)
Conversion implicite lors d'une affectation :

POO : Java

Illustration pour lexemple 1:


public class ProgrammeAffectation {
public static void main(String[ ] args)
{
int i;
short j = 2 ;
i
= j;
Conversion implicite

float k= 1.2 f ;
i = k;

Erreur de compilation

}
Solution :
T. CHAARI

= (int)

k;

2- Les bases du langage


2.16 Les conversions des types (5/8)
Conversion implicite lors d'une affectation :

POO : Java

Illustration pour lexemple 2:


public class ProgrammeSoustraction {
public static void main(String[ ] args)
{
int i;
i = A;
Conversion implicite
System.out.print( i ) ;

}
}
Rsultat daffichage :
T. CHAARI

65

2- Les bases du langage


2.16 Les conversions des types (6/8)
Conversion implicite lors d'une promotion arithmtique :

POO : Java

Objectif :
Si un oprateur s'applique sur deux arguments de type
diffrent un des deux arguments sera converti dans le type de
l'autre.
Exemple :
public class ProgrammeSoustraction {
public static void main(String[ ] args)
{
int i;
i = A-1;

Conversion implicite

System.out.print( i ) ;
}
}
T. CHAARI

Rsultat daffichage :

64

2- Les bases du langage


2.16 Les conversions des types (7/8)

POO : Java

Conversion implicite lors d'un passage de paramtres


(lors de l'invocation d'une mthode) :
public class ProgrammeSoustraction {
static short entierShort;
static void Afficher( int entier )
{
System.out.print( entier ) ;
}
public static void main(String[ ] args)
{
entierShort = 2 ;
Afficher(entierShort ) ;
}
}
T. CHAARI

Invocation de la
mthode Afficher

2- Les bases du langage


2.16 Les conversions des types (8/8)

POO : Java

Attention :
Il n'y a pas de conversion possible (implicite ou
explicite) entre un type entier et le type boolean :

int i = 0;
If ( i )
{
..
}
If ( i != 0 )
{
..
}

T. CHAARI

// Erreur la compilation

// Ok

2- Les bases du langage


2.17 Les tableaux (1/2)
Dclaration

POO : Java

monodimensionnel

int[ ] tableau_Entier;
quivalent : int tableau_Entier[ ];
multidimensionnel

Color rgb_cube[ ][ ][ ];
Cration et initialisation
int[] primes = {1, 2, 3, 5, 7};
int[] tableau_Entier = new int[50];
tableau_Entier[0]= 3;
rgb_cube = new Color[256][256][256];

T. CHAARI

2- Les bases du langage


2.17 Les tableaux (2/2)

POO : Java

Les indices des tableaux commencent par 0.


Exemple dutilisation des tableaux :

public class TabeauApplication {


public static void main(String[ ] args)
{
int[ ] tableau_Entier = new int[50]; // cration
System.out.println(tableau_Entier.length);
tableau_Entier[51]=10;
}
}

T. CHAARI

Rsultat daffichage
50
java.lang.ArrayIndexOutOfBoundsException: 51

POO : Java

Exercice 1

Ecrire

le

code

dune

mthode

afficherTableau

permettant dafficher le contenu dun tableau donn


de type entiers
Ecrire le code de la mthode main permettant
dinvoquer la mthode afficherTableau .

T. CHAARI

POO : Java

public class Tableau {


public static void afficherTableau(int []tab)
{
for(int i=0;i<tab.length;i++)
System.out.println(tab[i]);
}
public static void main(String[] args)
{
int[] tableau_Entier = new int[2];

T. CHAARI

tableau_Entier[0]=2;
tableau_Entier[1]=5;
afficherTableau(tableau_Entier);
}
}

Exercice 2

POO : Java

Rappel: String[] args : est un tableau de chane de


caractres nomm args qui permet de passer des
arguments saisis par lutilisateur avant lexcution du
programme

Ecrire le code de la mthode main permettant


dafficher les arguments donns en excution en

ordre invers.
T. CHAARI

POO : Java

public class Chaine{


public static void main(String[] args)
{
For (int i=args.length-1;i>=0;i--)
System.out.println(args[i]);
}
}

T. CHAARI

POO : Java
T. CHAARI

Chapitre

3
Le Concept Objet de Java

POO : Java

Principe POO

T. CHAARI

POO : Java

Principe POO

T. CHAARI

POO : Java

Principe POO

T. CHAARI

POO : Java

Classe : Dfinition

T. CHAARI

POO : Java

Classe : Notations

T. CHAARI

POO : Java

Codage de la classe Voiture

T. CHAARI

POO : Java

Classe : Attributs

T. CHAARI

POO : Java

Classe : Attributs et variables

T. CHAARI

POO : Java

Objet : Dfinition

T. CHAARI

POO : Java

Objet : Notations

T. CHAARI

POO : Java

Etats des objets

T. CHAARI

POO : Java

Affectation et comparaison

T. CHAARI

POO : Java

Affectation et comparaison

T. CHAARI

POO : Java

Cycle de vie dun objet

T. CHAARI

POO : Java

Cration dobjets

T. CHAARI

POO : Java

Cration dobjets

T. CHAARI

POO : Java

Cration dobjets

T. CHAARI

POO : Java

Cration dobjets

T. CHAARI

POO : Java

Constructeur de Voiture

T. CHAARI

POO : Java

Constructeur de Voiture

T. CHAARI

POO : Java

Construire une voiture de 7CV

T. CHAARI

POO : Java

Constructeur sans arguments

T. CHAARI

POO : Java

Exercice

T. CHAARI

Ecrire le code dune classe Point


reprsentant un point cartsien sur un
plan deux dimensions.
Avec cette classe, on doit pouvoir crer un
point dans des coordonnes donnes.
On doit pouvoir aussi crer un point par
dfaut aux coordonnes (0,0).
Cette classe offre une mthode deplacer
permettant de dplacer le point dune
distance dx sur laxe des x et dune
distance dy sur laxe des y

POO : Java

Solution

T. CHAARI

class Point
{
double x,y;
Point (double a, double b)
{
x=a;
y=b;
}
Point ()
{
x=0;
y=0;
}

void deplacer
(double dx, double dy)
{
x=x+dx;
y=y+dy;
}
}

POO : Java

Accs aux attributs

T. CHAARI

POO : Java

Appel de mthodes

T. CHAARI

POO : Java

Appel de mthodes

T. CHAARI

POO : Java

Objet courant

T. CHAARI

POO : Java

Objet courant : Mthodes

T. CHAARI

POO : Java

Exercice: retour la classe Point

T. CHAARI

Modifier le constructeur Point (double a, double


b) en Point (double x, double y)
Ajouter un constructeur permettant de crer un
point par copie dun autre point donn
Ajouter une mthode afficher permettant
dafficher les coordonnes du point
Ajouter une mthode distance permettant de
calculer la distance entre le point actuel et un
autre point donn
Ecrire une classe TestPoint contenant un main
permettant de tester tous les constructeurs et
toutes les mthodes de la classe Point

Solution(1/2)
void afficher(){
System.out.println("("+
this.x+","+this.y+")");
Point (double x, double y) { }
this.x=x;
double distance(Point p){
this.y=y;
return Math.sqrt((this.x}
p.x)*(this.x-p.x)+(this.yp.y)*(this.y-p.y));
Point (Point p) {
}
this.x=p.x;
this.y=p.y;
void deplacer(double dx, double
}
dy){
this.x=this.x+dx;
Point () {
this.y=this.y+dy;
this.x=0;
}
this.y=0;
}
}

POO : Java

class Point {
double x,y;

T. CHAARI

POO : Java

Solution(2/2)
class TestPoint {
public static void main(String[] arguments);
{
Point p1 = new Point(3,1); // cration (appel constructeur)
Point p2 = new Point(); // cration (appel constructeur)
Point p3 = new Point(p1); // cration (appel constructeur)

System.out.println("P2: "+p2.x+","+p2.y);//accs aux attributs


p3.afficher(); // (3,1)
System.out.println(p1.distance(p2)); // appel de mthode
p3.deplacer(-3,-2); // appel de mthode

T. CHAARI

p3.afficher(); // (0,-1)
}
}

POO : Java

Passage de paramtres

T. CHAARI

POO : Java

Exemple passage de paramtres

T. CHAARI

void affichageDouble (int a)


{ a=a*2;
System.out.println (a);}
----------------------------int a=4;
affichageDouble (a);
// a=8
System.out.println (a);
// a=4

POO : Java

Exemple passage de paramtres

T. CHAARI

void deplacerPoint (Point p, double dx, double dy)


{
void deplacer(double dx,
p.deplacer (dx,dy);
double dy)
}
{
---------------------------- this.x=this.x+dx;
Point p=new Point(1,1); }this.y=this.y+dy;
p.afficher();
// (1,1)
void afficher(){
deplacerPoint (p,2,2);
System.out.println("("+
this.x+","+this.y+")");
p.afficher();
}
//(3,3)

POO : Java

Encapsulation

T. CHAARI

POO : Java

Encapsulation

T. CHAARI

POO : Java

Encapsulation

T. CHAARI

POO : Java

Prcision sur System.out.

T. CHAARI

POO : Java

API Java

T. CHAARI

POO : Java

Chanes des caractres String

T. CHAARI

POO : Java

Oprations de bases sur String

T. CHAARI

POO : Java

Variables de classe

T. CHAARI

POO : Java

Variables de classe

T. CHAARI

POO : Java

Constantes de classe

T. CHAARI

POO : Java

Variable et constantes de classe

T. CHAARI

POO : Java

Mthode de classe

T. CHAARI

POO : Java

Mthode de classe

T. CHAARI

POO : Java

Mthode de classe : erreur classique

T. CHAARI

POO : Java

Exercice
- Ecrire le code dune classe Division
qui offre deux mthodes diviser
La premire
dinstance

une

mthode

La deuxime est une mthode de


classe

T. CHAARI

est

Ecrire

le

code dune classe


TestDivision qui permet de tester les
deux mthodes diviser. Laquelle est

meilleure dans ce cas?

POO : Java

Solution (1/2)
Public class Division
{
private double a,b;
Division (double a, double b)
{ this.a=a; this.b=b;}

public double diviser ()


{return (this.a/this.b);}

T. CHAARI

public static double diviser (double a, double b)


{return (a/b);}
}

Solution (2/2)

POO : Java

Public class TestDivision {

T. CHAARI

Public static void main (String [] args) {


Division d1= new Division (7,7);
double resultat=d1.diviser();
System.out.println (resultat);
//1
double resultat=Division.diviser(7,7);
System.out.println (resultat);
//1
}
}

POO : Java

Chapitre

5
Programmation Oriente
Objet Avance Java

T. CHAARI

5- POO Avance Java


5.1 Composition de classes (1/4)
Principe :

POO : Java

La rutilisation par composition :

T. CHAARI

Quand une classe est teste et elle est oprationnelle on peut


lutiliser aussi en tant que nouveau type dans une autre classe.
Les attributs dune classe peuvent tre des instances
dautres classes.
Class Date
{
..
}
class Personne
{
private String nom;
private String prnom;
private Date naissance;
..
}

Classe String
Classe Date

Classe Personne

5- POO Avance Java


5.1 Composition de classes (2/4)

POO : Java

Classe Date :
class Date {
private int j;
private int m;
private int a;

// jour
// mois
// an

Date( )
{ j=1 ; m=1 ; a=1900 ; }
Date(int j, int m, int a)

{ this.j = j ; this.m = m ; this.a = a ; }


void initialise(int jour, int mois, int an)
{ this.j=jour; this.m=mois; this.a=an; }
void affiche( )
{ System.out.println(j + "/" + m + "/" + a) ; }
T. CHAARI

5- POO Avance Java


5.1 Composition de classes (3/4)
Classe Personne :

POO : Java

class Personne {
private String nom;
private String prnom;
private Date naissance;
Personne(String nom, String prnom, int jour, int mois, int an)
{
this.nom=nom;
this.prnom=prnom;
naissance=new Date(jours,mois,an);
}
void affiche()
{
System.out.println("Identit Personne : ");
System.out.println(nom+ " " +prnom);
naissance.affiche();
}

}
T. CHAARI

5- POO Avance Java


5.1 Composition de classes (4/4)
Classe ApplicationPersonne :
ApplicationPersonne est une classe de lancement.

POO : Java

Elle sert denveloppe la mthode main qui sert de


programme principal .
Rsultat daffichage

class ApplicationPersonne {

Identit Personne :
Jacques DUPONT
1/2/1947

public static void main(String args[ ])


{
Personne p = new Personne("Jacques", "DUPONT", 1,2,1947);
p.affiche();
}
}
T. CHAARI

5- POO Avance Java


5.2 Hritage (1/10)

POO : Java

Besoins : viter de dupliquer du code (attributs et mthodes)


dans diffrentes classes qui partagent des caractristiques
communes
faciliter les modifications futures

elles nont besoin dtre faites qu un seul endroit

T. CHAARI

5- POO Avance Java


5.2 Hritage (1/10)

POO : Java

Principe :
Lhritage permet de crer une sous catgorie dobjets partir
dune autre catgorie (classe) plus gnrale. Par exemple, Voiture
est une sous catgorie de Vehicule. Etudiant est une sous catgorie
de Personne.
Dans ce cas, on dit que la classe fille (Etudiant) est une extension
par hritage de sa classe mre (Personne).
La classe fille reprend toutes les caractristiques de sa classe mre et
y ajoute dautres plus spcifiques.
Par exemple, dans la classe Personne on trouve les attributs
nom et prnom.
La classe Etudiant ajoute numro dinscription en plus de nom
et prnom qui sont dj automatiquement repris par hritage de
la classe Personne.
T. CHAARI

5- POO Avance Java


5.2 Hritage (2/10)
En Java, une classe ne peut hriter que d'une seule classe.

POO : Java

Syntaxe :

class Hritire extends mre { ... }


class Etudiant extends Personne { ... }
Les classes drivent, par dfaut, de java.lang.Object.

T. CHAARI

Une rfrence d'une classe C peut contenir des instances


de C ou des classes drives de C.
Personne p = new Etudiant("Jean" , "Dupont", 203435);

5- POO Avance Java


5.2 Hritage (3/10)

POO : Java

Exemple :
Une classe mre Compteur , qui permet de crer
des compteurs classiques.
Dispose de mthodes dincrmentation et de dcrmentation.
class Compteur {
private int valeur ;
Compteur() { valeur = 0 ; }
void inc( ) {valeur ++ ; }
void dec( ) {valeur --; }
int vaut() { return valeur ; }
}
T. CHAARI

5- POO Avance Java


5.2 Hritage (4/10)

POO : Java

Exemple :
Une classe drive CompteurControl de la classe
mre Compteur permet de crer des compteurs
capables de contrler lincrmentation des compteurs
classiques.
class Compteur_Control extends Compteur
{

class Compteur {
private int valeur ;
Compteur() { valeur = 0 ; }
void inc( ) {valeur ++ ; }
void dec( ) {valeur --; }
int vaut() { return valeur ; }
}

T. CHAARI

private int maxval;


Compteur_Control (int maxval)
{
super();
// explication diapo 5/10
this.maxval = maxval;
}
void inc()
// Redfinition de la mthode inc
{
if( vaut( ) < maxval ) super.inc( ); // diapo 6/10
}
int get_maxval( ) { return maxval; }

5- POO Avance Java


5.2 Hritage (5/10)

POO : Java

Utilisation de super() :
Compteur_Control(int maxval)
{

super( );

this.maxval = maxval;
}

Le constructeur de Compteur_Control appelle le


constructeur de la classe Compteur laide de la
fonction super().
Lappel du constructeur de la classe mre doit tre la
premire instruction du constructeur de la classe
drive.

T. CHAARI

super() reprsente un appel au constructeur de la


classe mre.

5- POO Avance Java


5.2 Hritage (6/10)

POO : Java

Utilisation de super et masquage des donnes :


void inc()
{
if( vaut( ) < maxval ) super.inc(
}

);

Une partie du traitement de la mthode inc()


Compteur_Controle peut tre effectue par
mthode inc() de Compteur, cest pourquoi inc()
Compteur_Controle appelle inc() de Compteur
utilisant super.inc().

de
la
de
en

super dsigne linstance en cours de la classe mre.

La mthode inc() de la classe Compteur_Controle,


masque (remplace) la mthode inc() hrite de la
classe Compteur.
T. CHAARI

5- POO Avance Java


5.2 Hritage (7/10)
Exemple :

POO : Java

TestControle_Compteur, une classe de lancement.


class TestControle_Compteur {
{
public static void main(String args[])
{ Compteur_Controle c = new Compteur_Controle(6);
c.inc( );
// Premire incrmentation
c.inc( );
// Deuxime Incrmentation
System.out.println("valeur : "+c.vaut( ) );

}
T. CHAARI

c.dec( );
// Premire dcrmentation
c.dec( );
// Deuxime dcrmentation
System.out.println("valeur : "+c.vaut( ) );

5- POO Avance Java


5.2 Hritage (8/10)
Accs des attributs privs de la classe mre :

POO : Java

class Compteur {
}

private int valeur ;

classCompteur_Controle
Compteur_Controleextends
extends Compteur
Compteur
class
{{

..
..
voidinc()
inc()
void
{{
if(vaut(
valeur) << maxval
if(
maxval )) super.inc(
super.inc( ););
}}

}}

Lattribut valeur est dclar private.


seules les mthodes de la classe Compteur ont accs
lattribut valeur .
T. CHAARI

ncessit dutiliser la fonction daccs publique vaut().

5- POO Avance Java


5.2 Hritage (9/10)
Accs des attributs privs de la classe mre :

POO : Java

class Compteur {
}

protected int valeur ;

class Compteur_Controle extends Compteur


{

void inc()
{
if( valeur < maxval ) super.inc( );
}

Lattribut valeur est dclar protected.

T. CHAARI

Lattribut valeur est hrit par la classe


Compteur_Controle et il est donc accessible par cette
classe.

5- POO Avance Java


5.2 Hritage (10/10)

POO : Java

Hritage et conversion : utilisation de instanceof


Compteur c1 = new Compteur( );
Compteur_Controle c2 = new Compteur_Controle(1000);
int maximum = c1. get_maxval( ) ; // Erreur
System.out.println((c1 instanceof Compteur_Controle)); // false
System.out.println((c1 instanceof Compteur)); // true
System.out.println((c2 instanceof Compteur_Controle)); // true
System.out.println((c2 instanceof Compteur )); // true
c1 = c2;
System.out.println((c1 instanceOf Compteur_Controle)); // true
System.out.println((c1 instanceOf Compteur)); // true
T. CHAARI

c2 = c1; // Erreur

5- POO Avance Java


5.2 Hritage

POO : Java

Exercice:

Est-ce quon peut dfinir une relation dhritage entre les


classes Animal et Lion?

Est-ce quon peut dfinir une relation dhritage entre les


classes Point et Cercle?

Est-ce quon peut dfinir une relation dhritage entre les


classes Point et PointAvecNom?

T. CHAARI

5- POO Avance Java


5.5 Les classes abstraites (1/3)

POO : Java

Contexte: quel est le problme?

Dans

certains

(mthodes)

dune

cas,

certains

classe

ne

comportements

peuvent

tre

compltements dfinis

Exemple:

essayez dcrire le code de la mthode

primtre de la classe FormeGeometrique

Cause: le code est encore flou (abstrait)


Solution: dvelopper des classes abstraites
T. CHAARI

pas

5- POO Avance Java


5.5 Les classes abstraites (2/3)

POO : Java

Une classe abstraite sert mettre en facteur des attributs


et des mthodes pour des classes drives concrtes.
Une classe abstraite est introduite par le mot cl
abstract et elle a au moins une mthode abstraite.
Une mthode abstraite est dclare par le mot cl abstract,
elle na pas de corps.
Une classe abstraite ne peut pas tre instancie (new).
Si une classe drive dune classe abstraite ne redfinit pas
toutes les mthodes abstraites alors elle est aussi
abstraite.

T. CHAARI

Pour utiliser une classe abstraite on doit dfinir une classe


hritire qui fournit les ralisations des mthodes
abstraites de la classe abstraite.

5- POO Avance Java


5.5 Les classes abstraites (3/3)

POO : Java

Exemple :
class abstract FormeEuclidienne
{
public abstract double perimetre();
}
class Cercle extends FormeEuclidienne
{
...
public double perimetre() { return 2 * Math.PI * r ; }
}
class Rectangle extends FormeEuclidienne
{ ...
public double perimetre() { return 2 * (height + width); }
}
T. CHAARI

5- POO Avance Java


5.6 Polymorphisme

POO : Java

Exemple :
- Chaque case du tableau peut avoir diffrentes formes
possibles polymorphisme
FormeEuclidienne[ ] formes = { new Circle(2),
new Rectangle(2,3),
..
};

Lavantage du polymorphisme est de pouvoir dfinir un code


gnrique (applicable sur tous les cas particuliers)
double somme_perimetres = 0;
for (int i = 0; i < formes.length; i++)

T. CHAARI

somme_perimetres += formes[i].perimetre( );

5- POO Avance Java


5.7 les Interfaces (1/6)

POO : Java

Principe de linterface :
Une interface est introduite par le mot cl interface,
et se comporte comme une classe dont toutes les
mthodes sont abstract et dont tous les attributs sont
final.
Les mots cls final et abstract napparaissent pas dans
la dfinition dune interface.
Une interface est un moyen de prciser les services
qu'une classe peut rendre. Cest un modle
d'implmentation.

Une interface est inutilisable en elle-mme.

T. CHAARI

Une classe doit implmenter linterface, cest dire


dfinir les corps des mthodes abstraites de linterface.

5- POO Avance Java


5.7 les Interfaces (2/6)

POO : Java

Une interface est utilise lorsque nous avons seulement


besoin de savoir quune classe doit avoir les mthodes
dclares dans linterface, exemple :
On peut imaginer une interface appareilElectrique qui
dfinit
les
mthodes
estEnclenche()
et
alimente(boolean).

Si une classe implmente l'interface appareilElectrique,


on sait donc qu'elle possde au moins ces deux
mthodes, qu'il s'agisse d'une radio, d'une lampe ou
d'un autre appareil.
Lorsque l'on dsire indiquer un appareil qu'il est
aliment, on excute app.alimente(true), et pour lui
indiquer qu'il
a t dbranch,
on excute
app.alimente(false).

T. CHAARI

5- POO Avance Java


5.7 les Interfaces (3/6)
Exemple dinterface :

POO : Java

Appareil_Electrique

public interface Appareil_Electrique


{
/** teste si l'appareil est enclench */
public boolean estEnclenche( );
/** on appelle cette methode lorsque l'on branche l'appareil
dans une source de courant active avec true, ou false si la
source est inactive */
public void alimente(boolean alim);
}

T. CHAARI

5- POO Avance Java


5.7 les Interfaces (4/6)
Exemple dutilisation de linterface Appareil_Electrique.

POO : Java

classe Radio.

T. CHAARI

class Radio implements Appareil_Electrique


{
final static int FREQ_INIT= 1007; // 100.7 MHz
int freq;
boolean allumee = false;
public boolean estEnclenche() { return allumee; }
public void alimente(boolean a)
{
allumee = a;
if (allumee) freq = FREQ_INIT;
}
public boolean changeFreq(int freq)
{
if (allumee == true) { this.freq = freq; return allumee; }
return false;
}

5- POO Avance Java


5.7 Interfaces (5/6)

POO : Java

Le mot cl implements indique que la classe Radio doit


forcment donner une dfinition prcise pour les mthodes
spcifies dans linterface.
Une classe peut implmenter plusieurs interfaces.
Elle doit dans ce cas fournir des dfinitions pour toutes
les mthodes spcifies dans linterface.
interface Truc
{
void e( );
}

interface
Bidule
{
void f( );
}

class Machin implements Truc, Bidule


{
void e( ) {- - -; }
void f( ) {- - -; }
}

Plusieurs classes diffrentes peuvent implmenter de


manires diffrentes une mme interface.
T. CHAARI

Plusieurs
ralisations
possibles
spcification (polymorphisme).

dune

mme

5- POO Avance Java


5.7 les Interfaces (6/6)

POO : Java

Rles des interfaces :

T. CHAARI

Conceptuel : factoriser un comportement commun entre


plusieurs classes diffrentes. Ce comportement est
reprsent par un ensemble de mthodes.

- Exemple 1 : interface Dessinable qui contient la


mthode dessiner (factorise entre tous les objets
dessinables (Cercle, Maison)
- Exemple 2 : interface Deplaable qui contient la
mthode dplacer (factorise entre tous les objets
quon peut dplacer (Voiture, Personne)
Technique : obliger le dveloppeur implmenter toutes
les mthodes dfinies dans linterface. Ainsi, il doit
respecter la signature de ces mthodes utile pour la
programmation plusieurs. Ex : affich, affiche(),
afficher()

POO : Java
T. CHAARI

Exercice

Lhritage - Hirarchie
POO : Java

Soit lhirarchie suivante:

T. CHAARI

FormeGraphique

FormeEuclidienne

Ellipse

Trapeze

Cercle

Rectangle

Carre

Exercice
Ecrire le code des classes suivantes:
POO : Java

linterface Affichable qui contient une mthode afficher()


FormeEuclidienne qui implmente linterface Affichable
et qui contient les mthodes double perimetre() et
double surface()
Ellipse et Trapeze
FormeEuclidienne

qui

hritent

de

la

classe

Cercle qui hrite de Ellipse


Rectangle qui hrite de Trapze
Carre qui hrite de Rectangle
GestionFormes qui contient les mthodes statiques:

void afficheSurfaces(FormeEuclidienne [] tab) permettant dafficher la


surface des formes du tableau tab en utilisant la mthode surface

void afficheTout(Affichable[] tab) permettant dafficher les lments du


tableau tab

main qui permet de tester les mthodes prcdentes

T. CHAARI

Indications

POO : Java

Perimetre Ellipse = (axe1+axe2) * Math.PI

T. CHAARI

Surface Ellipse = axe1 * axe2 * Math.PI

Perimetre Trapeze = base1 + base2 + cote1 +


cote2
Surface Trapeze = (base1+base2) * hauteur/2