coursalgo_v3

65
iUT ORSAY Université Paris XI I.U.T. d'Orsay Département Informatique Année scolaire 2003-2004 Algorithmique : Volume 3 • Agrégats • Classes Cécile Balkanski, Nelly Bensimon, Gérard Ligozat

Upload: mohammad-elbaghati

Post on 03-Oct-2015

6 views

Category:

Documents


6 download

DESCRIPTION

informatique algorithme

TRANSCRIPT

  • 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