Professional Documents
Culture Documents
ORSAY
Universit Paris XI
I.U.T. d'Orsay
Dpartement Informatique
Anne scolaire 2003-2004
Algorithmique : Volume 3
Agrgats
Classes
Ccile Balkanski, Nelly Bensimon, Grard Ligozat
- client :
type Client = agrgat
numClient : chane
personne : Identit
rsidence : Adresse
fin
Algorithmique 3 : Agrgats
Hirarchie de types
Client
rsidence
numClient
personne
chane
Identit
Adresse
numro
nom
voie
ville
prnom
entier
chane
code
Postal
chane
chane
chane
Algorithmique 3 : Agrgats
chane
3
Dfinir un agrgat
type <nomAgrgat> = agrgat
attribut1 : type1
attribut2 : type2
attributK : typeK
fin
mrA : Client
pointA, pointB : Points
Algorithmique 3 : Agrgats
Une variable:
- Une entit "dclare" en se rfrant un modle fourni
par un type
- Entit effectivement oprationnelle dans un algorithme
Algorithmique 3 : Agrgats
afficher(pointA.abscisse)
afficher(mrA.numClient)
afficher(mrA.rsidence.numro)
Comparaison :
si pointA.abscisse = pointB.abscisse alors
si pointA.abscisse = pointB.ordonne alors
si jojo =Client mrA alors
ex: afficherPoint(unPoint)
ex: saisirClient(unClient)
Attention :
- Ne pas utiliser sans prcaution affichage, saisie, affectation, et
comparaison
- Une bonne organisation de la programmation doit fournir l'utilisateur
les fonctions correspondantes
Algorithmique 3 : Agrgats
Exemple
Algorithme ManipPoints
{manipulation de points}
Procdure dplacerPoint(unPoint, x, y)
Algorithmique 3 : Agrgats
Tableaux d'agrgats
Exemple : un tableau contenant les clients d'une socit
Dclaration
Accs
le client enregistr dans la
tabClients[1]
tabClients[3].numClient
tabClients[2].rsidence.ville
Algorithme Clients
{saisit un tableau de clients, et cre un tableau dindices des clients rsidant dans une
ville donne}
types
Client = agrgat
fin
TableauClients = tableau [1, Tmax] de Clients
variables
tabSocit : TableauClients
tabUneVille : tableau [1, Tmax] dentiers
nbClients, nbClientsVille : entiers
uneVille : chane
dbut
{saisie et affichage du tableau de clients}
saisirTabClients (tabSocit, nbClients) ; afficherTabClients (tabSocit, nbClients)
{saisie de la ville des clients recherchs}
afficher( Vous recherchez les clients pour quelle ville ? ); saisir(uneVille)
{construction du tableau contenant les indices des clients de uneVille}
clientsUneVille(tabSocit, tabUneVille, nbClients, nbClientsVille , uneVille)
{Affichage des infos pertinentes}
afficherClientsUneVille(tabUneVille, nbClientsVille, tabSocit)
Algorithmique 3 : Agrgats
fin
10
alors
nbRsult nbRsult + 1
tabRsult[nbRsult ] cpt
fsi
fpour
fin
Algorithmique 3 : Agrgats
12
13
paramtres
(R) leClient : Client ; (R) encore : boolen
variables rponse : boolen
dbut
afficher ("Nom et prnom ? ") ;
saisir (leClient.personne.nom, leClient.personne.prnom)
afficher ("numro de client ? ") ; saisir (leClient.numClient)
afficher ("adresse ? ") ; saisirAdresse(leClient.rsidence)
afficher ("Un autre client saisir ? (O ou N, SVP) ") ; saisir(rponse)
encore (rponse = O ou rponse = o)
fin
Procdure afficherClient (unClient)
{affiche les attributs du client unClient}
paramtres
(D) unClient : Client
dbut
afficher ("Nom et prnom : ")
afficher (unClient.personne.nom) ; afficher (unClient.personne.prnom)
afficher ("numro de client : ") ; afficher (unClient.numClient)
afficher ("adresse : ") ; afficherAdresse(unClient.rsidence)
fin
Algorithmique 3 : Agrgats
14
Algorithmique 3 : Agrgats
15
16
lieu
Tableau de rayons
Adresse
Rayon
code
sesLivres
emplacement
entier
Tableau de Livres
NumRayon
numRange
numEtagre
Livre
entier
entier
description
Bouquin
Algorithmique 3 : Agrgats
prtLivre
Prt
17
Algorithmique 3 : Agrgats
18
19
Algorithmique 3 : Agrgats
20
1.
2.
3.
4.
21
Classes
1. Introduction, motivation
2. Utilisation dune classe
3. Dfinition dune classe
4. Comparaison: agrgats, classes
5. Etude de cas : la classe Train
Algorithmique 3 : Classes
22
Motivation : un exemple
Retour l'agrgat Client : chaque champ a besoin
d'une fonction d'affichage propre
- afficheClient , afficheChane, afficheAdresse
- Mais :
afficheClient n'est utilis qu'avec
un paramtre de type Client
afficheChane
. paramtre de type chane
afficheAdresse
. paramtre de type Adresse
Il faudrait regrouper l'affichage avec le champ
correspondant
Algorithmique 3 : Classes
23
(Motivation : un exemple)
24
information reprsente
traitements prvus
Client
numClient, personne, rsidence information reprsente
saisirClient
afficherClient
traitements prvus
MiseAjourAdresse
25
{saisit un point}
{affiche l'abscisse et l'ordonne d'un point}
{ajoute x l'abscisse et y l'ordonne d'un point}
classe Client
Attributs :
numClient : chane
personne : Identit
rsidence : Adresse
Mthodes
saisirClient()
afficherClient()
MiseAjourAdresse(nouvelleAdresse)
{saisit un Client}
{affiche les infos relatives un client}
{remplace l'adresse avec celle passe
en paramtre}
Algorithmique 3 : Classes
26
27
Algorithmique 3 : Classes
28
29
Encapsulation
Exemple : la classe Point
Attributs : abscisse et ordonne
Mthodes saisirPoint, afficherPoint, dplacerPoint
30
absc()
classe Point
(moule)
ord()
saisirPoint()
mthodes
dplacerPoint(x,y)
31
Rcapitulation
Agrgats : types construits
(par opposition aux types de base, tels que entier, rel, caractre,
boolen, chane)
u p1.absc
v p2. ord
afficher(p2.ord)
p1.absc x
p2.ord y
Algorithmique 3 : Classes
32
(Rcapitulation, suite)
variables:
p1, p2 : Point
u, v, x,y : rels
u p1.absc
v p2. ord
afficher(p2.ord)
p1.absc x
p2.ord y
Algorithmique 3 : Classes
INTERDIT !
33
Remarques
Comparaison Algo/C++
- en algorithmique,
toutes les donnes sont prives,
et toutes les mthodes sont publiques
- en C++ : on pourra dclarer
des donnes prives et des donnes publiques
des mthodes prives et des mthodes publiques
Suite : il faut savoir
- utiliser une classe
- dfinir une classe
Dornavant, vous pouvez tre utilisateurs de
34
Classes
1. Introduction, motivation
2. Utilisation dune classe
3. Dfinition dune classe
4. Comparaison: agrgats, classes
5. Etude de cas : la classe Train
Algorithmique 3 : Classes
35
Un exemple
classe EnsembleEntiers
Attributs : ???
cachs
Mthodes:
Mprocdure saisirEns()
Mprocdure afficherEns()
Mfonction cardinal() retourne (entier)
Mfonction vide() retourne (boolen)
Mfonction contient(elt) retourne (boolen)
Algorithmique 3 : Classes
36
Algorithme Ensemble
variables
dbut
ensA.saisirEns()
afficher ("Voici lensemble saisi :")
ensA.afficherEns()
afficher ("Cet ensemble contient", ensA.cardinal(), "lments.")
si ensA.vide()
alors
afficher ("Il est donc vide.")
sinon afficher ("Il n'est donc pas vide.")
afficher ("Quel lment voulez vous rechercher ? ")
saisir(val)
si ensA.contient(val)
alors
afficher ("Votre ensemble contient", val)
sinon afficher ("Votre ensemble ne contient pas", val)
fin
Algorithmique 3 : Classes
37
38
39
Spcifications compltes
Pour pouvoir utiliser les mthodes il faut connatre le nom, le
type et lattribut des paramtres.
Exemples :
Mprocdure saisirEns()
{saisit un ensemble d'entiers}
paramtre (R) cible : Ensemble
Mfonction contient? (elt) retourne (boolen)
{retourne vrai si la cible contient elt, faux sinon}
paramtres (D) cible : Ensemble
(D) elt : rel
Mfonction ajouter(elt) retourne (boolen)
{VRAI si l'entier elt a pu tre ajout lensemble, FAUX sinon [manque de place]}
paramtres (D/R) cible : Ensemble
(D) elt : rel
Algorithmique 3 : Classes
40
Remarque :
objet cible et objet paramtre
Exemple :
Mprocdure copier(unEns)
{ c o p i e s l e s lments de lensemble unEns dans lensemble cible. Si
lensemble cible contenait dj des lments, ceux-ci sont perdus}
paramtres (R) cible : Ensemble
(D) unEns : Ensemble
Appel :
ensA.copier(ensB)
Les lments de ensB, ensemble paramtre (qui doit tre dfini car
paramtre (D)), sont copis dans lensemble cible ensA. Si ensA
contenait dj des lments, ceux-ci sont perdus.
Algorithmique 3 : Classes
41
Classes
1. Introduction, motivation
2. Utilisation dune classe
3. Dfinition dune classe
4. Comparaison: agrgats, classes
5. Etude de cas : la classe Train
Algorithmique 3 : Classes
42
attributK : typeK
Mthodes
Mprocdure proc1()
Mprocdure procn()
Mfonction fonc1() retourne()
{}
{}
{}
{}
43
fin
Algorithmique 3 : Classes
44
Un exemple
classe Point
Attributs :
abscisse, ordonne : rels
Mthodes :
{Saisie et affichage}
Mprocdure saisirPoint()
Mprocdure afficherPoint()
{Mthodes d'accs}
Mfonction abs() retourne (rel)
Mfonction ord() retourne (rel)
{Mthodes de Manipulation}
Mprocdure dplacerPoint(x,y)
{saisit un point}
{affiche les coordonnes dun point}
{ajoute x l'abscisse et y
l'ordonne d'un point}
Algorithmique 3 : Classes
45
Mprocdure afficherPoint()
{affiche un point}
paramtre
(D) cible : Point
dbut
afficher("Abscisse et ordonne du
point : ") ;
afficher(cible.abscisse, cible.ordonne)
fin
46
Remarques importantes !
Accs aux donnes prives (cible.abscisse et
cible.ordonne) permis car on est lintrieur de
la classe.
Si hors classe : faire appel aux fonctions d'accs:
unPoint.abs() et unPoint.ord()
Lecture alors possible, mais modifications interdites
47
dbut
retourne (pt1.abs() = pt2.abs() et pt1.ord() = pt2.ord() )
fin
Attention
retourne (pt1.abscisse = pt2. abscisse ET pt1.ordonne = pt2. ordonne
Interdit car accs aux donnes prives dans un contexte hors classe
Algorithmique 3 : Classes
48
Algorithme ManipPoint
classe Point
variables
pointX, pointY : Points
dbut
pointX.saisirPoint()
pointY.saisirPoint()
{2 objets instances de la classe point}
afficher ("Voici les coordonnes des deux points saisis : ")
pointX.afficherPoint()
pointY.afficherPoint()
{dplacement du premier point}
pointX.abscisse pointX.abscisse + 3
pointX.dplacer(3,3)
pointX.ordonne pointX. ordonne + 3
afficher ("Voici le premier point aprs un dplacement de 3,3 : ")
pointX.afficherPoint() ;
{comparaison des deux points}
si comparePoint(pointX, pointY)
alors afficher( Les deux points sont maintenant identiques. )
sinon afficher( Les deux points sont distincts. )
fsi
fin
Algorithmique 3 : Classes
49
Classes
1. Introduction, motivation
2. Utilisation dune classe
3. Dfinition dune classe
4. Comparaison: agrgats, classes
5. Etude de cas : la classe Train
Algorithmique 3 : Classes
50
51
2. Un agrgat Point
type Point = agrgat
abscisse, ordonne : rels
fin
Procdure saisirPoint(unPoint)
paramtres (R) unPoint : Point
dbut
.
saisir(unPoint.abscisse, unPoint.ordonne)
fin
notion de point
52
MProcdure saisirPoint()
paramtre (R) cible: Point
dbut
.
saisir(cible.abscisse, cible.ordonne)
fin
53
Rcapitulation
Procdure saisirPoint(uneAbs, uneOrd)
pas de variable point
Procdure saisirPoint(unPoint)
un agrgat point
Appel : saisirPoint(lePoint)
MProcdure saisirPoint()
Appel : lePoint.saisirPoint()
Algorithmique 3 : Classes
54
55
Les 3 "acteurs"
de la programmation objet
Programmeur concepteur de la classe (A)
Programmeur utilisateur de la classe (B)
Il na pas besoin de savoir comment la classe
est conue
Il na besoin que des spcification des
mthodes (partie publique de la classe)
56
Algorithmique 3 : Classes
57
Classes
1. Introduction, motivation
2. Utilisation dune classe
3. Dfinition dune classe
4. Comparaison: agrgats, classes
5. Etude de cas : la classe Train
Algorithmique 3 : Classes
58
Algorithmique 3 : Classes
59
Algorithmique 3 : Classes
60
1.
tln
e
,p
b
sm
via
d
.h
o
rc
u
voiture corail ou voiture couchette et de couleur
couleur.
2.
61
3.
Algorithmique 3 : Classes
62
63
fin Volume 3
Algorithmique 3 : Classes
64