Вы находитесь на странице: 1из 98

La Programmation

Objets
(

Najib TOUNSI

7
Notes de cours: 3e anne Informatique EMI

1997/98

Fondements de la POO 2

LES FONDEMENTS DE LA POO

LES CONCEPTS DE LA POO

LES LANGAGES A OBJETS

n
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 2

Fondements de la POO 3

FONDEMENTS DE LA POO

Types Abstraits de Donnes


Types de donnes dtermins par les oprations de manipulation

Modularit
Programmation modulaire, sparation des tches. Un module = une tche

Programmation Diriges par les Donnes


Privilgier les donnes plutt que les traitements

O
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 3

Fondements de la POO 4

TYPE ABSTRAIT DE DONNES

Un TAD est un ensemble d'objets caractriss par les oprations


qui leur sont applicables.

Exemples:

pile
ensemble
fentre

empiler, dpiler, sommet


ajouter, supprimer, appartient
tracer, agrandir, deplacer

Ce qui importe, c'est le concept vehicul par un objet


(et non la structure de donnes sous-jacente)

/* C'est plus stable */

4 6 P 5
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 4

Fondements de la POO 5

TYPE ABSTRAIT DE DONNES


l Schma Syntaxique:
Profile des oprations

(~ enttes)

Soit B (les boolens) , P (les piles) et N (les entiers)

Type Pile =
Vide
EmPiler
Sommet
DPiler
PileVide
PilePleine
end

:
:P x N
:P
:P
:P
:P

P
P
N
P
B
B

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 5

Fondements de la POO 6

TYPE ABSTRAIT DE DONNES


l Aspect smantique:
Spcification du comportement (fait partie de la description d'un TAD)

Par Commentaires:
vide ()
empiler (p, n)
PileVide (p)
etc.

Verbose mais la plus simple


Cre une pile vide et la retourne en rsultat.
Rajoute n au sommet de la pile p, et la retourne en rsultat.
Teste si la pile p est vide.

Pr/Post conditions:

Ce qu'exige une opration et ce qu'elle garantit


Pas toujours facile et plus formelle.

Empiler (p, n)

[Requiert: Non PilePleine(p)


Garantit: Non PileVide(p), Sommet(p) = n]

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 6

Fondements de la POO 7

TYPE ABSTRAIT DE DONNES


l Aspect smantique
d Par Axiomes: Spcifications algbriques.
Dpiler (Vide ())
Dpiler (Empiler (p, n))
Sommet (Vide ())
Sommet (Empiler (p, n))
PileVide (Vide ())
PileVide (Empiler (p, n))

=
=
=
=
=
=

(Formelles)

ERREUR

p
ERREUR

n
Vrai
Faux

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 7

Fondements de la POO 8

TYPE ABSTRAIT DE DONNES


l Notion de constructeur

UE

Oprations ncessaires (et suffisantes) pour crer tous les objets


potentiels d'un certain type.

Axiomes spcifient l'effet de certaines oprations (slecteurs) sur d'autres (constructeurs)


Constructeurs pour la pile:

Vide et empiler

empiler(empiler(empiler(vide(),1),4),3)
empiler(empiler((vide(),1),4)
empiler(empiler(empiler(vide(),1),4),5)

Notion importante reprise dans les LOO.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 8

Fondements de la POO 9

TYPE ABSTRAIT DE DONNES


Exercices:

Dfinir les TADs:


Date
Entier naturel (utiliser axiomes de Peano)
Ensemble (d'entiers)
Un autre de votre choix (inspir de l'informatique matriel/logiciel)
Un article (de commerce)
N.B. :

Indiquer les constructeurs ventuels.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 9

Fondements de la POO 10

TYPE ABSTRAIT DE DONNES


l Reprsentation:

Choix d'implmentation du TAD (concrtisation).


Structure de donnes + algorithmes des oprations

Type Pile:
Rep

tableau t [1..MAX];
entier top;

Vide (p)
{ p.top = 0; }
Empiler (p, n) { p.top = p.top+1;
p.t[top] = n; }
Depiler(p)
{ p.top = p.top-1; }
Sommet(p)
{ return p.t[top]; }
PileVide(p)
{ return p.top < 1; }
PilePleine(p) { return p.top = (MAX); }

fin

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 10

Fondements de la POO 11

TYPE ABSTRAIT DE DONNES


l Reprsentation

Remarque: Prise en compte des cas d'exceptions dans les algorithmes (spcif. sans Pr/post):

Empiler (p, n) {
if top<(MAX)
p.top = p.top+1;
p.t[top] = n;

else
erreur("pile pleine");
endif
}

Exercices:

Programmer le reste des oprations.


Choisir et programmer la reprsentations des TADs de l'exercice prcdent

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 11

Fondements de la POO 12

TYPE ABSTRAIT DE DONNES


l Exemple de mise en oeuvre:

J
"Lire des nombres et les imprimer en ordre inverse"

integer n; pile p;
p = Vide();
Lire (n);
while (n dfini)
if (not PilePleine(p))
Empiler(p, n);
lire (n)
endwhile
while (not PileVide(p))

n = Sommet(p);
Dpiler(p);
crire(n)
endwhile

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 12

Fondements de la POO 13

TYPE ABSTRAIT DE DONNES


l Ce qu'est l' Abstraction
8

Objets connus travers une interface officielle (et non travers leur reprsentation)
4
4
4

On n'a pas besoin de connatre la reprsentation


On peut diffrer son choix (i.e. dvelopper sans avoir encore dcid comment la faire).
On peut changer l'implmentation sans remettre en cause les programmes

Pour programmer, on n'a besoin de connatre que la spcification du TAD (le quoi)
(profile et smantique des oprations cd l'interface)

On ne se proccupe pas des dtails d'implmentation,


4 On se concentrer sur l'essentiel, ce qui fait l'intrt d'un objet (de quoi a-t-on besoin)
4 Un objet est une abstraction d'une ralit.

Un TAD peut tre conu indpendamment du systme auquel il appartient


4 Il peut tre rutilis pour plusieurs systmes diffrents.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 13

Fondements de la POO 14

MODULARIT
l Compilation spare et modularit
Pour matriser la complexit d'un systme logiciel, il est ncessaire de le
dcomposer en lments plus simples, appels modules. Le systme sera vu
comme une compos de plusieurs units, chacune ralisant une tche bien
spcifique.
d Chaque module peut constituer une unit de compilation (compil sparment).
d Un programme est compos d'un ensemble de modules.
d Programme principale = appels ncessaires pour lancer et contrler l'application.
d Relations (interconnexion) entre modules rduites au stricte ncessaire.
d Chaque module peut tre crit en plusieurs versions.
d Modules autonomes pouvant servir ailleurs (rutiliss).
d Chaque module doit avoir une interface bien spcifie.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 14

Fondements de la POO 15

MODULARIT
l Dcomposition Modulaire
8 Procdures ou fonctions classiques
LECT
fichier

4 Des fonctions plus lmentaires concourent

la ralisation de la fonction globale.


4 Processus rapplicable.

ouvrir
fichier

traitement

fermer
fichier

lire
cl

recherche
enreg.

imprimer
enreg.

4 Paradigme Cartsien.

Exple: Recherche d'Enregistrement


dans un Fichier

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 15

Fondements de la POO 16

MODULARIT
Insuffisances dcomposition modulaire classique
/
d

Interactions possibles par partage de donnes globales en plus des appels explicites.

Evolution des spcifications pas toujours facile traduire. (programme correspond aux
fonctions demandes et se revle plus rigide).

Dcoupage centr autour des tapes de calcul (vs les objets ou entits d'intrt).

Parfois (e.g. programmes interactifs) on n'a pas d'ordre de traitement prtabli.

Fonctions oprent sur des donnes sans discernement.

Changement dans structures de donnes peuvent avoir de graves consquences.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 16

Fondements de la POO 17

Exemple d'illustration (2 derniers points).


Gnrer et imprimer 6 nombres alatoires

begin
tableau P.
Remplir P avec 6 nombres alatoires
Imprimer P
end

while i < 6
. a = alatoire();
. if not appartient (a, P) then
P[i] = a;
i = i+1
endif
endwhile

.
.

alatoire () { ...}
for j = 1 to i-1
if (P[i] = a)
then return true
endfor

while (i < 6)
crire (P[i])
endwhile

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 17

Fondements de la POO 18

Remarques:

g
Dfaut d'abstraction
Structure donnes contraint la conception

On a dja choisi un tableau


On agit directement sur ce tableau

Nouvelles exigences.
4 On voudrait une liste chane
4 n nombre alatoires
4 Les sortir dans l'ordre croissant.
4 etc.

L%

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 18

Fondements de la POO 19

MODULARIT
l Dcomposition Modulaire

Modules de PARNAS
(D. L. PARNAS

1972)

Un module est un ensembles de fonctions (ou procdures) logiquement relies et


pouvant partager des donnes communes, ressource, dclares au sein du module.

Protection de l'information information hiding ( cf. encapsulation). Seuls les procdures


autorises peuvent accder la ressource.
Module = boite noire connu par ses proprits officielles, son interface,
(conservant en son sein les dtails internes).
Un programme est un ensemble des tels entits qui utilisent leurs services les uns les
autres.

r
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 19

Fondements de la POO 20

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 20

Fondements de la POO 21

MODULARIT
l Modules de PARNAS:

*
*
*
*
*

exemple

Module GestEmp
file employes;
. . .
proc crer
{. . . }
proc ajouter (employ e)
{ . . .}
proc supprimer (employ e)
{ . . .}
proc chercher (ident id) --> employ
{ . . .}
proc augSalaire (integer tx)
{. . .}
etc.
end

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 21

Fondements de la POO 22

MODULARIT
l Modules de PARNAS:

@
w Le fichier est protg des accs extrieurs (sources d'erreurs).
w L'interface est l'entte des procdures avec les spcifications ncessaires.
w On peut changer d'organisation de fichier sans changements sur le reste.
w Mise au point et maintenance faciles.
w Effets des changements localiss.
w Paramtrage par le type de fichier possible
etc.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 22

Fondements de la POO 23

MODULARIT
l Intrts
w Dveloppement progressif et structur.
w Modules extensibles et rutilisables
w Les changements sont localisables et leurs effets localiss.
w Pas ncessaire de recompiler toute l'application.
w Bibliothque de composants logiciels.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 23

Fondements de la POO 24

MODULES et TYPES ABSTRAITS DE DONNEES

1968

Langage SIMULA(Norvge): Notion de classe groupe des dclarations de variables


reprsentant un objet, leur initialisation et les fonctions d'accs correspondantes.
Smalltalk est le premier langage prendre la relve.

1972

Travaux de D. PARNAS: Notion de module avec masquage des informations qui est
une grande contribution. Extensibilit et rutilisabilit.

1974

B. LISKOV: Tentative de formalisation avec la notion de TAD qui encapsule les


oprations et cache la structure sous-jacente d'un objet.
Langages CLU, ALPHARD, MODULA ... ADA

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 24

Fondements de la POO 25

PROGRAMMATION DIRIGE PAR LES DONNES

Algorithmes + Data Structures = Programs


Privilgier les donnes plutt que les traitement.

Pour traiter un problme, on commence par dfinir les types (abstraits) d'objets
^appropries, avec leurs oprations spcifiques. Chaque entit manipule dans
un programme tant une instance, un objet d'un de ces types.

L'univers d'un problme est modlisable en un ensemble d'objets, dtenant


chacun les cls de leur comportement et reprsentant les centres d'intrt du
problme. Plutt qu'un ensemble de routines oprant sur des donnes sans
discernement.

L'aspect dynamique du problme est modlis par les changes de messages


entres objets (appels des services offerts par leur type)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 25

Fondements de la POO 26

L'unit modulaire dans un tel systme est une classe qui dcrit une
implmentation d'un TAD.

LES CONCEPTS DE LA POO

!
4

Classe d'Objets
Concrtisation d'un TAD
Objets, Mthodes, Envoie de Message, Instanciation

Relations entres Classes

Composition (use) et Gnralisation Hirarchique (isa).

Classes et Sous Classes


Hritage, Liaison Dynamique, Polymorphisme, Surcharge

Gnricit
Paramtrisation des Classes.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 26

Concepts de la POO

Collection et Itrateurs

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 27

Concepts de la POO

NOTION DE CLASSE
l Objets et Classes d'Objets

ZXY)

Une classe, est une implantation d'un TAD. Elle dcrit un ensemble
d'objets caractriss par les mmes oprations de manipulation.

La classe est l'unit modulaire de structuration d'un programme.

Elle encapsule une partie statique

la description des donnes reprsentant un objet


et une partie dynamique

la description des oprations de manipulation


(routines qui traitent ces donnes)

Un objet est une instance directe d'une classe. (cf. valeur et son type)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 28

Concepts de la POO

NOTION DE CLASSE
l Champs, Mthodes, Envoie de Message
E
N
VI
R
O
N
N
E
M
E
N
T

&

CLASSE
INTERFACE
-

empiler
dpiler
sommet
...

REPRESENTATION
Tableau des lments
Indice du Sommet

accde
utilise

Champs:
Mthodes:
Envoi de message:

donnes constituant la reprsentation


oprations de manipulations

demande d'excution d'une mthode sur un objet.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 29

Concepts de la POO

NOTION DE CLASSE
Exemple:

v<?

Classe article
champs
numro;
nom;
prixHT;
qte;
mthodes
prixTTC () { return prixHT * 1.19; }
ajouter (entier q) { qte = qte + q; }
retirer (entier q) { qte = qte - q; }
fin

Champs et Mthodes
Identificateurs

caractristiques (features).
slecteurs

Synonymes: attributs, proprits

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 30

Concepts de la POO

NOTION DE CLASSE
l Instanciation d'objets
C'est la cration en mmoire des objets d'une classe. (+ initialisation).
Une instance est repre travers une variable (peut tre un pointeur).
instance
A
102
Montre
100.00
234

classe
article

instance

-numero
-nom
-prixHT
-qte

22
TV
5000
24

prixTTC()
ajouter()
retirer()

instance de
s'appliquent

<

D
Une classe deux instances

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 31

Concepts de la POO

NOTION DE CLASSE
l Instanciation d'objets

Exemples de dclarations:
article a,b;

initialisation par dfaut.

article c (23, "vlo", 120, 5);

initialisation fournie.

Exemples d'envois de messages:


a.ajouter (5);
x = b.prixTTC();

Remarque:

constructeur peut servir l'initialisation (Voir partie langage).

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 32

Concepts de la POO

NOTION DE CLASSE
l Notations

envoyer_message (Instance, Mthode, Paramtres);


envoyer_message (a, ajouter, q);

Mthodes (Instance, Paramtres)


ajouter (a, q);

Instance.Methode (Paramtres)
a.ajouter(q);

Intrt de 3

Avec

Forme contracte
Mise
message.

en

vidence

envoie

a.qte = a.qte + q;
Dans corps de mthode

Avec il est crit simplement


qte = qte + q;

vs Call classique
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 33

Concepts de la POO

NOTION DE CLASSE
l Pointeur this

(ou self, current):

Les champs se rapportent l'instance laquelle le message est envoy

H
a.ajouter(q).

Il existe un pointeur implicite, this, vers l'instance d'appel.


qte = qte + q;

this->qte = this->qte + q;

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 34

Concepts de la POO

NOTION DE CLASSE
l Accs aux champs (Slecteurs publiques/privs)

I
4 Direct:

instance.champ
article a;
x = a.prixHT;
n = a.nom;

4 Mthode Explicite : retourne un champ


x = a.AprixHT();
n = a.Anom()

avec:

fonctions d'accs
classe article

AprixHT() { return prixHT;}


Anom()
{ return nom;}
fin

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 35

Concepts de la POO

NOTION DE CLASSE
l Accs aux champs (Slecteurs publiques/privs)

Mthodes publiques
Champs privs

Abstraction, Protection des informations ...

Il est de bonne rgle de ne laisser visibles l'extrieur que certains


slecteurs (publiques) et de masquer les autres (privs). e.g. seules les
mthodes sont publiques.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 36

Concepts de la POO

RELATIONS ENTRE CLASSES


l Relation utilise uses
La Programmation Oriente Objets est la construction d'un systme
logiciel comme une collection structure de classes.
B. MEYER

Une premire relation entre classe est la relation utilise.

Une classe A utilise une autre classe B si elle dclare en son sein une ou
plusieurs entits de la classe B et en appelle les mthodes.

uses

On dit aussi que A est cliente de B (langage Eiffel).


_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 37

Concepts de la POO

RELATIONS ENTRE CLASSES


l Relation utilise uses

classe commande
champs
article e;
...
mthodes
facturer(){
...
e.prixTTC();
}
...
fin

commande

classe article
...

prixTTC () {}
fin

uses

article

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 38

Concepts de la POO

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 39

Concepts de la POO

RELATIONS ENTRE CLASSES


Considrations smantiques

Un objet de classe A a

B est un composant de A.

La composition, dite aussi agrgation, est un puissant concept smantique.


(cf. record, tuple)

parmi ses caractristique un objet de classe B.

commande
numCde

...

numero

article

nom

Compose

prixHT

qte

(PART_OF)

Modle objet se distingue en plus: A appelle des mthodes de B

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 40

Concepts de la POO

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 41

Concepts de la POO

RELATIONS ENTRE CLASSES


l Relation Hirarchique ISA
4 Deuxime relation fondamentale entre classes.
4 Trs structurante au niveau conceptuelle (Gnralisation/Spcialisation).
4 Trs avantageuse au niveau pratique (hritage et rutilisation de code).
4 Concept smantique de gnralisation.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 42

Concepts de la POO

RELATIONS ENTRE CLASSES


l Relation Hirarchique ISA
WHO'S WHO

"

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 43

Concepts de la POO

CLASSES ET SOUS CLASSES


l Relation d'Hritage ISA
Un objet de classe B est_un objet de classe A s'il possde les
caractristiques de A avec d'autres qui lui sont propres.

Dans un mme ensemble, certains objets sont plus nuancs.

Une classe A pour les caractristiques communes: super classe.

Des sous classes B, B',... pour nuancer:

3
3
7

Rajout de nouvelles caractristiques (plus spcifiques)


Modification des caractristiques communes

B, B', ... hritent ainsi de la classe A (les proprits communes).

Une Notation:
classe B
super classe A
... // nouvelles caractristiques et/ou
... // redfinition de caractristiques
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 44

Concepts de la POO

fin

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 45

Concepts de la POO

CLASSES ET SOUS CLASSES


l Relation d'Hritage ISA
article
-numero
-nom
-prixHT
-qte
CLASSE
prixTTC()
ajouter()
retirer()

SOUS-CLASSE

vtement

articleLuxe

-taile
-coloris

prixTTC()
1.33 * prixHT

relation d'hritage

ISA

Exercice: Quelles sont toutes les caractristiques de vtement et de articleLuxe?


_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 46

Concepts de la POO

CLASSES ET SOUS CLASSES


l Relation d'Hritage ISA

G
4 Partage de description
4 Rutilisation du travail fait
4 Enrichissement et complment de connaissances
4 Dveloppement incrmental
4 Arbre d'hritage
4 Incidence d'une modification sur un sous arbre.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 47

Concepts de la POO

CLASSES ET SOUS CLASSES


l Arbre d'Hritage

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 48

Concepts de la POO

CLASSES ET SOUS CLASSES


l Hritage Multiple
Q

z
8 But: dfinir de nouveaux objets en se servant de plusieurs autres.
4 Des classes de branches diffrentes, partagent encore des caractristiques.
4 Dupliquer ces caractristiques ou hriter de plusieurs endroits.
4 Graphe d'hritage sans circuits.

8 Dfaut: Parfois classe d'objets artificielle (factorisation de caractristiques)


Ne correspond pas une entit relle...

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 49

Concepts de la POO

CLASSES ET SOUS CLASSES


l Graphe d'Hritage

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 50

Concepts de la POO

CLASSES ET SOUS CLASSES


l Conflits d'Hritage
proprit de mme nom chez deux anctres diffrents
B

...
p

...
p

A
p?
p est quel slecteur ?

- Changer idf p dans B ou C

Contraignant.

- Renommer l'hritage.
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 51

Concepts de la POO

CLASSES ET SOUS CLASSES


l Conflits d'Hritage
Classe A
super classe B: p' renames p
super classe C: p" renames p
...
end
Donner des noms distincts aux caractristiques hrites ayant mme nom.

Autre Solution(e.g. C++)


Prfixage par la classe
dans A:

(:: oprateur de rsolution de porte)

B::p est la proprit p hrite de B


C::p

est la proprit p hrite de C

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 52

Concepts de la POO

CLASSES ET SOUS CLASSES

l Orthogonalit des Relations uses et ISA

.
.

.
.

ISA
USES

D uses B

et

C uses A dduits.

- Relations essentielles en Gnie Logiciel.


(Conception/Structuration, Maintenance ...)
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 53

Concepts de la POO

CLASSES ET SOUS CLASSES


l Typage et Liaison Dynamique
Lier une variable son type et donc aux oprations applicables.
Selon domaine d'application.
Typage statique. Contrle du bon usage des variables. e.g. gnie logiciel
Typage dynamique. Besoin de crer de nouvelles classes l'excution,
rajouter de nouvelles mthodes, etc. e.g. prototypage, intelligence artificielle
Notion de metaclasses, classe de toutes les classes. (

superclasse!)

F Cependant
dynamique

la liaison entre un slecteur et la mthodes activer est toujours


(LOO rels). Le compilateur s'assure que cela se fera sans problme.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 54

Concepts de la POO

CLASSES ET SOUS CLASSES


l Le Polymorphisme
1. Une entit qui revt plusieurs formes.
2. Changement dynamique de type pour:
Objet design par une variable
Objet paramtre d'une fonction
Objet composant dans une classe

etc

Gnralement li a l'hritage, consquence de la relation ISA

Un objet d'une sous classe peut tre pris pour un objet d'une
classe mre. (Inverse NON)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 55

Concepts de la POO

CLASSES ET SOUS CLASSES


l Le Polymorphisme
Exemple:
article A;
articleLuxe B;
A < B;
Juste
B < A;
Faux
(astuce: respecter sens de ISA)

Liaison dynamique:
A.prixTTC();
A <- B;
A.prixTTC();
La requte prixTTC(), n'as pas le mme sens avant et aprs l'affectation
A l'excution, la mthode active est diffrente (tva 19%, tva 33%).
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 56

Concepts de la POO

CLASSES ET SOUS CLASSES


l Polymorphisme et Surcharge
Le polymorphisme intervient dans

(x tant dclar de classe A)

x.m()

Message envoy un objet

f(x,)

Objet paramtre

x[i]

Objet dans un ensemble

classe C
champs
x;

fin

Objet composant.

etc.

x peut designer n'importe quelle instance de A ou descendant de A

Cas 2. on parle aussi de surcharge de f


Cas 3. est un aspect de la gnricit.
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 57

Concepts de la POO

CLASSES GENERIQUES
l Paramtrisation des classes
C'est quand plusieurs classes ne diffrent que par le type d'un composant.
On dfinit une seule classe gnrique paramtre alors par ce type.

Une pile d'entiers ressemble trangement une pile de caractres

Type PileEnt:
Rep tableau t [MAX] de entier;
entier top;
...
Empiler (p, n) { p.top = p.top+1;
p.t[top] = n; }
Depiler(p)
{ p.top = p.top-1; }
...
fin

Type Pilecar:
Rep tableau t [MAX] de car;
entier top;
...
Empiler (p, c) { p.top = p.top+1;
p.t[top] = c; }
Depiler(p)
{ p.top = p.top-1;
}
...
fin

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 58

Concepts de la POO

CLASSES GENERIQUES
l Paramtrisation des classes
Typegen Pile <type ELEMENT>:
Rep tableau t [MAX] de ELEMENT;
entier top;
...
fin

ELEMENT reprsente un type (classe).

Il fait paramtre formel(*).

On peut instancier plusieurs piles.

On pourra dclarer, par exemple:

Dfinition de type par:


(*)

Pile <type>

Pile <entier> pe;


Pile <car> pc;
Pile <article> pa;

etc...

o type est le type paramtre effectif

Doit tre muni parfois de certaines oprations (e.g. comparaison, affectation ).

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 59

Les Langages Objets 60

LES LANGAGES A OBJETS

!
*

LANGAGE C++

(Bjarn STROUSTRUP)

LANGAGE EIFFEL

C + TAD. ( + qques amliorations)

60

Nouveau langage (Fiabilit des programmes).


(Bertrand MEYER)

JAVA

Nouveau langage (C++like + Fonctionnalits Web)


(Sun)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 60

Les Langages Objets 61

LANGAGE C++

La Classe d'Objets
Classe, Fonctions Membres/Amies, Caract.

61

Publiques/Prives.

Les Constructeurs et Destructeurs


Instanciations / Initialisations d'Objets. Librations d'Objets.

Classes Drives
Hritage Simple/Multiple. Accs protg.

Gnricit
Classe et Fonction Gnriques (template)

Collections et Itrateurs
Parcours et Traitements des collections

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 61

Les Langages Objets 62

LANGAGE C++
l

La Classe d'Objets

(exemple)

_
62

class article {
int numero;
char* nom;
float prixHT;
int qte;

//
//
//
//

numro article
nom article
son prix Hors taxe
Qte en stock

public:
float prixTTC ()
{ return prixHT*1.19;}
// opration qui calcule le prixTTC d'un article
void ajouter (int q)
{qte = qte + q;}
// opration qui augmente la quantit en stock
void retirer (int q)
{qte = qte - q;}
// opration qui diminue la quantit en stock
};
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 62

Les Langages Objets 63

LANGAGE C++
l

La Classe d'Objets

(suite)

63

+
8 class introduit une dfinition de classe

4 Enumration des caractristiques (cf. Struct)


4 Champs et mthodes sont dits field /function members
8 Membres publiques ou Privs
4 public : Caractristique connue en dehors de la classe (exportable)
4 private : Non exportable. Usage interne de la classe. (Information Hiding).
4 dfaut private

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 63

Les Langages Objets 64

LANGAGE C++
l

La Classe d'Objets

(suite)

8 Fonctions membres dfinies en ligne (in


4 Donne de toute la dfinition d'une

line)

64

fonction membre.

4 Appel = Expansion de la fonction au lieu de branchement (Si possible).


8 Oprateur de rsolution de Porte (Scope rsolution Operator) ::
4 Dfinition fonction membre en cas de donne de prototype seul.
class article{
...
void ajouter (int);
};

void
article::ajouter
q){
qte = qte + q;
}

(int

8 Commentaires C++.
4
4

/* comme c'est le cas en C */


// Jusqu' la fin de la ligne //actuelle

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 64

Les Langages Objets 65

LANGAGE C++
l

La Classe d'Objets:

(Forme Gnrale)

65

fields vs functions
class nom {
field members
function members
}

public vs private members


class nom {
private members
public:
public members
private:
private members
}

in line function
class nom {
void f(){}
}
________________
class nom {
void f();
}
void nom::f(){}

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 65

Les Langages Objets 66

LANGAGE C++
l

La Classe d'Objets

(Exemple d'utilisation)

66

Dclaration

article a;

Appel de mthode:

a.ajouter (5);
x = a.prixTTC();
a.prixHT = 3.50; // incorrect

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 66

Les Langages Objets 67

LANGAGE C++
l

La Classe d'Objets

(membres statiques)

Champ dclar static

67

class C{
public: static int s;
int a;

}
4

Existe en un exemplaire. Partag par toutes les instances.

Rfrence: instance.membre

classe::membre

C x,y;
x.s,

Intrt:

y.s,

>

C::s

mme objet.

Ressource unique grer. (fichier, file d'attente, liste)

'
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 67

Les Langages Objets 68

LANGAGE C++
l

La Classe d'Objets

(fonction amie, friend member)

68

Fonction C normale qui jouit du privilge

d'avoir accs aux

membres privs d'une classe.


4

On la dclare friend au sein de la classe.


class article {
...
friend
print(article);
}

void

void print(article a) {
cout << a.numro << a.nom << a.prixHT
<< a.qte;
}

Evite de faire systmatiquement appel des fonctions d'accs pour des routines
d'usage gnrale.

Usage:

print (x); print (y);

Comparer

x.prixttc(); i.e. appel de mthode.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 68

Les Langages Objets 69

LANGAGE C++
l

La Classe d'Objets

(Mais o est donc passe la pile?)

69

class pile{
char t[MAX];// Tableau des lments de
// la pile
int top; // Indice sommet de la pile.
public:
void vide();
// Initialise la pile vide
void empiler(char);
// Met un char en sommet de pile
void depiler();
// Dcapite la pile
char sommet();
// Consultation du sommet de pile
int estVide();
// Teste si pile vide (1 oui, 0
non)

void pile::vide(){
top = -1;
}
void pile::empiler(char c){
if (top < MAX)
t[++top] = c;
else cout
<<
"Pile
pleine";
}
int pile::sommet(){
return t[top];
}

};

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 69

Les Langages Objets 70

LANGAGE C++
l

La Classe d'Objets
Exercices

70

Ecrire en C++ un programme qui utilise une pile.


Dcrire une classe d'objets date. Prvoir une fonction amie dure.
Dcrire trois profiles de fonction ADD entre deux complexes.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 70

Les Langages Objets 71

LANGAGE C++
l

Constructeurs et Destructeurs
71

Un constructeur, est une mthode


qui cre et/ou initialise une instance.

(fonction membre)

Une Classe a intrt avoir, au moins, un constructeur.


4

Initialiser des champs

Allouer la place aux pointeurs

Opration systmatiquement appele par le compilateur.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 71

Les Langages Objets 72

LANGAGE C++
l

Constructeurs et Destructeurs
(Rappel langages conventionnels )
72

Cration / destruction d'objets

4 Entre d'un bloc


(ou Dbut de pgme)

4 Sortie du bloc
(ou Fin de pgme)

4 New

4 Free

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 72

Les Langages Objets 73

LANGAGE C++
l

Constructeurs et Destructeurs
73

{ Type p;

{ Type' q;

2
3

2
3

4 Appel systmatique d'un constructeur ds la dclaration.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 73

Les Langages Objets 74

LANGAGE C++
l

Constructeurs et Destructeurs
74

Un destructeur, est une fonction


membre
restitue au systme l'espace occupe par une instance.

p = new type;

free p;

p = new type';

free p;

qui

4 Destructeur utile pour librer (free) de la mmoire supplmentaire alloue.


(en cas d'absence de ramasse-miettes)
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 74

Les Langages Objets 75

LANGAGE C++
l

Constructeurs et Destructeurs

(Dfinition)

class X {

75

X(){};

//

X(TypeParam){};
X~(){};

// 2e Constructeur
// Destructeur

Constructeur dfaut

}
4 Il peut (et doit) y avoir plusieurs constructeurs.

(cf. surcharge).

4 Leur usage dpend du contexte.


4 Un seul destructeur est possible (ou aucun).
4 Dfinis en ligne de prfrence.

FGHHJ
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 75

Les Langages Objets 76

LANGAGE C++
l

Constructeurs et Destructeurs

(Usage)

76

{
X x;

// X () appel (constr dfaut).

X y(par);

// X (TypeParam) appel

// Destructeur appel ici. 2 fois.

Constructeur dfaut est assez utile. Forme abrge et habituelle d'une dclaration:

X a,b,c;
En ralite:

i.e.

X x

est une forme abrge de

X x = X();

X y(par)

est une forme abrge de

X y = X(par);

Dclaration + Initilalisation

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 76

Les Langages Objets 77

LANGAGE C++
l Constructeurs et Destructeurs

(Exemples)

77

class article{
...
article(int, char*, float, int);
// Construit un article de numro,
// nom, prixHT et quantit donnes
...
};

Variable simple

Varaible Pointeur

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 77

Les Langages Objets 78

78

article a=article(10, "pot", 10.00, 234);


article a(10, "pot", 10.00, 234);

article* pa =
new article(10, "pot", 10.00, 234);

article b = a;
article c;
// incorrecte,
// paramtres manquants.

ou bien
article* pa;
// Correcte bien sr !
pa = new article(10, "pot", 10.00, 234);

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 78

Les Langages Objets 79

LANGAGE C++
l Constructeurs et Destructeurs

(Exemples de ralisation)

article::article(int n, char*
p,int q){
numero = n;
nom = new char[strlen(m)+1];
strcpy (nom, m);
prixHT = p;
qte = q;
};

m,

79

float

article::article~(){
delete nom;
};

Exercice:

Constructeur dfaut? (sans paramtre)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 79

Les Langages Objets 80

LANGAGE C++
l Constructeurs et Destructeurs
Il y a copie et copie

o
X

23

23

toto

80

toto

23

Simple Affectation
Y=X

Copie Superficielle
shallow copy

23
toto
toto

23
23

toto
toto

Copie en Profondeur
deep copy

Certains langages possdent notations pour toutes ces affectations.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 80

Les Langages Objets 81

LANGAGE C++
l Constructeurs et Destructeurs

(operator=)
81

article *a, *b;


a = b;
Affectation

article a, b;
a = b;
Copie superficielle

article a, b;
a = b;
//
aff=

nouvelle

Copie Profondeur
Surcharge de =

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 81

Les Langages Objets 82

Nouvelle fonction membre:

article* operator=(artcilce&){};

article* article::operator=(article& p){


if(this == &p) return this; //
c'tait a=a;
delete nom;
// !!
82
numero = p.numero;
nom = new char[strlen(p.nom) + 1];
strcpy (nom, p.nom);
prixHT = p.prixHT; qte = p.qte;
return this
}

Exercice: Comparer au constructeur.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 82

Les Langages Objets 83

LANGAGE C++
l Constructeurs et Destructeurs
Exemple de jeu complet de constructeurs
83

t
class
...
1)
2)
3)
4)
5)
};

X {
X()
// Dfaut // si souhaitable
X(objets_de_base);// A partir d'objets de base.
X(X&);
// A partir d'instance existante
// Paramtres de fonction.
X& operator=(X&); // Copie en profondeur.
~X();

X a;

f(a);

X a();

a = b;

X b = a; ou

X b (a);

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 83

Les Langages Objets 84

LANGAGE C++
l Classe de Base et Drive
Forme:

class

(Relation d'Hritage)

public

84//caractristique

de D };

Dclasse drive hrite de Bclasse de base

(avec transmission des droits publiques)

Exemple:
typedef enum {S,M,L,XL} SIZE;

class
vetement:
article{
SIZE taille;
char coloris[10];
// ...
};
Un seul niveau

public

class audioVisuel: public article {


int dureeGarantie;
// ...
};
class TV: public audioVisuel {
int voltage;
// ...
};
Deux niveaux

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 84

Les Langages Objets 85

LANGAGE C++
l Classe de Base et Drive

(Relation d'Hritage)

Constructeurs:
85

class vetement : public article {


// ...
public:
vetement(int , char*, float, int, SIZE, char*);
// les caractristiques de base d'un article plus
// celles d'un vetement
};
vet::vet(int n, char* m,float p,int q, SIZE s, char* c)
: article (n,m,p,q)
// appel constr. parent
{
taille=s;
strcpy(coloris,c);
}
4 Appel constructeurs en ordre ascendant.
4 Instanciation dans l'ordre descendent des constructeurs. (D'abord champs de base)
4 Desctructeurs, si existent, appels donc en ordre inverse d'instanciation.
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 85

Les Langages Objets 86

LANGAGE C++
l Classe de Base et Drive

(Relation d'Hritage)

Appels Constructeurs:

86

class article {
article ()
{}

};

On initialise:

class vet :
public article
{
vet():article()
{}

};

D'abord la partie article


Ensuite la partie vtement

vet v (12, "chemise", 10.00, 200, XL, "jaune");

article:

vet:

num 12, nom "chemise", prixHT 10,00, num 200


taille XL,

coloris "jaune"

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 86

Les Langages Objets 87

LANGAGE C++
l Classe de Base et Drive

(Accs protg protected)

87

"

1er niveau:

Transmission des droits d'accs des membres non privs hrits.


class D : public B {};
membre publique de B, membre publique dans sous classe de D

&

2e niveau: Membres privs pour tous sauf pour les descendants.


class X { protected : membres };
(membres priv chez classes clientes, publique chez sous classes.

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 87

Les Langages Objets 88

LANGAGE C++
l Classe de Base et Drive (Protection)
88

Exemple Synthtique

class X {
private: int
public
// ...
};

A;

//ou

protected

ou

ISA
class U{ // cliente de X Y et
Z
USES
h(){
X x; Z z; Y y;
x.A=1;
y.A=1;
z.A=1;
}
};

class Y: X { // ou Y: public X
public:
f(){
X x; Y y;
x.A=1; y.A=1;
}
};

ISA

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 88

Les Langages Objets 89

89

class Z:Y {
public:
g(){
X x; Z z; Y y;
x.A=1; y.A=1; z.A=1;
}
};

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 89

Les Langages Objets 90

LANGAGE C++
l Gnricit

(template)

Fonction gnrique:

r
template

template <class T>


void g( T x){

<class

90Type>

g() {}

// fonction g de param T

main(){
int x; float y; article z;
(x); g(y);
g(z);
}

J Application: Une seule fonction tri,


K Problme:

tableaux diffrents types

Hypothses sur classe T (e.g. Munie de fonction comparaison)

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 90

Les Langages Objets 91

LANGAGE C++
l Gnricit

(template)

Classe gnrique:

template <class Type> class G {}


91

template <class T>


class Pile {
T P[10];
int s;
public:
Pile(){ s = -1;}
void empiler(T& e){ P[++s]
e;}
void depiler(){ s--; }
T sommet (){ return P[s]; }
};

J Application: Une seule dscription,


K Problme:

main(){
Pile <int> pi;
Pile <float> pf;
int n;
pi.empiler(2);
pf.empiler((float)2.2)
;
n = pi.sommet();
pi.depiler();
pf.depiler();
}

Plusieurs classes

Hypothses sur classe T

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 91

Les Langages Objets 92

LANGAGE C++
l Collections et Itrateurs

Z
Itrateur:
Mcanisme
permttant
de
collection pour en traiter un un les lments

92

parcourir

une

initialisation, progression automatique, test d'arrt


exemples :
Boucle for des langages de
programmation

Notion de CURSOR dans ESQL/C

]
for (i=0; i<M; i++)
cout << t[i];

declare c CURSOR for


select * from employe

OPEN c; FETCH c into e


while (SQLCODE ==0){
traiter un employ e
FETCH c into e
}

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 92

Les Langages Objets 93

LANGAGE C++
l Collections et Itrateurs

93

Itrateur Abstrait: Itrateur permettant de


faire abstraction de la
stratgie d'accs aux lments traiter (dbut, accs au suivant, arrt).

PourChaque Elment de Collection


Traitement
PourChaque Elment de Collection
TelQue Condition
Traitement

Aucune hypothse sur l'ordre ou la mthode de recherche des lments traits

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 93

Les Langages Objets 94

LANGAGE C++
l Collections et Itrateurs:

Exemple

Classe Collection

94

//
// Collection generique
//

void suppr (T& e){


for (int i=0;i<size;i++)
if(cmp(*t[i],e)==0){
*t[i] = *t[--size];
delete (t[size]);
}
}

template <class T> class Collection{


T* t[10];
short size;
public:
Collection(){
size=0;
for (int i=0; i<size; i++)
t[i] = NULL;
}
void insert(T& e){
t[size++] = new T(e);
}

~Collection(){
for (int i=0; i<size; i++)
delete (t[i]);
}

//

...
friend class iterator;

};

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 94

Les Langages Objets 95

95

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 95

Les Langages Objets 96

LANGAGE C++
l Collections et Itrateurs:

Exemple

Itrateur sur une collections de String


96

typedef Collection<String> Strings;


class iterator{
Strings *s;
int cursor;

// rfrence au set a parcourir


// lment courant

public:
iterator (Strings &x){
// on itere sur x
s = &x;
cursor = 0;
}
String* operator() () // suivant
{
return (cursor < s->size ?
&(s->t[cursor++]) : NULL );
}
};

main(){
Strings setStr;
iterator
iterateur
/
String *x;

get(setStr);

while ( (x=get()) != NULL)


x->print();
}

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 96

//init

Les Langages Objets 97

LANGAGE C++
l Collections et Itrateurs:

Exemple

Itrateur sur une collections de article


97

#include "article.h"
#include "collection.h"
typedef Collection<Article> Articles;
class iterator{
Articles *s;
int cursor;
public:
iterator (Articles &x){
s = &x;
cursor = 0;
}
Article* operator() () // suivant
{
return (cursor < s->size ?
NULL );
}
};

s->t[cursor++]

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 97

Les Langages Objets 98

Simple Itration

Double Itration

98

main(){
Articles articles;
Article
a(10, "titi", 25,10);
Article
b(12, "toto", 25,10);
Article
c(14, "tutu", 24,11);
articles.insert(a);
articles.insert(b);
articles.insert(c);

main(){
// ... mmes initialisations
iterator get1(articles);
iterator get2(articles);
Article *x =new Article(0,"\0",0,0);
Article *y =new Article(0,"\0",0,0);
while ( (x=get1())!= NULL){
x->print();
get2=iterator(articles);
while( (y=get2()) !=NULL){
printf(" 2 ");
y->print();
}
}

iterator get(articles);
Article *x =new Article(0,"\0",0,0);
while ( (x=get())!= NULL)
x->print();
}

_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 98

Вам также может понравиться