Vous êtes sur la page 1sur 65

iUT

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

Types de base, types complexes


les types de base :
- entier, rel, boolen, caractre, chane

un type plus complexe :


- tableau

suffisant pour reprsenter :


- les notes dune promotion (tableau dentiers)
- un mot, une phrase (tableau de caractres)
- les lves dune promotion (tableau de chanes)

mais comment reprsenter, par exemple, les


clients dune socit?
- un client : un nom, un prnom, un numro, une adresse, etc.
- les clients dune socit tableau de clients
Algorithmique 3 : Agrgats

Nouveaux types : les agrgats


Agrgats "homognes" (types identiques)
- exemples : point dans le plan :
type Point = agrgat
abscisse : rel
ordonne : rel
fin

- identit d'une personne


type Identit = agrgat
nom : chane
prnom : chane
fin

Agrgats " htrognes " (types diffrents)


- exemples : adresse dune personne:
type Adresse = agrgat
numro : entier
voie : chane
codePostal : chane
ville : chane
fin

- 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

Dclaration de variables de type agrgat :


variables

mrA : Client
pointA, pointB : Points
Algorithmique 3 : Agrgats

Distinction type - variable


Un type :
- Un modle de structure de donnes
- Un "moule" utilis pour la dclaration de variables d'un
algorithme
- Il permet la dclaration de paramtres dans les sousalgorithmes

Une variable:
- Une entit "dclare" en se rfrant un modle fourni
par un type
- Entit effectivement oprationnelle dans un algorithme
Algorithmique 3 : Agrgats

Accs aux agrgats


Accs en criture et en lecture :
saisir(pointA.abscisse) ;
saisir(mrA.numClient) ;
saisir(mrA. rsidence.numro) ;

afficher(pointA.abscisse)
afficher(mrA.numClient)
afficher(mrA.rsidence.numro)

Affectation d'un attribut


pointA.abscisse 3
mrA.numClient "AZ345"
mrA.rsidence.numro 45

Affectation globale : par affectation de tous les


attributs homonymes
mrA, jojo : Client
jojo Client mrA

possible seulement si le client mrA est


entirement initialis
Algorithmique 3 : Agrgats

(Accs aux agrgats, suite)

Comparaison :
si pointA.abscisse = pointB.abscisse alors
si pointA.abscisse = pointB.ordonne alors
si jojo =Client mrA alors

champ par champ


ok si champs de mme type
ok si mme agrgats

Concrtement, on doit construire les fonctions


correspondantes
- afficher, saisir :
afficherX(<agrgat X>)
saisirX(<agrgat X>)

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}

variables pointA, pointB : Point


dbut
saisirPoint(pointA)
saisirPoint(pointB)
si pointA =Point pointB alors dplacerPoint(pointA, 3, 3)
fin
Procdure saisirPoint(unPoint)

Procdure dplacerPoint(unPoint, x, y)

{saisie dun point}

{ajoute x (y) labscisse (lordonne) dun point}

paramtre (R) unPoint : Point


dbut
afficher("Abscisse du point :")
saisir(unPoint.abscisse)
afficher("Ordonne du point :")
saisir(unPoint.ordonne)
fin

paramtres (D/R) unPoint : Point


(D) x, y : entiers
dbut
unPoint.abscisse unPoint.abscisse + x
unPoint.ordonne unPoint.ordonne + y
fin

Algorithmique 3 : Agrgats

Tableaux d'agrgats
Exemple : un tableau contenant les clients d'une socit

Dclaration

tabClients : tableau [1, TMAX] de Clients

Accs
le client enregistr dans la

tabClients[1]
tabClients[3].numClient
tabClients[2].rsidence.ville

1re case du tableau


le numro de client du client enregistr
dans la 3me case du tableau
la ville o rside le client enregistr
dans la 2me case du tableau

Attention l'ordre d'accs !


du plus gnral au plus prcis (voir la hirarchie des types)
Algorithmique 3 : Agrgats

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

saisirTabClients (tabClients, nbVal)


{saisit nbVal clients et les enregistre dans le tableau tabClients}
paramtres
(R) tabClient :
TableauClients
(R) nbVal :
entier
variable unClient : Client
continuer : boolen
dbut
nbVal 0
{aucun client saisi au dpart}
saisirClient(unClient, continuer)
{on en saisit un}
tant que continuer et nbVal < Tmax faire {on continue }
nbVal nbVal + 1
tabClient[nbVal] Client unClient {on met le client saisi dans
le tableau}
saisirClient(unClient, continuer)
{on en saisit un autre}
ftq
si (non continuer)
afficher( Saisie de , nbVal, clients russie. )
sinon( Saisie de , nbVal, clients, les autres ont t ignors,
plus de place dans le tableau. )
fsi
Algorithmique 3 : Agrgats
11
fin

Procdure clientsUneVille (tabInit, tabRsult, nbInit, nbRsult, laVille)


{remplit le tableau tabRsult avec lindice des clients du tableau tabInit qui habitent
dans une ville donne}
paramtres
(D) tabInit:
TableauClients
(R) tabRsult :
tableau [1, Tmax] dentiers
(D) nbInit :
entier
(R) nbRsult :
entier
(D) laVille :
chane
variable cpt : entier
dbut
nbRsult 0
{parcours du tableau initial, la recherche de clients habitant laVille}

pour cpt 1 nbInit faire


si (tabInit[cpt].rsidence.ville) = laVille
{on stocke lindice du client habitant dans laVille dans le tableau des indices}

alors

nbRsult nbRsult + 1
tabRsult[nbRsult ] cpt

fsi
fpour
fin

Algorithmique 3 : Agrgats

12

Procdure afficherTabClients (tabClient, nbVal )


{affiche les nbClients du tableau tabClient}
paramtres
(D) tabClient :
TableauClients
(D) nbVal :
entier
variable cpt : entier
dbut
pour cpt 1 nbVal faire afficherClient(tabClient[cpt])
fin
Procdure afficherClientsUneVille(tabIndices, nbIndices, tabClient)
{affiche les infos concernants les clients dont les indices sont stocks dans tabIndices}
paramtres
(D) tabIndices : tableau [1, Tmax] dentiers
(D) nbIndices : entier
(D) tabClient :
TableauClients
variable cpt : entier
dbut
pour cpt 1 nbIndices faire afficherClient(tabClient[tabIndices[cpt]])
fin
Algorithmique 3 : Agrgats

13

Procdure saisirClient (leClient, encore)


{saisit les attributs du client leClient}

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

Structuration des donnes


La bibliothque est situe dans un des btiments de l'institut. Elle est
organise en rayons.
Chaque rayon a un emplacement physique dans la bibliothque : il est
repr par un numro de range et un numro d'tagre dans la range.
Chaque rayon porte un code informant sur le contenu des livres exposs sur
ce rayon. Sur un rayon, on peut ranger jusqu' 50 ouvrages.
Chacun de ces ouvrages contient une fiche rappelant la cote de l'ouvrage,
le nom de l'auteur (ou les noms des auteurs), le nombre de pages, et
indiquant si l'exemplaire peut sortir ou non de la bibliothque. Cette fiche
comporte aussi des indications relatives au prt : nom de l'emprunteur, date
de l'emprunt, date de retour au plus tard.

Algorithmique 3 : Agrgats

15

Comment choisir une structuration?


Reprer des units de donnes qui ont un sens
- regroupements d'attributs dpendants
- traitement(s) effectuer globalement sur le
regroupement d'attributs
type Bibliothque = agrgat
type Rayon = agrgat
lieu : Adresse
emplacement: NumRayon
salle: Tableau [1, 100]
sesLivres : Tableau [1, 50]
de Rayons
de Livres
fin
code : entier
fin
Algorithmique 3 : Agrgats

16

Structuration des donnes


Bibliothque
salle

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

(Comment choisir une structuration, suite)


type NumRayon = agrgat
numRange, numEtagre : entiers
fin
type Livre = agrgat
description : Bouquin
prtLivre: Prt
fin
type Bouquin = agrgat
cote : entier
auteur : TabChanes
nbPages : entier
disponible : boolen
fin

{sa description : auteur, titre, dition, etc.}


{informations relatives au prt}

type Prt = agrgat


emprunteur : chane
datedbut, datefin : chane
fin

Algorithmique 3 : Agrgats

18

Etude de cas : lagrgat Train


Un amateur de modles rduits de train dcide de grer sa
collection en dfinissant un agrgat Modle, et, pour chaque
train quil constitue avec ces modles, un agrgat Train :
type Modle = agrgat
code : entier
nature : chane
couleur : chane
marque : chane
chelle : chane
prix : entier
fin

type Train = agrgat


numro : entier
composition : tableau[1, MAX]
de Modles
longueur : entier
fin

constante (MAX : entier) 50


Algorithmique 3 : Agrgats

19

A chaque modle a t attribu un numro dordre code ;


la nature du modle est le type de vhicule (loco
lectrique, wagon couvert, wagon silo, autorail, voiture
corail, etc.) ; la couleur est la couleur dominante du
modle ; la marque est celle du fabricant ; chelle
dsigne lchelle de rduction ; le prix est le prix dachat.
- Par exemple, le modle de code 8294 est une loco
vapeur, de couleur noire, de marque Joujou, dchelle
Rhb, de prix 125 euros.
Un train a un numro, une composition reprsente par
un tableau donnant la liste des modles qui le composent,
en allant de la tte du train vers la queue. La longueur du
train est par dfinition le nombre de modles quil contient.

Algorithmique 3 : Agrgats

20

1.

crire une fonction boolenne qui permet de vrifier si


deux modles donns ont mme nature et mme
chelle.

2.

crire une procdure qui calcule le prix total dun train


donn et le prix moyen des modles le composant.

3.

crire une fonction boolenne qui permet de vrifier


que les tous les modles composant un train ont une
mme chelle.

4.

crire un algorithme qui


saisit puis affiche un train leTrain ;
informe lutilisateur de la longueur de leTrain ;
permet de vrifier le bon fonctionnement des sousalgorithmes dfinis ci-dessus
Algorithmique 3 : Agrgats

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)

En allant plus loin : chaque champ a ses propres


traitements
- par exemple:
La saisie d'un client est propre aux variable de type
Client
La comparaison de 2 adresses est propre aux variables
de type Adresse
Il faudrait regrouper avec chaque champ les

traitements qui lui sont propres


Notion de classe :
regroupement donnes + traitements
Algorithmique 3 : Classes

24

Rapprochement des types de donnes


et des traitements correspondants
Point
abscisse, ordonne
saisirPoint
afficherPoint
dplacerPoint

information reprsente
traitements prvus

Client
numClient, personne, rsidence information reprsente
saisirClient
afficherClient
traitements prvus
MiseAjourAdresse

Au lieu de dclarer des agrgats Point et Client,


on peut dclarer des classes Point et Client.
Ces classes vont associer les donnes et les
traitements correspondants.
Algorithmique 3 : Classes

25

Classes Point et Client


classe Point
Attributs :
abscisse, ordonne : rels
Mthodes:
saisirPoint()
afficherPoint()
dplacerPoint(x,y)

{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

Les notions de Classe et Objet


Une classe est dfinie par
- La structure de ses donnes (appeles "attributs")
partie descriptive de la classe
- Ses mthodes : Mprocdures, Mfonctions
pour manipuler ses donnes,
et cooprer avec d'autres classes
partie procdurale de la classe
Algorithmique 3 : Classes

27

(Les notions de Classe et Objet, suite)

Un objet est une instance d'une classe


Exemple :
variables p1, p2 : Point
- p1 et p2 sont dclars des instances de la classe
Point
- ces objets ont les mmes attributs que la classe
et disposent de tout le "savoir-faire" de la classe:
p1 et p2 ont tous deux une abscisse et une ordonne
p1 et p2 "savent" s'afficher, se dplacer

Algorithmique 3 : Classes

28

(Les notions de Classe et Objet, suite)

Objet : extension de la notion de variable


une variable est d'un certain type
un objet est une instance d'une certaine classe

Classe : extension de la notion de type


avec des mthodes en plus

Diffrence principale entre classes et agrgats:


l'encapsulation
C'est dire la possibilit de protger des donnes :
- elles sont accessibles uniquement partir des mthodes
- elles sont "prives".
Algorithmique 3 : Classes

29

Encapsulation
Exemple : la classe Point
Attributs : abscisse et ordonne
Mthodes saisirPoint, afficherPoint, dplacerPoint

Soit p1 et p2 deux instances de la classe


Un algorithme n'a pas le droit de modifier leur abscisse ou leur
ordonne dans le but de saisir ou de dplacer le point.
Par contre,grce leur mthodes, p1 et p2 peuvent modifier
leur propre abscisse ou ordonne dans le but de "se" saisir,
ou de se dplacer.

De l'extrieur (quand on est hors classe), on ne voit,


et on ne peut utiliser, que les mthodes.
Algorithmique 3 : Classes

30

absc()

classe Point
(moule)

ord()
saisirPoint()

mthodes

dplacerPoint(x,y)

Les attributs qui servent construire la classe sont cachs.


De l'extrieur, on ne voit que les mthodes.
En revanche, on peut rendre des attributs accessibles en
dfinissant explicitement des mthodes d'accs:
Une mthode absc() qui retournera l'abscisse d'un point
Une mthode ord() qui retournera l'ordonne d'un point

Mais il faudra se servir des autres mthodes pour modifier


ces attributs.
Algorithmique 3 : Classes

31

Rcapitulation
Agrgats : types construits
(par opposition aux types de base, tels que entier, rel, caractre,
boolen, chane)

Toutes leurs composantes sont "publiques".


Une variable peut tre dclare d'un type construit.
Exemple
type Point = agrgat
absc : rel
ord : rel
fin
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

32

(Rcapitulation, suite)

Classes : des catgories d'objets


- moules pour construire des objets similaires
- regroupent des donnes, mais aussi des fonctions et procdures
(mthodes) utiles la manipulation de ces donnes

Toutes les donnes sont "prives".


- Ceci permet la protection des donnes (encapsulation)

Une variable peut tre dclare instance d'une classe.


- C'est alors un objet de la classe
Exemple
classe Point
Attributs: absc, ord : rels
Mthodes: saisirPoint()

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

classes, ou bien programmeurs de classes


Algorithmique 3 : Classes

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)

{saisit un ensemble d'entiers}


{affiche un ensemble}
{nombre dlments de lensemble}
{VRAI si lensemble est vide, FAUX sinon}
{VRAI si lensemble contient lentier elt,
FAUX sinon}

Mfonction ajouter(elt) retourne (boolen)


{VRAI si l'entier elt a pu tre ajout lensemble, FAUX sinon [manque de place]}

Mfonction retirer(elt) retourne (boolen)


{VRAI si l'entier elt a pu tre retir de lensemble, FAUX sinon [l'entier nappartient pas
lensemble]

Algorithmique 3 : Classes

36

Algorithme Ensemble
variables

ensA, ensB : EnsembleEntiers


val : entier

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

Appel des mthodes :


identique l'accs aux donnes
Exemple : ensA.saisirEns()
- utilisation du point
- sa gauche : la "cible", objet auquel est appliqu la mthode
- sa droite : la mthode appliquer
on applique la mthode saisirEns() la cible ensA
cest dire : saisie de l'ensemble ensA
- Cette mthode ne retourne pas un rsultat, c'est une
Mprocdure (mais la cible est modifie).
- Si elle retournait un rsultat, ce serait une Mfonction.
Algorithmique 3 : Classes

38

Dans de nombreux langages objets, interprtation


des mthodes en termes de "messages"
Exemples :
ensA.saisirEns()
"ensemble ensA, saisis-toi "
- Le message "saisirEns" est envoy l'objet ensA qui ragit
en affectant des valeurs ses donnes prives.
- L'ensemble cible est modifi.
ensA.afficherEns()
"ensemble ensA, affiche-toi "
- Le message "afficherEns" est envoy l'objet ensA qui
ragit en affichant ses donnes prives.
- L'ensemble cible n'est pas modifi.
Algorithmique 3 : Classes

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

Dfinition une classe


classe <NomClasse>
Attributs attribut1 : type1

attributK : typeK

Mthodes
Mprocdure proc1()

Mprocdure procn()
Mfonction fonc1() retourne()

Mfonction foncn() retourne()


Algorithmique 3 : Classes

{}
{}
{}
{}
43

Dfinition des mthodes dune classe


paramtre implicite cible : lobjet auquel est envoy la mthode.
Mprocdure proc (par1, , parK)
{}
paramtres (D) par1 : type1

(R) parK : typeK


(D/R) cible : NomClasse
dbut

fin
Algorithmique 3 : Classes

paramtre cible pour toutes


les Mprocdures et Mfonctions,
(D), (R) ou (D/R).
Ex: Mprocdure afficherEns()
paramtres : (D) cible :
EnsembleEntier

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}

{retourne labscisse dun point}


{retourne lordonne dun point}

{ajoute x l'abscisse et y
l'ordonne d'un point}

Algorithmique 3 : Classes

45

Dfinition des mthodes


Mprocdure saisirPoint()
{saisit un point}
paramtre (R) cible : Point
dbut
afficher("Donnez labscisse et
lordonne dun point : ")
saisir(cible.abscisse, cible.ordonne)
fin

Mprocdure afficherPoint()
{affiche un point}
paramtre
(D) cible : Point
dbut
afficher("Abscisse et ordonne du
point : ") ;
afficher(cible.abscisse, cible.ordonne)
fin

Mprocdure dplacerPoint(val1, val2)


paramtre
(D/R) cible : Point
{la cible est en donne/rsultat }
(D) val1, val2 : entiers
dbut
cible.abscisse cible.abscisse + val1
cible.ordonne cible. ordonne + val2
Algorithmique 3 : Classes
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

Paramtre implicite cible devient explicite dans


l'criture des mthodes.
(mais reste implicite en C++)
Algorithmique 3 : Classes

47

Fonction de manipulation de points


(hors classe)
Fonction comparePoint(pt1, pt2) retourne boolen
paramtres pt1, pt2 : points
{retourne vrai si les points pt1 et pt2 sont identiques}

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

1. Pas d'agrgats, pas de classes


Point = couple (abscisse, ordonne) de rels
Procdure saisirPoint(uneAbs, uneOrd)
paramtres (R) uneAbs, uneOrd : rels
dbut
.
saisir(uneAbs, uneOrd)
fin

aucune notion de point


Appel de la procdure : saisirPoint(abscisse, ordonne)
Algorithmique 3 : Classes

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

Appel de la procdure : saisirPoint(lePoint)


Algorithmique 3 : Classes

52

3. Une classe Point


classe Point
Attributs :
Mthodes:

abscisse, ordonne : rels


MProcdure saisirPoint()

MProcdure saisirPoint()
paramtre (R) cible: Point
dbut
.
saisir(cible.abscisse, cible.ordonne)
fin

notion de point, avec traitements associs


A
Algorithmique 3 : Classes

53

Rcapitulation
Procdure saisirPoint(uneAbs, uneOrd)
pas de variable point

Appel : saisirPoint(abscisse, ordonne)

Procdure saisirPoint(unPoint)
un agrgat point

Appel : saisirPoint(lePoint)

MProcdure saisirPoint()

un objet point (instance


de la classe Point)

Appel : lePoint.saisirPoint()
Algorithmique 3 : Classes

54

Retour sur l'encapsulation


Les dtails de la construction de la classe peuvent
tre utilement dissimuls l'utilisateur:
Celui-ci n'a pas besoin de savoir comment est construite
la classe, mais seulement de savoir comment s'en servir.
Il n'a pas se soucier de dtails dimplmentation, mais
seulement de ce que lui permet la classe.
Il ne peut pas faire de manuvre imprvue.
Il peut raisonner un niveau conceptuel plutt qu'en
termes dimplmentation.

Remarque : quand on parle d'utilisateur on pense


aux programmeurs qui vont utiliser la classe.
Algorithmique 3 : Classes

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)

Utilisateur de lapplication (C)


Il na pas besoin de savoir comment son
application est programme
Algorithmique 3 : Classes

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

On reprend les agrgats Modle et Train tudis dans le


chapitre prcdent.

type Modle = agrgat


code : entier
nature : chane
couleur : chane
marque : chane
chelle : chane
prix : entier
fin

type Train = agrgat


numro : entier
composition : tableau[1, MAX]
de Modles
longueur : entier
fin

Algorithmique 3 : Classes

59

On dcide d'quiper les Trains de procdures et de fonctions.


Pour cela, on remplace l'agrgat Train par une classe Train :
classe Train
attributs
numro : entier
composition : tableau[1, MAX] de Modles
longueur : entier
mthodes
Mprocdure saisirTrain()
{saisie dun train}
Mprocdure afficherTrain()
{affichage dun train}
... [autres mthodes non dcrites]

Algorithmique 3 : Classes

60

1.

crire une Mfonction nbVCC(uneCouleur) qui donne,

tln
e
,p

b
sm
via

d
.h
o
rc
u
voiture corail ou voiture couchette et de couleur
couleur.

2.

crire la Mprocdure ajouter(unModle, position, ok)


qui ajoute le modle unModle la suite de celui qui se
trouve en position position (un entier entre 1 et la
longueur du train), condition que lchelle du modle
soit celle du train (suppos ne comporter que des voitures
de mme chelle), et que la longueur totale ne dpasse
pas MAX. Le boolen ok signale si lajout a pu se faire ou
non (on supposera disposer dune affectation pour les
modles, quon notera )
Algorithmique 3 : Classes

61

3.

crire un algorithme qui


saisit puis affiche un train leTrain ;
informe lutilisateur de la longueur de leTrain ;
appelle la mthode ajouterModle, aprs avoir
demand lutilisateur le modle ajouter, et la
position o doit se faire lajout. On supposera disposer
dune fonction saisirM(unModle) pour la saisie dun
modle.
si lajout a pu se faire, lalgorithme affichera nouveau
leTrain, sinon, il signalera lchec lutilisateur

Algorithmique 3 : Classes

62

4. Soit le type suivant


Type Entrept = agrgat
tabTrain : tableau [1, MAX] de Trains
nbTrains : entier
fin
Quelle est linstruction ncessaire pour
-

afficher les trains qui sont actuellement lentrept ?

afficher juste le numro des trains qui sont lentrept ?

5. Ecrire une fonction qui permet de dterminer si les


locomotives de deux trains donns sont de mme marque.
Algorithmique 3 : Classe

63

fin Volume 3

Algorithmique 3 : Classes

64

Vous aimerez peut-être aussi