coursalgo_v3
DESCRIPTION
informatique algorithmeTRANSCRIPT
-
iUT ORSAY Universit Paris XII.U.T. d'OrsayDpartement InformatiqueAnne scolaire 2003-2004
Algorithmique : Volume 3
Agrgats Classes
Ccile Balkanski, Nelly Bensimon, Grard Ligozat
-
Algorithmique 3 : Agrgats 1
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 2
Nouveaux types : les agrgats Agrgats "homognes" (types identiques)
- exemples : point dans le plan : - identit d'une personnetype Point = agrgat type Identit = agrgat
abscisse : rel nom : chaneordonne : rel prnom : chane fin fin
Agrgats " htrognes " (types diffrents)- exemples : adresse dune personne: - client :
type Adresse = agrgat type Client = agrgatnumro : entier numClient : chanevoie : chane personne : IdentitcodePostal : chane rsidence : Adresseville : chane finfin
-
Algorithmique 3 : Agrgats 3
Hirarchie de types
Client
chane Identit
chane
Adresse
entier
chanechane chane
chane
numClientrsidence
personne
nomprnom
numrovoie
codePostal
ville
-
Algorithmique 3 : Agrgats 4
Dfinir un agrgat
type = agrgatattribut1 : type1attribut2 : type2attributK : typeKfin
Dclaration de variables de type agrgat : variables mrA : Client
pointA, pointB : Points
-
Algorithmique 3 : Agrgats 5
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 sous-
algorithmes
Une variable:- Une entit "dclare" en se rfrant un modle fourni
par un type- Entit effectivement oprationnelle dans un algorithme
-
Algorithmique 3 : Agrgats 6
Accs aux agrgats
Accs en criture et en lecture :saisir(pointA.abscisse) ; afficher(pointA.abscisse)saisir(mrA.numClient) ; afficher(mrA.numClient)saisir(mrA. rsidence.numro) ; afficher(mrA.rsidence.numro)
Affectation d'un attributpointA.abscisse 3mrA.numClient "AZ345"mrA.rsidence.numro 45
Affectation globale : par affectation de tous les attributs homonymes
mrA, jojo : Clientjojo Client mrA possible seulement si le client mrA est
entirement initialis
-
Algorithmique 3 : Agrgats 7
(Accs aux agrgats, suite)
Comparaison :si pointA.abscisse = pointB.abscisse alors champ par champsi pointA.abscisse = pointB.ordonne alors ok si champs de mme typesi jojo =Client mrA alors ok si mme agrgats
Concrtement, on doit construire les fonctions correspondantes- afficher, saisir :
afficherX() ex: afficherPoint(unPoint)saisirX() 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 8
ExempleAlgorithme ManipPoints{manipulation de points}variables pointA, pointB : Pointdbut
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 paramtres (D/R) unPoint : Pointdbut (D) x, y : entiers
afficher("Abscisse du point :") dbutsaisir(unPoint.abscisse) unPoint.abscisse unPoint.abscisse + xafficher("Ordonne du point :") unPoint.ordonne unPoint.ordonne + ysaisir(unPoint.ordonne) fin
fin
-
Algorithmique 3 : Agrgats 9
Tableaux d'agrgatsExemple : un tableau contenant les clients d'une socit
Dclaration tabClients : tableau [1, TMAX] de Clients Accs
tabClients[1] le client enregistr dans la 1re case du tableau
tabClients[3].numClient le numro de client du client enregistr dans la 3me case du tableau
tabClients[2].rsidence.ville 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 10
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 Clientsvariables tabSocit : TableauClients
tabUneVille : tableau [1, Tmax] dentiersnbClients, nbClientsVille : entiersuneVille : 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)
fin
-
Algorithmique 3 : Agrgats 11
saisirTabClients (tabClients, nbVal){saisit nbVal clients et les enregistre dans le tableau tabClients}paramtres (R) tabClient : TableauClients
(R) nbVal : entiervariable unClient : Client
continuer : boolendbut
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 + 1tabClient[nbVal] Client unClient {on met le client saisi dans
le tableau}saisirClient(unClient, continuer) {on en saisit un autre}
ftqsi (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
fin
-
Algorithmique 3 : Agrgats 12
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 : entierdbut
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 ] cptfsi
fpourfin
-
Algorithmique 3 : Agrgats 13
Procdure afficherTabClients (tabClient, nbVal ){affiche les nbClients du tableau tabClient}paramtres (D) tabClient : TableauClients
(D) nbVal : entiervariable cpt : entierdbut
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 : entierdbut
pour cpt 1 nbIndices faire afficherClient(tabClient[tabIndices[cpt]])fin
-
Algorithmique 3 : Agrgats 14
Procdure saisirClient (leClient, encore){saisit les attributs du client leClient}paramtres (R) leClient : Client ; (R) encore : boolenvariables rponse : boolendbut
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 : Clientdbut
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 15
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 16
Comment choisir une structuration?
Reprer des units de donnes qui ont un sens- regroupements d'attributs dpendants- traitement(s) effectuer globalement sur leregroupement d'attributs
type Bibliothque = agrgat type Rayon = agrgatlieu : Adresse emplacement: NumRayon salle: Tableau [1, 100] sesLivres : Tableau [1, 50]
de Rayons de Livresfin code : entier
fin
-
Algorithmique 3 : Agrgats 17
Structuration des donnes
Bibliothque
Adresse
Livre
Bouquin
NumRayon
Prt
entier
entier
lieu salleTableau de rayons
Rayoncode
emplacement sesLivres
Tableau de Livres
description prtLivre
numRange numEtagre
entier
-
Algorithmique 3 : Agrgats 18
(Comment choisir une structuration, suite)
type NumRayon = agrgatnumRange, numEtagre : entiersfin
type Livre = agrgatdescription : Bouquin {sa description : auteur, titre, dition, etc.}prtLivre: Prt {informations relatives au prt}fin
type Bouquin = agrgat type Prt = agrgatcote : entier emprunteur : chaneauteur : TabChanes datedbut, datefin : chanenbPages : entier findisponible : boolenfin
-
Algorithmique 3 : Agrgats 19
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 type Train = agrgatcode : entier numro : entiernature : chane composition : tableau[1, MAX]couleur : chane de Modlesmarque : chane longueur : entier chelle : chane finprix : entierfin
constante (MAX : entier) 50
-
Algorithmique 3 : Agrgats 20
A chaque modle a t attribu un numro dordre code ; la nature du modle est le type de vhicule (locolectrique, wagon couvert, wagon silo, autorail, voiture corail, etc.) ; la couleur est la couleur dominante du modle ; la marque est celle du fabricant ; chelledsigne 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 21
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 sous-
algorithmes dfinis ci-dessus
-
Algorithmique 3 : Classes 22
Classes
1. Introduction, motivation2. Utilisation dune classe3. Dfinition dune classe4. Comparaison: agrgats, classes5. Etude de cas : la classe Train
-
Algorithmique 3 : Classes 23
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 24
(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 25
Rapprochement des types de donnes et des traitements correspondants
Pointabscisse, ordonne information reprsente
saisirPointafficherPoint traitements prvusdplacerPoint
ClientnumClient, personne, rsidence information reprsente
saisirClient afficherClient traitements prvusMiseAjourAdresse
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 26
Classes Point et Clientclasse Point
Attributs :abscisse, ordonne : rels
Mthodes:saisirPoint() {saisit un point}afficherPoint() {affiche l'abscisse et l'ordonne d'un point}dplacerPoint(x,y) {ajoute x l'abscisse et y l'ordonne d'un point}
classe ClientAttributs :
numClient : chanepersonne : Identitrsidence : Adresse
MthodessaisirClient() {saisit un Client}afficherClient() {affiche les infos relatives un client}MiseAjourAdresse(nouvelleAdresse) {remplace l'adresse avec celle passe
en paramtre}
-
Algorithmique 3 : Classes 27
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 28
(Les notions de Classe et Objet, suite)
Un objet est une instance d'une classeExemple :
variables p1, p2 : Point
- p1 et p2 sont dclars des instances de la classePoint
- 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 29
(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 30
EncapsulationExemple : 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 31
classe Point(moule)
absc()
ord()
saisirPoint()
dplacerPoint(x,y)
mthodes
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 32
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 = agrgatabsc : rel u p1.absc ord : rel v p2. ord fin afficher(p2.ord)
p1.absc xvariables: p1, p2 : Point p2.ord y
u, v, x,y : rels
-
Algorithmique 3 : Classes 33
(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
Exempleclasse Point
Attributs: absc, ord : rels u p1.abscMthodes: saisirPoint() v p2. ord
afficher(p2.ord) INTERDIT !p1.absc x
variables: p1, p2 : Point p2.ord yu, v, x,y : rels
-
Algorithmique 3 : Classes 34
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 35
Classes
1. Introduction, motivation2. Utilisation dune classe3. Dfinition dune classe4. Comparaison: agrgats, classes5. Etude de cas : la classe Train
-
Algorithmique 3 : Classes 36
Un exemple
classe EnsembleEntiersAttributs : ??? cachsMthodes:
Mprocdure saisirEns() {saisit un ensemble d'entiers}Mprocdure afficherEns() {affiche un ensemble}Mfonction cardinal() retourne (entier) {nombre dlments de lensemble}Mfonction vide() retourne (boolen) {VRAI si lensemble est vide, FAUX sinon}Mfonction contient(elt) retourne (boolen) {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 37
Algorithme Ensemblevariables ensA, ensB : EnsembleEntiers
val : entierdbut
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 38
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 ensAcest 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 39
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 40
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 41
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 ensAcontenait dj des lments, ceux-ci sont perdus.
-
Algorithmique 3 : Classes 42
Classes
1. Introduction, motivation2. Utilisation dune classe3. Dfinition dune classe4. Comparaison: agrgats, classes5. Etude de cas : la classe Train
-
Algorithmique 3 : Classes 43
Dfinition une classe
classe Attributs attribut1 : type1
attributK : typeK
MthodesMprocdure proc1() {}Mprocdure procn() {}Mfonction fonc1() retourne() {}Mfonction foncn() retourne() {}
-
Algorithmique 3 : Classes 44
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
paramtre cible pour toutesles Mprocdures et Mfonctions, (D), (R) ou (D/R).
Ex: Mprocdure afficherEns()paramtres : (D) cible :
EnsembleEntier
-
Algorithmique 3 : Classes 45
Un exempleclasse PointAttributs :
abscisse, ordonne : relsMthodes :{Saisie et affichage}
Mprocdure saisirPoint() {saisit un point}Mprocdure afficherPoint() {affiche les coordonnes dun point}
{Mthodes d'accs}Mfonction abs() retourne (rel) {retourne labscisse dun point}Mfonction ord() retourne (rel) {retourne lordonne dun point}
{Mthodes de Manipulation}Mprocdure dplacerPoint(x,y) {ajoute x l'abscisse et y
l'ordonne d'un point}
-
Algorithmique 3 : Classes 46
Dfinition des mthodes
Mprocdure saisirPoint() Mprocdure afficherPoint() {saisit un point} {affiche un point}paramtre (R) cible : Point paramtre (D) cible : Pointdbut dbut
afficher("Donnez labscisse et afficher("Abscisse et ordonne dulordonne dun point : ") point : ") ;
saisir(cible.abscisse, cible.ordonne) afficher(cible.abscisse, cible.ordonne)fin fin
Mprocdure dplacerPoint(val1, val2)paramtre (D/R) cible : Point {la cible est en donne/rsultat }
(D) val1, val2 : entiersdbut
cible.abscisse cible.abscisse + val1cible.ordonne cible. ordonne + val2
fin
-
Algorithmique 3 : Classes 47
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 48
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 49
Algorithme ManipPointclasse Point variables pointX, pointY : Pointsdbut
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 + 3pointX.dplacer(3,3) pointX.ordonne pointX. ordonne + 3afficher ("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. )
fsifin
-
Algorithmique 3 : Classes 50
Classes
1. Introduction, motivation2. Utilisation dune classe3. Dfinition dune classe4. Comparaison: agrgats, classes5. Etude de cas : la classe Train
-
Algorithmique 3 : Classes 51
1. Pas d'agrgats, pas de classesPoint = couple (abscisse, ordonne) de rels
Procdure saisirPoint(uneAbs, uneOrd)paramtres (R) uneAbs, uneOrd : relsdbut
.saisir(uneAbs, uneOrd)
fin
aucune notion de point
Appel de la procdure : saisirPoint(abscisse, ordonne)
-
Algorithmique 3 : Classes 52
2. Un agrgat Pointtype Point = agrgat
abscisse, ordonne : relsfin
Procdure saisirPoint(unPoint)paramtres (R) unPoint : Pointdbut
.saisir(unPoint.abscisse, unPoint.ordonne)
finnotion de point
Appel de la procdure : saisirPoint(lePoint)
-
Algorithmique 3 : Classes 53
3. Une classe Pointclasse Point
Attributs : abscisse, ordonne : relsMthodes: MProcdure saisirPoint()
MProcdure saisirPoint()paramtre (R) cible: Pointdbut
.saisir(cible.abscisse, cible.ordonne)
finnotion de point, avec traitements associs
A
-
Algorithmique 3 : Classes 54
RcapitulationProcdure saisirPoint(uneAbs, uneOrd)
pas de variable pointAppel : 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 55
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 56
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 57
AB
C
-
Algorithmique 3 : Classes 58
Classes
1. Introduction, motivation2. Utilisation dune classe3. Dfinition dune classe4. Comparaison: agrgats, classes5. Etude de cas : la classe Train
-
Algorithmique 3 : Classes 59
On reprend les agrgats Modle et Train tudis dans le chapitre prcdent.
type Modle = agrgat type Train = agrgatcode : entier numro : entiernature : chane composition : tableau[1, MAX]couleur : chane de Modlesmarque : chane longueur : entier chelle : chane finprix : entierfin
-
Algorithmique 3 : Classes 60
On dcide d'quiper les Trains de procdures et de fonctions. Pour cela, on remplace l'agrgat Train par une classe Train :
classe Trainattributs
numro : entiercomposition : tableau[1, MAX] de Modleslongueur : entier
mthodesMprocdure saisirTrain() {saisie dun train}Mprocdure afficherTrain() {affichage dun train}... [autres mthodes non dcrites]
-
Algorithmique 3 : Classes 61
1. crire une Mfonction nbVCC(uneCouleur) qui donne, pour un train donn, le nombre de voitures de nature voiture corailou voiture couchetteet de couleur couleur.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 62
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 : Classe 63
4. Soit le type suivant
Type Entrept = agrgattabTrain : tableau [1, MAX] de TrainsnbTrains : entierfin
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 : Classes 64
fin Volume 3
Types de base, types complexesNouveaux types : les agrgatsHirarchie de typesDfinir un agrgatDistinction type - variableAccs aux agrgatsExempleTableaux d'agrgatsStructuration des donnesComment choisir une structuration?Structuration des donnesEtude de cas : lagrgat Train ClassesMotivation : un exempleRapprochement des types de donnes et des traitements correspondantsClasses Point et ClientLes notions de Classe et ObjetEncapsulationRcapitulation Remarques ClassesUn exempleSpcifications compltesRemarque : objet cible et objet paramtreClassesDfinition une classeDfinition des mthodes dune classeparamtre implicite cible : lobjet auquel est envoy la mthode.Remarques importantes !Fonction de manipulation de points(hors classe)ClassesRcapitulationRetour sur l'encapsulationLes 3 "acteurs" de la programmation objetClassesfin Volume 3