Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Objets
(
Najib TOUNSI
7
Notes de cours: 3e anne Informatique EMI
1997/98
Fondements de la POO 2
n
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 2
Fondements de la POO 3
FONDEMENTS DE LA POO
Modularit
Programmation modulaire, sparation des tches. Un module = une tche
O
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 3
Fondements de la POO 4
Exemples:
pile
ensemble
fentre
4 6 P 5
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 4
Fondements de la POO 5
(~ enttes)
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
Par Commentaires:
vide ()
empiler (p, n)
PileVide (p)
etc.
Pr/Post conditions:
Empiler (p, n)
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 6
Fondements de la POO 7
=
=
=
=
=
=
(Formelles)
ERREUR
p
ERREUR
n
Vrai
Faux
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 7
Fondements de la POO 8
UE
Vide et empiler
empiler(empiler(empiler(vide(),1),4),3)
empiler(empiler((vide(),1),4)
empiler(empiler(empiler(vide(),1),4),5)
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 8
Fondements de la POO 9
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 9
Fondements de la POO 10
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
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:
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 11
Fondements de la POO 12
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
Objets connus travers une interface officielle (et non travers leur reprsentation)
4
4
4
Pour programmer, on n'a besoin de connatre que la spcification du TAD (le quoi)
(profile et smantique des oprations cd l'interface)
_____________________________________________________________________________________________________________
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
ouvrir
fichier
traitement
fermer
fichier
lire
cl
recherche
enreg.
imprimer
enreg.
4 Paradigme Cartsien.
_____________________________________________________________________________________________________________
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).
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 16
Fondements de la POO 17
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
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)
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
1968
1972
Travaux de D. PARNAS: Notion de module avec masquage des informations qui est
une grande contribution. Extensibilit et rutilisabilit.
1974
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 24
Fondements de la POO 25
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.
_____________________________________________________________________________________________________________
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.
!
4
Classe d'Objets
Concrtisation d'un TAD
Objets, Mthodes, Envoie de Message, Instanciation
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.
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:
_____________________________________________________________________________________________________________
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
_____________________________________________________________________________________________________________
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 fournie.
Remarque:
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 32
Concepts de la POO
NOTION DE CLASSE
l Notations
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
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
H
a.ajouter(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;
avec:
fonctions d'accs
classe article
_____________________________________________________________________________________________________________
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
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 36
Concepts de la POO
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
Concepts de la POO
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
Un objet de classe A a
B est un composant de A.
commande
numCde
...
numero
article
nom
Compose
prixHT
qte
(PART_OF)
_____________________________________________________________________________________________________________
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
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 42
Concepts de la POO
"
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 43
Concepts de la POO
3
3
7
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
SOUS-CLASSE
vtement
articleLuxe
-taile
-coloris
prixTTC()
1.33 * prixHT
relation d'hritage
ISA
Concepts de la POO
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
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 48
Concepts de la POO
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.
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 49
Concepts de la POO
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 50
Concepts de la POO
...
p
...
p
A
p?
p est quel slecteur ?
Contraignant.
- Renommer l'hritage.
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 51
Concepts de la POO
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 52
Concepts de la POO
.
.
.
.
ISA
USES
D uses B
et
C uses A dduits.
Concepts de la POO
superclasse!)
F Cependant
dynamique
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 54
Concepts de la POO
etc
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
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
x.m()
f(x,)
Objet paramtre
x[i]
classe C
champs
x;
fin
Objet composant.
etc.
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.
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
Pile <type>
etc...
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Edition: juillet 21, 2000
Page: 59
!
*
LANGAGE C++
(Bjarn STROUSTRUP)
LANGAGE EIFFEL
60
JAVA
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 60
LANGAGE C++
La Classe d'Objets
Classe, Fonctions Membres/Amies, Caract.
61
Publiques/Prives.
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
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
LANGAGE C++
l
La Classe d'Objets
(suite)
63
+
8 class introduit une dfinition de classe
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 63
LANGAGE C++
l
La Classe d'Objets
(suite)
line)
64
fonction membre.
void
article::ajouter
q){
qte = qte + q;
}
(int
8 Commentaires C++.
4
4
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 64
LANGAGE C++
l
La Classe d'Objets:
(Forme Gnrale)
65
fields vs functions
class nom {
field members
function 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
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
LANGAGE C++
l
La Classe d'Objets
(membres statiques)
67
class C{
public: static int s;
int a;
}
4
Rfrence: instance.membre
classe::membre
C x,y;
x.s,
Intrt:
y.s,
>
C::s
mme objet.
'
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 67
LANGAGE C++
l
La Classe d'Objets
68
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:
Comparer
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 68
LANGAGE C++
l
La Classe d'Objets
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
LANGAGE C++
l
La Classe d'Objets
Exercices
70
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 70
LANGAGE C++
l
Constructeurs et Destructeurs
71
(fonction membre)
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 71
LANGAGE C++
l
Constructeurs et Destructeurs
(Rappel langages conventionnels )
72
4 Sortie du bloc
(ou Fin de pgme)
4 New
4 Free
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 72
LANGAGE C++
l
Constructeurs et Destructeurs
73
{ Type p;
{ Type' q;
2
3
2
3
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 73
LANGAGE C++
l
Constructeurs et Destructeurs
74
p = new type;
free p;
p = new type';
free p;
qui
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).
FGHHJ
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 75
LANGAGE C++
l
Constructeurs et Destructeurs
(Usage)
76
{
X x;
X y(par);
// X (TypeParam) appel
Constructeur dfaut est assez utile. Forme abrge et habituelle d'une dclaration:
X a,b,c;
En ralite:
i.e.
X x
X x = X();
X y(par)
X y = X(par);
Dclaration + Initilalisation
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 76
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
78
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
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:
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 79
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
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 80
LANGAGE C++
l Constructeurs et Destructeurs
(operator=)
81
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
article* operator=(artcilce&){};
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 82
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
LANGAGE C++
l Classe de Base et Drive
Forme:
class
(Relation d'Hritage)
public
84//caractristique
de D };
Exemple:
typedef enum {S,M,L,XL} SIZE;
class
vetement:
article{
SIZE taille;
char coloris[10];
// ...
};
Un seul niveau
public
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 84
LANGAGE C++
l Classe de Base et Drive
(Relation d'Hritage)
Constructeurs:
85
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()
{}
};
article:
vet:
coloris "jaune"
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 86
LANGAGE C++
l Classe de Base et Drive
87
"
1er niveau:
&
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 87
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
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
LANGAGE C++
l Gnricit
(template)
Fonction gnrique:
r
template
<class
90Type>
g() {}
// fonction g de param T
main(){
int x; float y; article z;
(x); g(y);
g(z);
}
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 90
LANGAGE C++
l Gnricit
(template)
Classe gnrique:
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
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 91
LANGAGE C++
l Collections et Itrateurs
Z
Itrateur:
Mcanisme
permttant
de
collection pour en traiter un un les lments
92
parcourir
une
]
for (i=0; i<M; i++)
cout << t[i];
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 92
LANGAGE C++
l Collections et Itrateurs
93
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 93
LANGAGE C++
l Collections et Itrateurs:
Exemple
Classe Collection
94
//
// Collection generique
//
~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
95
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 95
LANGAGE C++
l Collections et Itrateurs:
Exemple
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);
_____________________________________________________________________________________________________________
Najib TOUNSI (pour EMI 3e An.)
Version: juillet 21, 2000
Page: 96
//init
LANGAGE C++
l Collections et Itrateurs:
Exemple
#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
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