Vous êtes sur la page 1sur 125

Programmation oriente objet

2e anne

Sabeur ELKOSANTINI
Sabeur.Elkosantini@isima.rnu.tn

A. U. : 10-11

S. Elkosantini

Bibliographie

Livres

Michel Divay , Java et la programmation oriente objet , Dunod eds, 2006.


Renaud Pawlak , Jean-Philippe Retaill , Lionel Seinturier, Programmation
oriente aspect pour Java / J2EE , Eyrolles eds, 2004.

Bruce Eckel, Thinking in Java , 2nd revision, 2000 (Disponible sur internet).

Autres supports de cours

Cours de Jean-Michel DOUDOUX :


http://www.jmdoudoux.fr/java/dej/

Cours de Mickal BARON :


http://mbaron.ftp-developpez.com/javase/java.pdf

A. U. : 10-11

S. Elkosantini

Plan

Chapitre 1 : Introduction
Chapitre 2 : Le concept dobjets
Chapitre 3 : POO avec C++
Chapitre 4 : et avec Java

A. U. : 10-11

S. Elkosantini

Plan

Chapitre 1 : Introduction
Chapitre 2 : Le concept dobjets
Chapitre 3 : POO avec C++
Chapitre 4 : et avec Java

A. U. : 10-11

S. Elkosantini

Introduction

Historique de la POO

Les annes 60 : le langage Simula-67, langage de simulation informatique

Les annes 70 : SmallTalk , apparition des concepts de base :

Les premiers pas de la programmation oriente objet

objet, encapsulation, polymorphisme, hritage , etc.

Les annes 80 : La Monte en puissance de lorient objet

Apparition de nouveaux langages : Objective C ,C++, Eiffel, Common Lisp Object


System

A. U. : 10-11

S. Elkosantini

Introduction

Historique de la POO

Les annes 90 : lge d'or de l'extension de la POO :

Standardisation de C++

Apparition du langage de programmation Java

Depuis, volution de loriente objet:

9
9
9

Analyse par objet (AOO).


La conception oriente objet COO
Les bases de donnes orientes objets (SGBDOO)

A. U. : 10-11

S. Elkosantini

Introduction

Programmation procdurale Vs Programmation OO

Programmation procdurale (C, Cobol, Fortran, Pascal, etc.) :

Programmes structurs en procdures et fonctions,

Des problmes en cas de modification de la structures des donnes,

Chaque fonction ou procdure rsout une partie du problme,

Programmation OO (Java, C++, C#, Delphi, etc.):

Unit logique : objet,

Programmation par composants ,

Facilit de lvolution du code,

Amliorer la conception et la maintenance des grands systmes,

A. U. : 10-11

S. Elkosantini

Introduction

Programmation par Objets ?

Unit logique : lobjet

Objet est dfini par :

Une identit : permet de distinguer un objet dun autre objet.


Un tat : reprsent par des attributs (variables) qui stockent des
valeurs.

Un comportement : dfini par des mthodes (procdures) qui


modifient des tats.

Moto
Couleur : noir
Vitesse : 150 Km/h
Acclrer
Freiner

A. U. : 10-11

S. Elkosantini

Introduction

Les langages de programmation

A. U. : 10-11

S. Elkosantini

Introduction

Le langage de programmation C++

Dvelopp dans les laboratoires dAT&T Bell au dbut des annes 1980 par
Bjarne Stroustrup.

C++ est un langage (hybride) : typage fort, compil et orient objet


C++ = C + typage fort + objets

Un langage hybride ?!
Un langage typage
fort ?!

U n langage compil ?!
Objets ??

Quelles diffrences avec C ??


A. U. : 10-11

S. Elkosantini

10

Plan

Chapitre 1 : Introduction
Chapitre 2 : Le concept dobjets
Chapitre 3 : POO avec C++
Chapitre 4 : et avec Java

A. U. : 10-11

S. Elkosantini

11

Le concept dobjets

Notion dobjet

Un objet est dfini la fois par des informations : donnes ou attributs ou


variables dinstances ; et des comportements : traitements ou mthodes ou
oprations.
Moto
Couleur
Vitesse_limite
Acclrer
Freiner

Objet Moto

A. U. : 10-11

S. Elkosantini

12

Le concept dobjets

Notion de classe

Lorsque des objets ont les mmes attributs et comportements : ils sont regroups
dans une famille appele : Classe

Les objets appartenant celle-ci sont les instances de cette classe.


Linstanciation est la cration dun objet dune classe.

A. U. : 10-11

Moto

Moto

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

S. Elkosantini

13

Le concept dobjets

Classe, objet et instanciation


Moto

..

Deux instances dune mme classe


peuvent avoir des attributs avec des
valeurs diffrentes et mais partagent
les mmes mthodes.

Couleur
Vitesse_limite
Acclrer
Freiner

.
Moto : Kawasaki

Moto : Yamaha

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

.
A. U. : 10-11

S. Elkosantini

14

Le concept dobjets

Classe, objet et instanciation


Comment les objets communiquentils ?
Fentre_principale

Fentre_secondaire

Par ..

Un quivaut un appel dune mthode.

A. U. : 10-11

S. Elkosantini

15

Le concept dobjets

Lencapsulation et la visibilit des attributs

De point de vue utilisation, un objet est une boite noire qui offre un certain
nombre de mthodes permettant dinteragir avec lui.

Peu importe comment il est construit en interne, la seule chose ncessaire pour
pouvoir utiliser un objet est de savoir ce quil peut faire et surtout comment lui
demander :

Exemple :un poste de TV est une boite noire ayant pour interface : un cran, des
HP et une tlcommande. Pour changer de chaine, il suffit de
.Peu importe ce qui se passe rellement en interne.

A. U. : 10-11

S. Elkosantini

16

Le concept dobjets

Lencapsulation et la visibilit des attributs

Lensemble des mthodes proposes par un objet est appel linterface de cet
objet.

On dit quun objet est encapsul par son interface : la seule manire dinteragir
avec cet objet est dinvoquer une mthodes de son interface. Peu importe de quoi
cet objet est rellement constitu, ce qui est important cest les services (les
mthodes) quil peut fournir.
Interface
Objet

A. U. : 10-11

S. Elkosantini

17

Le concept dobjets

Lencapsulation et la visibilit des attributs

Lencapsulation est un mcanisme consistant rassembler les donnes et les


mthodes au sein d'une structure en cachant l'implmentation de l'objet :

Empcher l'accs aux donnes par un autre moyen que les services proposs.

Garantir l'intgrit des donnes contenues dans l'objet .

Compte_Bancaire
Attributs privs

Mthodes publiques
A. U. : 10-11

S. Elkosantini

- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

18

Le concept dobjets

Lencapsulation et la visibilit des attributs

Il existe trois niveaux de visibilit :

Publique : veut dire que les attributs ou les mthodes sont disponibles pour tout le
monde

Priv : veut dire quaucune autre classe ne peut accder au contenu de lattribut et
limplmentation de la mthode concern,

Protg : l'accs aux donnes est rserv aux fonctions des classes hritires, c'est-dire par les fonctions membres de la classe ainsi que des classes drives.

A. U. : 10-11

S. Elkosantini

19

Le concept dobjets

Les mthodes dune classes

On distingue trois types de mthodes dans une classe:

Les constructeurs qui permettent dinitialiser les champs dun objet

Un constructeur est une mthode


particulire, sans valeur de retour, portant
le mme nom que la classe
Dclaration :

A. U. : 10-11

Moto :: Moto (string nouvelle_couleur){


Couleur= nouvelle_couleur;
}

S. Elkosantini

20

Le concept dobjets

Les mthodes dune classes

Une classe peut avoir plusieurs constructeurs ou aucun :

Dans ce dernier cas, C++ fournit un constructeur par dfaut: cest--dire un


constructeur sans arguments et initialise chaque champs par la valeur par dfaut nulle

Dclaration :

Moto :: Moto (){


// constructeur cre par dfaut
}

Ds quune classe possde au moins un constructeur, le constructeur par dfaut


ne sera pas disponible sauf si la classe possde un constructeur sans arguments

A. U. : 10-11

S. Elkosantini

21

Le concept dobjets

Les mthodes dune classes

Les mthodes get et set utiliss en cas de protection des attributs:

Les mthodes daccs qui permettent de renvoyer les informations relatives un objet

Dclaration : int Moto :: get_vitesse(){


return vitesse;
}

Les mthodes daltration qui modifient ltat dun objet (les valeurs de certains
champs), donc elles comportent certains contrlent pour valider les nouvelles
valeurs.

Dclaration :

A. U. : 10-11

int Moto :: set_vitesse (int nouvelle_vitesse){


vitesse = nouvelle_vitesse;
}
S. Elkosantini

22

Le concept dobjets

Les mthodes dune classes

Le constructeur : c'est une mthode qui est appele automatiquement chaque


fois que l'on cre un objet bas sur cette classe.

Le destructeur : c'est une mthode qui est automatiquement appele lorsqu'un


objet est dtruit, par exemple la fin de la fonction dans laquelle il a t dclar
ou lors d'un delete si l'objet a t allou dynamiquement avec new.

Le destructeur libre la zone mmoire alloue par le constructeur. Il sexcute


la fin du programme ou d'un bloc o des objets locaux ont dfinis.

A. U. : 10-11

S. Elkosantini

23

Le concept dobjets

Les mthodes et les classes amies

Une mthode est amie d'une classe si elle peut accder directement toutes
les donnes prives de cette classe.

Une classe est amie d'une autre classe si toutes ses fonctions lui sont amies.

La dclaration d'amiti doit se faire dans la classe qui autorise les accs ses
donnes prives.

A. U. : 10-11

S. Elkosantini

24

Le concept dobjets

Les mthodes et les classes amies


Dclaration :

class A
{ friend void Methode1 ();
friend class C;
...
}

La mthode Methode1 peut accder aux donnes prives de A.

Toutes les mthodes de la classe C peuvent accder aux donnes privs de


la classe A.

A. U. : 10-11

S. Elkosantini

25

Le concept dobjets

La surcharge des mthodes

Redfinir une mthode dj existante dans la classe.

La modification de la mthode porte sur :

Le type de retour de la mthode

Le nombre de paramtres de la mthode et leur type.

Quand une mthode surcharge est invoque le compilateur


slectionne automatiquement la mthode dont le nombre est le type des
arguments correspondent au nombre et au type des paramtres passs
dans lappel de la mthode

A. U. : 10-11

S. Elkosantini

26

Le concept dobjets

La surcharge des mthodes

Exemple de surcharge : la surcharge de constructeurs


Dclaration : Moto :: Moto (int v){
vitesse = v;
}
Moto ::
Moto (int v; string c){
vitesse = v;
Couleur= c;
}
Moto :: Moto (string c){
Couleur= c;
}

A. U. : 10-11

S. Elkosantini

27

Le concept dobjets

Lhritage

L'hritage est un mcanisme qui facilite la rutilisation du code et la gestion de


son volution. Elle dfinit une relation entre deux classes :

Une classe mre ou super classe

Une classe fille ou sous classe qui hrite de sa classe mre

les objets d'une classe fille ont accs aux donnes et aux mthodes de la classe parent et
peuvent les tendre.

Les sous classes peuvent redfinir les variables et les mthodes hrites.

Les mthodes des clases filles sont redfinies avec le mme nom, les mmes types et le
mme nombre d'arguments

A. U. : 10-11

S. Elkosantini

28

Le concept dobjets

Lhritage

A. U. : 10-11

la classe Etudiant :
no m
capital UV
d ipl m e

la classe Etudiant-Elu :
no m
capital UV
d ipl m e
Mandat
Syndicat

VrifierNo m
MajUV
ChangerDipl m e

VrifierNo m
MajUV
ChangerDipl me
DmissionnerMandat
ChangerSyndicat

S. Elkosantini

29

Le concept dobjets

Lhritage
Lobjet Etudiant-Elu a les proprits (attributs et mthodes) de lobjet
Etudiant mais en plus possde dautres proprits.

La classe Etudiant-Elu est une spcialisation de la classe Etudiant. Cest une


sous classe de la classe Etudiant.

Les objets de la sous classe Etudiant-Elu hritent des attributs et des


mthodes de la classe Etudiant. La sous classe Etudiant-Elu pourra, si cela
est ncessaire pour ses besoins, redfinir une mthode hrite.

A. U. : 10-11

S. Elkosantini

30

Le concept dobjets

Lhritage
Chaque sous classe peut avoir une ou plusieurs sous classes formant ainsi
une hirarchie dobjet. On parle de classe anctre (ou mre) et de classes
descendant (ou fille).

Forme

Rectangle

Triangle

Cercle

Lhritage est un mcanisme qui permet dassurer une grande variabilit


dans la rutilisation des objets. Il existe deux techniques lies lhritage : les
classes abstraites et lhritage multiple.

A. U. : 10-11

S. Elkosantini

31

Le concept dobjets

Lhritage
Autre exemple : les formes gomtrique (utiliser dans les systmes daide
la conception des jeux vido)

Forme

Le type de base est la forme gomtrique

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

La classe drive est du mme type que la classe de base.


Les objets de la classe drive n'ont pas
seulement le mme type, ils ont aussi le
mme comportement, ce qui n'est pas
particulirement intressant
A. U. : 10-11

S. Elkosantini

Carre

Triangle

Cercle

32

Le concept dobjets

Lhritage
Pour diffrentier une classe drive dune classe parent :

ajouter dautres mthodes dans les classes drives: la classe de base n'tait pas
assez complte

Forme

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Il faut vrifier s'il ne faut pas


intgrer ces fonctions dans la classe
de base qui pourrait aussi en avoir
l'usage
Carre

A. U. : 10-11

S. Elkosantini

Triangle

RetournerHor()
RetournerVer()

Cercle

33

Le concept dobjets

Lhritage
Pour diffrentier une classe drive dune classe parent :

Redfinir autrement le comportement des classes drives. Cest--dire ..

Forme

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

il suffit de crer une nouvelle


dfinition pour la fonction
dans la classe drive
Carre

dessiner()
effacer()
A. U. : 10-11

S. Elkosantini

Triangle
dessiner()
effacer()

Cercle

dessiner()
effacer()
34

Le concept dobjets

Lhritage multiple
Certains langages orients objet, tels que le C++, permettent de faire de
l'hritage multiple.

Faire hriter une classe de deux superclasses.

Regrouper au sein d'une seule et mme classe les attributs et mthodes de


plusieurs classes.
Herbivore

Carnivore

Omnivore

A. U. : 10-11

S. Elkosantini

35

Plan

Chapitre 1 : Introduction
Chapitre 2 : Le concept dobjets
Chapitre 3 : POO avec C++
Chapitre 4 : et avec Java

A. U. : 10-11

S. Elkosantini

36

POO avec C++

Spcificits de C++

Fonction sans argument :

En C++ : float sansarg();

En C : float sansarg(void);

Une fonction qui ne retourne rien en C++ :

A. U. : 10-11

void sansretour(int x);

S. Elkosantini

37

POO avec C++

Spcificits de C++

Expression constante (expression dont la valeur peut tre


calcule la compilation) :

En C++, le compilateur sait valuer :


const int MAX = 100;
double tab1[2*MAX+1], tab2[2*MAX+1][MAX];

En C, en gnral. On doit utiliser #define :


#define MAX 100
double tab1[2*MAX+1], tab2[2*MAX+1][MAX];

A. U. : 10-11

S. Elkosantini

38

POO avec C++

Spcificits de C++

En C, les commentaires sont entre /* et */ ;

En C++, on ajoute celle-ci les commentaires de fin de ligne


qui dmarrent par // et vont jusqu'a la n de ligne.

A. U. : 10-11

S. Elkosantini

39

POO avec C++

Spcificits de C++

En C, obligation de regrouper toutes les dclarations au dbut


du programme.

En C++, ce n'est plus obligatoire. Elles peuvent apparatre


n'importe o, avant dtre utilise.
void main()
{ int i;
i=3;
...
int q=3*i;
...
for (int j=0; j<q; j++) ...
}

A. U. : 10-11

S. Elkosantini

40

POO avec C++

Spcificits de C++

Gestion simplie des fonctions d'entres/sortie grce 2


nouvelles fonctions : cin et cout

Exemple : cin >> x;

En saisie, cin
En affichage, cout

Exemple :
cout << "coucou";
cout << "voici le nombre : " << x << endl;

A. U. : 10-11

S. Elkosantini

41

POO avec C++

Remarques :

Les anciennes fonctions sont toujours utilisables;

Loprateur de rfrence & nest pas ncessaire pour la saisie;

Un processus de vrification automatique de type permet de


saffranchir des multiples formats de type trs utiliss en C.

A. U. : 10-11

S. Elkosantini

42

POO avec C++

Du nouveaux ?

Nouvelle forme de commentaire

Libert dans l'emplacement des dclarations ;

Surcharge de fonction ;

Allocation dynamique par les oprateurs new et delete ;

Notions OO;

A. U. : 10-11

S. Elkosantini

43

POO avec C++

Les objets et les classes en C++

Moto
Couleur
Vitesse_limite

Acclrer
Freiner

Limplmentation de cette classe en C++ (avec les headers)

A. U. : 10-11

S. Elkosantini

44

POO avec C++

Les objets et les classes en C++

Moto
Couleur
Vitesse_limite

Acclrer
Freiner

Limplmentation de cette classe en C++ (sans les headers)

A. U. : 10-11

S. Elkosantini

45

POO avec C++

La visibilit des variables et des attributs

class Moto {
int Vitesse_actuelle;
int Age;
int Prix;

};
Moto:: Moto(int age; int Vitesse_Initiale , int prix_I) :
Vitesse_actuelle(Vitesse_Initiale), Age (age), Prix(prix_I)
{ }
void Moto:: Accelerer(int v)
{
Vitesse_actuelle += v;
}
int Moto:: valeur(){
int amortissement;
amortissement = 0.05;
return Prix Prix * amortissement * age;
}
A. U. : 10-11

S. Elkosantini

Des remarques ??

46

POO avec C++

et le constructeur en C++
Chaque appel un constructeur cre un nouvel objet (instance) qui obit au
patron dfini par la classe :

linstance cre aura les attributs et le comportement dfinis dans la classe.

rservation dun espace mmoire pour la mmorisation de ltat.

Le constructeur est gnralement loccasion dinitialiser les attributs (


personnaliser ltat de linstance).

Il peut y avoir plusieurs constructeurs pour une mme classe.

A. U. : 10-11

Plusieurs initialisations possibles.

S. Elkosantini

47

POO avec C++

et le constructeur en C++

Statique

La construction en C++:
Classe + variable + (valeurs)
Cest le constructeur
Produit p1 ( Portable , 1) ;
Produit p2 () ;
Comment programmer
la classe Produit ??

A. U. : 10-11

S. Elkosantini

48

POO avec C++

et le constructeur en C++

Dynamique

La construction en C++:
Classe + * variable = new Classe (valeurs)
Cest le constructeur
Produit * p1 = new Produit ( Portable , 1) ;
Produit p2 = new Produit () ;
Comment programmer
la classe Produit ??

A. U. : 10-11

S. Elkosantini

49

POO avec C++

Linstanciation
Moto
Couleur
Vitesse_limite
Acclrer
Freiner

Moto : Kawasaki

Moto : Yamaha

Couleur : noir
Vitesse_limite : 200

Couleur : rouge
Vitesse_limite : 250

Acclrer
Freiner

Acclrer
Freiner

A. U. : 10-11

S. Elkosantini

50

POO avec C++

Le cycle de vie dun objet


La cration dun objet ou, autrement dit, ..
Objet obj ;

obj

NULL

Cette opration dclare uniquement le nom


et le type de lobjet. Les attributs et les
mthodes ne sont pas encore crer.

A. U. : 10-11

S. Elkosantini

51

POO avec C++

Le cycle de vie dun objet


La cration dun objet ou, autrement dit, ..
Objet obj ;

obj

Objet obj () ;
obj

NULL

Attribut 1
Attribut 2

Mthode 1

Cest ce moment que lallocation mmoire


est ralise

A. U. : 10-11

S. Elkosantini

52

POO avec C++

Les objets, les classes et linstanciation en C++


Accs aux attributs et mthodes dun objet partir dun autre objet .
Nomobjet.Nommethode() ;
Nomobjet.NomAttribut;

Lenvoi de messages entre objets :


.
Il ne faut pas oubli les paramtres dans les
messages

Les cascades sont possibles : Magasin.produit.nom

A. U. : 10-11

S. Elkosantini

53

POO avec C++

Les objets, les classes et linstanciation en C++


Dans le traitement de lune de ses mthodes, un objet peut avoir senvoyer
un message (pour accder un de ses attributs ou invoquer une des ses
mthodes).

Utilisation de lauto-rfrence, en C++: this.

Exemple : on se place dans une mthode de la classe Moto :

Lors du traitement, lobjet appelant la mthode est une instance de la classe


Moto.

this->Freiner()

A. U. : 10-11

signifie

envoyer this (= moi-mme) le message


Freiner()

S. Elkosantini

54

POO avec C++

Les objets, les classes et linstanciation en C++

Lappel lobjet courant : utilisation du mot cl this


this->methode() ;
this->attribut;

Exemple dutilisation
void Moto::acc()
{
..
}
void Moto::acc2()
{
.
}

A. U. : 10-11

S. Elkosantini

55

POO avec C++

Les objets, les classes et linstanciation en C++


Si pas dambigut, le mot cl this peut tre oubli :
this->Freiner () ;
this->Prix;

Freiner();
Prix;

Exercice 5 :
Ecrire une classe Livre, caractrise par les attributs titre, auteur et anne et par les
mthodes suivantes :
- Une mthode affichant les caractristiques dun livre
- Une mthode qui prend en paramtre un livre et qui permet dafficher les deux
livres et de le comparer le nom du livre pass en paramtre.

A. U. : 10-11

S. Elkosantini

56

POO avec C++

Les objets, les classes et linstanciation en C++

Exercice 6 :
Crer une classe Segment qui est dfinie par ses extrmits (des points) et par sa
couleur. Avec cette classe, on peut calculer la longueur dun segment, le dplacer
et changer sa couleur.

A. U. : 10-11

S. Elkosantini

57

POO avec C++

Les mthodes et classes amies


friends type_de_retour nom_methode(parametres);

La mthode est amie la classe concerne


friends class A;

La classe A est amie la classe concerne

Exemple :

A. U. : 10-11

S. Elkosantini

58

POO avec C++

La surcharge

La surcharge de mthodes : un mcanisme donnant la possibilit d'appeler


plusieurs mthodes avec le mme nom.
Des mthodes surcharges peuvent avoir des types de retour
diffrents condition quelles aient des arguments diffrents.

Exemple : la surcharge de
la mthode somme

int Calcul::somme( int p1, int p2){


return (p1 + p2); }
float Calcul:: somme( float p1, float p2){
return (p1 + p2); }
float Calcul:: somme( float p1, float p2, float p3){
return (p1 + p2 + p3); }
int Calcul:: somme( float p1, int p2){
return (int(p1) + p2); }

A. U. : 10-11

S. Elkosantini

59

POO avec C++

La surcharge

Exercice 7:
1. Crez une classe avec un constructeur qui imprime un message.
2. Ajoutez cette classe un constructeur surcharg qui prend un string en argument et
qui l'imprime avec votre message.
3. Crez, dans le programme principale, deux instances de cette objet pour tester les
deux constructeurs.

A. U. : 10-11

S. Elkosantini

60

POO avec C++

La surcharge doprateurs
En C++, il y a la possibilit de redfinir le comportement de certains
oprateurs mathmatique ou logique: == , +=, +, - , &, etc.

Il suffit dajouter une mthode spcifique :

class Moto
{

bool operator+ (const Moto& m) ;


};
bool Moto::operator+ (const Moto& m)
{
couleur += m.couleur;
vitesse += m.vitesse
}

A. U. : 10-11

void main()
{
.
Moto m, m1, m2;
m=m1+m2;
.
}

S. Elkosantini

61

POO avec C++

La surcharge doprateurs

Ou ,autrement, en utilisant une mthode amie deux paramtres :

class Moto
{

friend bool operator + (const Moto& m1, const Moto& m1 ) ;


};
bool Moto::operator + (const Moto& m1, const Moto& m1)
{
m1.couleur += m2.couleur;
m1.vitesse +=m2.vitesse
}

A. U. : 10-11

S. Elkosantini

void main()
{
.
Moto m, m1, m2;
m=m1+m2;
.
}

62

POO avec C++

La surcharge doprateurs

Ou ,autrement, lextrieur de la classe :

class Moto
{

};
bool Moto::operator + (const Moto& m1, const Moto& m1)
{
m1.couleur += m2.couleur;
m1.vitesse +=m2.vitesse
}

A. U. : 10-11

S. Elkosantini

void main()
{
.
Moto m, m1, m2;
m=m1+m2;
.
}

63

POO avec C++

La manipulation des objets


Laffectation et la comparaison :
Objet a ();
Objet b ();
a=b;

A. U. : 10-11

Quel est la diffrence entre les deux


instances a et b ?

S. Elkosantini

64

POO avec C++

La manipulation des objets


Laffectation et la comparaison :
Objet a ();
Objet ();
boolean rep = (a == b) ;

Que signifie cette comparaison ?

Vrifier si les deux objets ont la mme rfrence.

A. U. : 10-11

S. Elkosantini

65

POO avec C++

La manipulation des objets


Quel est le rsultat de linstruction
BMW==Mercedes ?
Laffectation et la comparaison :
Voiture : BMW

Voiture : Mercedes

Puissance : 9
Couleur: noir

Puissance: 9
Couleur : noir

Acclrer
Freiner

Acclrer
Freiner

Les deux objets ont les mmes valeurs dattributs mais la rfrence est diffrente.

A. U. : 10-11

S. Elkosantini

66

POO avec C++

La destruction des objets


Le destructeur de classe consiste en une mthode qui sera appele lors de
toute destruction d'un objet.

Peut-on surcharger un destructeur ?

Est-ce quun destructeur peut prendre des paramtres ? non

Doit-on appeler un destructeur ? non

Et si lobjet est cre dynamiquement avec new ?

A. U. : 10-11

non.

S. Elkosantini

67

POO avec C++

La destruction des objets


#include <iostream>
using namespace std;
class A {
public:
A() {
cout << "Constructeur de A.";
}
~A()
{
cout << "Destructeur de A";
}
};
int main() {
A * a = new A;
delete a;
}

A. U. : 10-11

// ..
//

S. Elkosantini

68

POO avec C++

Encapsulation en C++
Il existe trois niveaux de visibilit :

Priv : en C++, private

publique: en C++, public

protg: en C++, protected

public :
string var1;
int methode1();
protected :
char var2;
void methode2();
A. U. : 10-11

Compte_Bancaire
- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

private :
int var3;
void methode3();

S. Elkosantini

69

POO avec C++

Encapsulation en C++
Lide de restreindre la visibilit des mthodes et des attributs :

Rendre priv les attributs caractrisant ltat de lobjet et de fournir des mthodes
publiques permettant de modifier/accder lattributs.

Des getters et des setters


Attribut Montant :

A. U. : 10-11

getMontant () : le getter
setMontant () : le setter

S. Elkosantini

70

POO avec C++

Encapsulation en C++
Exemple : Application pour la gestion des comptes en banques.

La classe Banque ayant comme attribut solde.

Dans un premier temps, lattribut est dclar comme publique.

Quel est linconvnient dun tel


programme ?

Quelle amlioration proposez-vous ?

A. U. : 10-11

S. Elkosantini

71

POO avec C++

Encapsulation en C++

+ Compte_Bancaire
- Num_RIB
- Nom
- Montant
+ Crditer()
+ Dbiter()

Implmenter cette
classe en C++

A. U. : 10-11

S. Elkosantini

72

POO avec C++

Le mot cl static

Aucune mthodes ni attributs nest accessible avant linstanciation de la


classe en utilisant le mot cl .

La zone mmoire nest pas encore alloue.

Les mthodes et les attributs sont alors


associs lobjet et non la classe.

et si on veut que la donne ou la mthode n'est pas spcifiquement


rattache un objet instance dune classe ?
Utilisation du mot cl static

A. U. : 10-11

S. Elkosantini

73

POO avec C++

Le mot cl static
class StaticTest {
static int i = 47;
}

Et dans une autre classe:


StaticTest st1 = new StaticTest();
StaticTest st2 = new StaticTest();

Comment incrmenter lattribut i ?

A. U. : 10-11

S. Elkosantini

74

POO avec C++

Forme

Lhritage
Rectangle

Triangle

Cercle

En C++, en utilisant les deux points :


class Forme
{
// .
};

Et le mot cl protected ?

class Rectangle :Forme


{
// .
};
class Triangle :Forme
{
// .
} ;
A. U. : 10-11

S. Elkosantini

75

POO avec C++

Forme

Lhritage

Limplmentation en C++de la classe Triangle

Carre

A. U. : 10-11

S. Elkosantini

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Triangle

RetournerHor()
RetournerVer()

Cercle

76

POO avec C++

Lhritage et amiti:
Pas dhritage au niveau des dclarations
damiti.

class A {
friend class Base;
public:
A() { cout << "Constructeur de A."; }
~A() { cout << "Destructeur de A"; }
private :
int nb;
};
class Base {
public:
Base() { cout << "Constructeur de Base .";
cout << att.nb."; }
~ Base () { cout << "Destructeur de Base "; }
private :
A att;
};
A. U. : 10-11

class Derive : Base{


public:
Derive() { cout << "Constructeur de Derive.";
cout << att1.nb}
~ Derive () { cout << "Destructeur de Derive "; }
private :
A att1;
};

Quel est le rsultat de ce programme ??

S. Elkosantini

77

POO avec C++

Forme

Lhritage : le polymorphisme

Limplmentation en C++ de la classe Triangle

Carre

dessiner()
effacer()

A. U. : 10-11

S. Elkosantini

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Triangle
dessiner()
effacer()

Cercle

dessiner()
effacer()

78

POO avec C++

Lhritage : le polymorphisme indsirable


Forme * f = new Triangle () ;
Classe Forme

Linstance f

Interface

Interface

Interface

Implmentation

Implmentation

Implmentation

f->dessiner() ;

Classe Triangle

Selon le diagramme suivant, quel est le


rsultat de linstruction f.dessiner() ?

Un pointeur vers une classe de base ne permet daccder quaux membres


hrits et son usage ne saurait donc respecter la rgle daccs par dfaut aux
membres propres.

A. U. : 10-11

S. Elkosantini

79

POO avec C++

Forme

dessiner ()
effacer()
Limplmentation en C++ de la classe Triangle rectangle deplacer()
getcouleur()
setcouleur()

Lhritage plusieurs niveaux

Carre

dessiner()
effacer()

Triangle
rectangle

A. U. : 10-11

S. Elkosantini

Triangle
dessiner()
effacer()

Cercle

dessiner()
effacer()

Triangle
isocle

80

POO avec C++

Lhritage : Ordre d'appel des constructeurs et des destructeurs


Linstanciation dune classe drive implique ncessairement lexcution
dun constructeur de la classe de base puis celle dun constructeur de la
classe drive.

Lors de la destruction dun objet avec delete, lexcution dun destructeur de


la classe drive pis celle dun constructeur de la classe de base.

A. U. : 10-11

S. Elkosantini

81

POO avec C++

Lhritage multiple

Limplmentation en C++ de la classe Triangle rectangle

x
fa()

x
fb()

C
fc()

A. U. : 10-11

S. Elkosantini

82

POO avec C++

Lhritage multiple : Ordre d'appel des constructeurs


Les constructeurs sont appels dans l'ordre de dclaration de l'hritage.

class A {

class B {

public:
};
public:
};

A(int n) {}

B(int n) {}

class C : public B, public A {


public:
C(int i, int j) : A(i), B(j) {}
};
void main() {
C obj_c;

Appel des constructeurs B(), A() et C()

A. U. : 10-11

S. Elkosantini

83

POO avec Java

Les mthodes virtuelles


Lorsquune mthode est dclare comme virtuelle dans la classe de base, sa
redfinition ne donne pas naissance au phnomne de polymorphisme
indsirable .

Si une mthode virtuelle est invoque par lintermdiaire dun pointeur sur
la classe de base, cest le type de lobjet dont ladresse se trouve dans le
pointeur au moment de lappel qui dtermine quelle fonction est excute

A. U. : 10-11

S. Elkosantini

84

POO avec C++

Forme

Les mthodes virtuelles

Limplmentation en C++ de la classe Triangle

Carre

dessiner ()
effacer()
deplacer()
getcouleur()
setcouleur()

Triangle

dessiner ()
deplacer()

Cercle

dessiner() et deplacer() sont virtuelles

A. U. : 10-11

S. Elkosantini

85

POO avec C++

Les mthodes virtuelles


Lorsquune mthode est redfinie dans une
classe drive, elle doit tre virtuelle

class A
{
public:
A() { std::cout << "Constructeur de A.\n"; }
~A() { std::cout << "Destructeur de A.\n"; }
Virtual void PrintName() { std::cout << "Classe A.\n"; int j=0 ; }
};
class B : public A
{
public:
B() { std::cout << "Constructeur de B.\n"; }
~B() { std::cout << "Destructeur de B.\n"; }
void PrintName() { std::cout << "Classe B.\n"; }
};
A. U. : 10-11

S. Elkosantini

void main()
{
A * p= new B();
p->PrintName();
}

Quel est le rsultat ??

86

POO avec C++

Forme

Les mthodes virtuelles

virtual dessiner ()
effacer()
getcouleur()

Pour lexemple suivant :


Forme f = new Trianglerectangle () ;
Interface

Implmentation
Interface

Classe Forme

Carre

dessiner()
effacer()

Triangle
rectangle

Interface

A. U. : 10-11

virtual dessiner()
effacer()

Cercle

dessiner()
effacer()

Classe Trianglerectangle

Implmentation

Implmentation

Triangle

Linstance f

Triangle
isocle

Selon le diagramme suivant, quel est le


rsultat de linstruction f.dessiner() ?

S. Elkosantini

87

POO avec C++

Les mthodes virtuelles : Ordre d'appel des constructeur et des


destructeurs

class A
{
public:
A() { std::cout << "Constructeur de A.\n"; }
~A() { std::cout << "Destructeur de A.\n"; }
};

void main()
{
A * p= new B();
delete p;
}

class B : public A
{
public:
B() { std::cout << "Constructeur de B.\n"; }
~B() { std::cout << "Destructeur de B.\n"; }
};

Quel est le rsultat ??

Et si on ajoute le mot virtual aux


destructeur de la classe A ??
A. U. : 10-11

S. Elkosantini

88

POO avec C++

Les mthodes virtuelles


Rcapitulation : Dans quel cas les mthodes virtuelles et le polymorphisme
sont utiliss ?

class Emloye {
public :
string nom;
int id, salaire;
Emloye(String n) : nom(n){}
virtual void affiche (){
cout<<"Je suis un employer";}

class magasinier : Employe {


public magasinier(String n) : Employer(n),
salaire(250){
}
{
}

void affiche ()
cout<<"Je suis un magasinier";

Dans le programme principal, crer un magasinier en excuter la mthode


affiche de lobjet crer. Quel est le rsultat ?

A. U. : 10-11

S. Elkosantini

89

POO avec C++


)

Lhritage

Exercice 8: Crer une hirarchie d'hritage de Rongeur: Souris, Gerbille, et


Hamster. Dans la classe de base, fournir des mthodes qui sont communes tous
les Rongeurs, et les redfinir dans les classes drives pour excuter des
comportements diffrents dpendant du type spcifique du Rongeur. Crer un
tableau de Rongeur, le remplir avec diffrent types spcifiques de Rongeurs, et
appeler vos mthodes de la classe de base pour voir ce qui arrive.

A. U. : 10-11

S. Elkosantini

90

POO avec C++


)

Lhritage

Exercice 9:
Ecrivez les classes ncessaires au fonctionnement du programme suivant. Donnez
uniquement le nom des classes et les mthodes (sans dtailler le contenu).

void main()

Batiments *B[3] ;
B [0] = new Appartement(Atef) ;
B [1] = new Villa(Walid) ;
B [2] = new Studio(Anis) ;
For (int i = 0; i<3 ; i++)
B [i]->affiche() ;

Le rsultat de ce programme est :


Lappartement appartient Atef
La villa appartient Walid
Le studio appartient Anis
A. U. : 10-11

S. Elkosantini

91

POO avec C++

Les classes abstraites : les mthodes virtuelles pures


La prsence dune mthode virtuelle pure dans une classe a 2 consquences:

La classe ne peut plus tre instancie,

Toute classe fille de cette classe doit redfinir la mthode en question.


Syntaxe :

virtual void affiche() = 0;

Lorsquune classe contient une mthode


virtuelle pure, elle est qualifie dabstraite.

A. U. : 10-11

S. Elkosantini

92

POO avec C++

Les classes abstraites

Une classe abstraite n'existe que pour tre hrite.

Une classe est dite abstraite si elle contient au moins une fonction virtuelle
pure.
class X {
// Affiche est une fonction virtuelle pure car = 0.
virtual void affiche() = 0;
};
Il est impossible de crer (instancier) un
objet partir d'une classe abstraite.
X a();

A. U. : 10-11

// Erreur
S. Elkosantini

93

POO avec C++

Les classes abstraites


Les classes qui hritent d'une classe abstraite doivent obligatoirement dfinir
la ou les fonctions virtuelles pures.
class Y:public X {
void affiche() {
cout << "Y:f <<endl;
}
};
Mme si le mot-cl virtual ne prcde pas le
nom de la fonction affiche, elle reste quand
mme virtuelle car dans la classe de base,
elle est dclare ainsi. Donc, pas besoin de
le prciser encore une fois.

A. U. : 10-11

S. Elkosantini

94

Plan

Chapitre 1 : Introduction
Chapitre 2 : Le concept dobjets
Chapitre 3 : POO avec C++
Chapitre 4 : et avec Java

A. U. : 10-11

S. Elkosantini

95

Introduction

Le langage Java : historique

1990 - St Sun Microsystems (James Gosling, Naughton, Sheridan) : projet de


langage petits systmes

1991 : Introduction du langage Oak

1993 : Essor dInternet : adapter Java au Web

1993 1995 : adaptation dOak pour le Web (Excution dapplets)

1995 : prsentation de Java TM par Sun et mise disposition gratuite du JDK sur
le net

A. U. : 10-11

S. Elkosantini

96

Introduction

Qualits majeures de Java

Simple (compar C++)

9
9
9
9

Gre les dbordements mmoire.


Gre lui-mme la dsallocation mmoire (ramasse-miettes).
Pas de manipulation explicite de pointeurs.
Pas de surcharge doprateurs.

Fondamentalement Orient-Objet : pas de fonctions/procdures : que


des mthodes !

Portable : principe de machine virtuelle

A. U. : 10-11

S. Elkosantini

97

Introduction

Le principe de la machine virtuelle

A. U. : 10-11

S. Elkosantini

98

Introduction

Un programme Java, pour voir


dition du programme source :
// Exemple de programme minimal : Salut.java
import java.io.*;
//.
public class Salut {
public static void main (String args[]) {
System.out.println("Salut tout le monde");
}
}
Compilation :

C:\Temp\> javac Salut.java

Excution :

D:\Temp\> java Salut

A. U. : 10-11

S. Elkosantini

gnration du fichier ..

99

Introduction

Java Vs C++

En C++:
// Exemple de programme minimal : Salut.cpp
#include <stdio.h>
//
void main () {
printf("Salut tout le monde");
}

En Java:
// Exemple de programme minimal : Salut.java
import java.io.*;
//.
public class Salut {
public static void main (String args[]) {
System.out.println("Salut tout le monde");
}
}

A. U. : 10-11

S. Elkosantini

100

Les premiers pas en Java

Plan

Les oprateurs mathmatiques , logiques et de conversion

Les boucles et les structures de contrles

Les tableaux

Les commentaires

A. U. : 10-11

S. Elkosantini

101

Les premiers pas en Java

La structure dun programme Java

import java.io.*;

public class Salut {

public static void main (String args[]) {

afficher (5);
}
public void afficher (int val ) {

System.out.println( le nombre afficher est +val);


}
}

Nom du fichier = nom de la classe


A. U. : 10-11

S. Elkosantini

102

Les premiers pas en Java

Les types primitifs

Ne pas confondre les types primitifs et les objets

Les types primitifs :

Entiers : byte (1 octet) - short (2 octets) - int (4 octets) - long (8 octets)

Flottants : float (4 octets) - double (8 octets)

Boolens : boolean (true ou false)

Caractres : char

Quelle est la
diffrence ??

Dclaration en java :
Int a, b, c ;
float x;
char ch
Boolens u, b;
A. U. : 10-11

S. Elkosantini

Des erreurs ??!!

103

Les premiers pas en Java

Les constantes

Le mot cl final permet de dclarer une constante: la valeur ne doit pas tre
modifie pendant lexcution du programme.

Dclaration en java :
final int n=10, m ;
n=n+1;

Le rsultat de linstruction est .

A. U. : 10-11

S. Elkosantini

104

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs mathmatiques

Oprateur

Exemple

Equivalent

Note = 18

Note = 18

+=

Note+ = 2

Note = Note + 2

-=

Note- = 2

Note = Note - 2

*=

Note* = 1.5

Note = Note * 1.5

/=

Note/ = 2

Note = Note / 2

%=

Note% = 2

Note = Note % 2

^=

Note^ = 2

Note = Note ^ 2

double nb1;
float nb2;
nb1/nb2 = ..
Quel est le type du rsultat de
lopration ?

float nb1;
int nb2;
nb1 + nb2 = .

A. U. : 10-11

S. Elkosantini

105

Les premiers pas en Java

Les oprateurs et laffectation

Priorit

()

++ , --

*,/,%

+,-

<,>

==,!=

&&, ||

=, += , -=
Plus faible

Plus fort

Les instructions
Quel est le rsultat de chaque
instruction ??

final int N=50;


short p=10;
char c=2*N+3; // la variable c contient .
byte b= 10*N; // le rsultat est .
A. U. : 10-11

S. Elkosantini

106

Les premiers pas en Java

Les oprateurs et laffectation

lincrmentation et la dcrmentation automatique


Incrmentation : Nb++ ou ++Nb

Quelle est la diffrence ??

Dcrmentation : Nb-- ou --Nb

i=2;
j=i++;

Quelles sont les valeurs de i et j


dans les deux cas ?

i=2;
j=++i;

A. U. : 10-11

S. Elkosantini

107

Les premiers pas en Java

Les oprateurs et laffectation

Autres oprateurs
Oprateur

&&

Loprateur ET logique

||

Loprateur OU logique

==

Oprateur dgalit

!=

Oprateur de diffrence

Loprateur ngation

double nb1;
double nb2;
boolean res1, res2;
res1 = ( nb1==nb2)
res2= ( nb1==nb2) && (nb1>10)

Les oprateurs de conversion (cast)


int i = 200;
long l = (long)i;
long l2 = (long)200;
A. U. : 10-11

S. Elkosantini

108

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs bits bits


Oprateur

Exemple :

A. U. : 10-11

&

Loprateur ET

Loprateur OU

Oprateur OU exclusif

Loprateur ngation

Nb1
Nb2

00000101
00000011

Nb1 & Nb2

Nb1 | Nb2

Nb1 ^ Nb2

~Nb1

S. Elkosantini

109

Les premiers pas en Java

Les oprateurs et laffectation

Les oprateurs de dcalage :

Manipules des bits,

Utilisables uniquement avec des types primitifs entiers,

Les oprateurs sont :

Nb << n : dcalage vers la gauche du nombre Nb de n bits

Nb >> n : dcalage vers la droite du nombre Nb de n bits

Exemple :
N=10000101

N<< 2 donne ........

int N = 6;

N>>1

A. U. : 10-11

donne .......

S. Elkosantini

110

Les premiers pas en Java

Les boucles et les structures de contrles


if else

Syntaxe:

if (condition logique)
Instructions excutes si la condition logique est vraie
else
Instructions excutes si la condition logique est fausse

Exemple 1:

If (moyenne >= 10)


System.out.println( ltudiant a russi);
else
System.out.println( ltudiant doit repasser ses examens);
A. U. : 10-11

S. Elkosantini

111

Les premiers pas en Java

Les boucles et les structures de contrles


if else

Exercice 1:

Ecrire la partie du programme Java qui vrifie si un entier n est paire ou


impaire et affiche le rsultat.

A. U. : 10-11

S. Elkosantini

112

Les premiers pas en Java

Les boucles et les structures de contrles

switch casedefault

Syntaxe:

switch(expression)
{case constante_1: suite dinstructions; break;
...
case constante_n: suite dinstructions; break;
default : suite dinstruction;}

A. U. : 10-11

S. Elkosantini

113

Les premiers pas en Java

Les boucles et les structures de contrles


switch casedefault

Exercice 2:
Ecrire la partie du programme Java qui affiche:
o
Trs bien si la note est A,
o
Bien si la note est B,
o
Insuffisant si la note est C,
o
un message derreur sinon

A. U. : 10-11

S. Elkosantini

114

Les premiers pas en Java

Les boucles et les structures de contrles

Les boucles itratives

while :

while ( condition logique) {


... // code a excuter dans la boucle
}

do while :

do {
Bloc dinstructions ;
}
while ( condition logique)

A. U. : 10-11

S. Elkosantini

115

Les premiers pas en Java

Les boucles et les structures de contrles

Les boucles itratives

for :

for (initialisation du compteur ; condition ; modification) {


... // code a excuter dans la boucle
}

Exemple 2:

for (i = 0 ; i > 10; i++ )


{
System.out.println (i);
}

A. U. : 10-11

Quel est le rsultat de la boucle ?

S. Elkosantini

116

Les premiers pas en Java

) Les boucles et les structures de contrles


)

Exercice :
On dnomme nombre de Armstrong un entier naturel qui est gal la somme des
cubes des chiffres qui le composent. Ecrire un programme Java qui affiche de tels
nombres. Ex : 153 = 13 + 53 + 33

A. U. : 10-11

S. Elkosantini

117

Les premiers pas en Java

Les boucles et les structures de contrles

break et continue

break : permet de sortir dune boucle sans excuter la suite des instructions

continue : arrte l'excution de l'itration courante, et l'excution reprend en


dbut de boucle avec l'itration suivante

A. U. : 10-11

S. Elkosantini

118

Les premiers pas en Java

Les tableaux

Tableau unidimensionnels
Dclaration :
ou

int [] tab;
int tab[];

NULL

tab

Pas de dimensions dans la dclaration


Dimensionnement: int [] tab = new int [3]

tab

Allocation dans la mmoire selon le type du tableau


Initialisation: tab [0]=3; tab [1]=2; tab [2]=1

tab

ou autrement , int [] tab={3,2,1};


A. U. : 10-11

S. Elkosantini

119

Les premiers pas en Java

Les tableaux

Tableau multidimensionnels
Dclaration :

type [][] tab;

NULL

tab

Dimensionnement: tab = new type [2][3];


tab

ou aussi
tab = new type [2];
tab [0] = new type[2];
tab [1] = new type[3]

A. U. : 10-11

tab

S. Elkosantini

120

Les premiers pas en Java

Les tableaux

Exercice 3:
Soit T une matrice carre de 3 lignes et 3 colonnes. Ecrire un algorithme qui affiche un
message informant si la matrice est symtrique ou pas.

A. U. : 10-11

S. Elkosantini

121

Les premiers pas en Java

Les tableaux

Exercice 4:
Ecrire un algorithme qui tri un tableau en utilisant la mthode de tri par insertion.

A. U. : 10-11

S. Elkosantini

122

Les premiers pas en Java

Les vecteurs

La classe vecteur permet de grer des listes contenant plusieurs types

La taille du vecteur est dynamique, contrairement celle dun tableau.


Dclaration :

Vector v = new Vector()


Vector v = new Vector(5)

Quel est la diffrence ?

Ajout dlment dans le vecteur :


v.addElement(new Integer(1)); // Ajouter un premier lment
v.addElement(new Float(1.9999)); // Ajouter un autre lment
for (int i=2; i<10; i++) {
int lastInt = ((Number) v.lastElement()).intValue();
v.addElement(new Integer(i + lastInt)); } // Ajouter dautres lments
A. U. : 10-11

S. Elkosantini

123

Les premiers pas en Java

Les commentaires

Importance des commentaire

Claret du code

Rutilisation facile du code

Gnration automatique du javadoc ou le Help du programme dvelopp

Deux types de commentaire

Commentaire classique /* */ ou //

Gnration dun fichier (HTML) de documentation /** */


/**
* Ceci est un commentaire pour Javadoc

* @author Sabeur
* @version 2.0
*/

A. U. : 10-11

S. Elkosantini

124

Fin du cours

A. U. : 10-11

S. Elkosantini

125

Vous aimerez peut-être aussi