• Aucun résultat trouvé

0-M02 – Introduction `a la programmation Introduction `a l’algorithmique Cours n

N/A
N/A
Protected

Academic year: 2022

Partager "0-M02 – Introduction `a la programmation Introduction `a l’algorithmique Cours n"

Copied!
31
0
0

Texte intégral

(1)

Programmation structur´ee COO Relation entre les classes

0-M02 – Introduction ` a la programmation Introduction ` a l’algorithmique

Cours n

2 Programmation structur´ ee Introduction ` a la conception orient´ ee objet

Camille Coti

camille.coti@iutv.univ-paris13.fr

IUT de Villetaneuse, d´epartement R&T

2011 – 2012

(2)

Programmation structur´ee COO Relation entre les classes

1

Programmation structur´ ee Fonctions

Proc´ edures

Approche descendante R´ ecursivit´ e

2

Conception orient´ ee objet

3

Relation entre les classes H´ eritage

Classes abstraites Interfaces

Port´ ee des attributs et des m´ ethodes

(3)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

D´ ecomposition d’un probl` eme en sous-probl` emes

“... diviser chacune des difficult´ es que j’examinerais en autant de parcelles qu’il se pourrait et qu’il serait requis pour mieux les r´ esoudre.”

Discours de la m´ ethode (1637)

Ren´ e Descartes

(4)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Fonctions

D´ efinition

Une fonction d´ efinit une action effectu´ ee sur un ensemble de param` etres qui produit un r´ esultat retourn´ e comme valeur de sortie de la fonction.

Elle fournit une abstraction pour cette action vis-` a-vis des algorithmes qui l’appellent.

Analogie avec les fonctions math´ ematiques : f : x 7→ f(x) On d´ efinit la fonction une fois

On l’appelle autant de fois qu’on veut

Avantages : factorisation de code, abstraction pour la conception de

l’algorithme... Permet de se concentrer sur l’algorithme lui-mˆ eme plutˆ ot que

sur les d´ etails.

(5)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Param` etres et r´ esultat

On donne les param` etres et leur type

On d´ eclare les param` etres entre parenth` eses

On les utilise dans la fonction en utilisant ce nom : ce sont des variables Il existe des param` etres

D’entr´ ee : utilis´ es dans la fonction De sortie : modifi´ es dans la fonction

Ou les deux : utilis´ es et modifi´ es dans la fonction On d´ eclare le type retourn´ e

D´ eclaration de la fonction suivie par : type

On sort de la fonction avec le mot cl´ e retourner et la valeur retourn´ ee

d´ ebut fonction carre( nombre: Entier ): Entier

1

resultat : Entier

2

resultat ←− nombre × nombre

3

retourner resultat

4

fin fonction

5

(6)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Appel de fonction

On appelle la fonction ` a partir d’un autre algorithme

On lui passe en param` etres des variables de l’algorithme appelant La valeur retourn´ ee est mise dans une variable de l’algorithme appelant

d´ ebut programme

1

nombreDepart : Entier

2

calcul : Entier

3

calcul ←− carre ( nombreDepart )

4

fin programme

5

d´ ebut fonction carre( nombre: Entier ): Entier

1

resultat : Entier

2

resultat ←− nombre × nombre

3

retourner resultat

4

fin fonction

5

La fonction fournit donc une abstraction de l’action qu’elle r´ ealise param´ etr´ ee

(7)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Proc´ edures

Une proc´ edure effectue une action. Elle ne retourne rien.

Affichage : pas de r´ esultat de calcul ` a r´ ecup´ erer Calcul sur des variables de sortie

On sort de la proc´ edure

A la fin du bloc d’instructions principal `

Ou quand on rencontre le mot-cl´ e Retour

(8)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Proc´ edures (exemple)

d´ ebut programme

1

puissance : Entier

2

puissance ( puissance )

3

afficher ( puissance )

4

fin programme

5

d´ ebut proc´ edure puissance( petitepuissance: Entier Sortie )

1

petitepuissance ←− 1

2

tant que V rai faire

3

petitepuissance ←− petitepuissance × 2

4

if petitepuissance > 200 then

5

retourner

6

endif

7

fintq

8

fin proc´ edure

9

(9)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Visibilit´ e des variables

Les variables d´ eclar´ ees dans la fonction ne sont visibles que dans la fonction

Les variables d´ eclar´ ees dans le programme appelant ne sont visibles que dans le programme appelant ne sont pas visibles dans la fonction

Les variables pass´ ees en param` etre

sont appel´ ees par leur nom dans le programme appelant dans l’appel de la fonction

sont appel´ ees par le nom utilis´ e pour les d´ eclarer dans la fonction elle-mˆ eme

Visibilit´ e des variables

Les variables sont visibles uniquement dans la fonction, la proc´ edure ou le

programme dans lequel elles ont ´ et´ e d´ eclar´ ees, et dans aucune des fonctions ou

proc´ edures appel´ ees ou qui l’appellent.

(10)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Approche descendante

Les fonctions et les proc´ edures fournissent une abstraction sur les actions r´ ealis´ ees par le programme

Possibilit´ e de les utiliser pour se concentrer sur la structure du programme plutˆ ot que sur la r´ esolution des sous-probl` emes

On d´ ecompose le probl` eme en sous-probl` emes

On fait dans un premier temps l’hypoth` ese qu’ils sont r´ esolus On s’en occupe plus tard

La conception de l’algorithme dans sa globalit´ e est ainsi plus simple D´ ecomposer pour mieux maˆıtriser

On retarde le plus possible le moment d’effectuer les calculs

(11)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Approche descendante : exemple

Th´ eor` eme de Pythagore : ”le carr´ e de l’hypot´ enuse d’un triangle rectangle est

´ egal ` a la somme des carr´ es des longueurs des deux autres cˆ ot´ es”.

d´ ebut fonction hypo( cote1: Entier, cote2: Entier ): Entier

1

/* variables internes */

2

carre1 : Entier

3

carre2 : Entier

4

hypotenusecarre : Entier

5

hypotenuse : Entier

6

/* on calcule la somme des carr´ es des cˆ ot´ es */

7

carre1 ←− carr´ e( cote1 )

8

carre2 ←− carr´ e( cote2 )

9

hypotenusecarre ←− carre1 + carre2

10

/* on prend la racine carr´ ee de la somme et on retourne le

11

r´ esultat */

hypotenuse ←− racine( hypotenusecarre )

12

retourner hypotenuse

13

fin fonction

14

(12)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

Approche descendante : exemple (suite)

d´ ebut fonction carr´ e( nombre: Entier ): Entier

1

moncarre : Entier

2

moncarre ←− nombre × nombre

3

retourner moncarre

4

fin fonction

5

d´ ebut fonction racine( nombre: Entier ): Entier

1

maracine : reel

2

maracine ←− √ nombre

3

retourner maracine

4

fin fonction

5

(13)

Programmation structur´ee COO Relation entre les classes Fonctions Proc´edures Approche descendante R´ecursivit´e

R´ ecursivit´ e

Une fonction ou une proc´ edure peut s’appeler elle-mˆ eme Elle est alors partiellement d´ efinie ` a partir d’elle-mˆ eme

d´ ebut fonction calcul( var: Entier ): Entier

1

si var == 1 alors

2

retourner var

3

sinon

4

retourner var×calcul( var − 1 )

5

finsi

6

fin fonction

7

Correspond bien aux relations de r´ ecurrence

Attention au point d’arrˆ et !

(14)

Programmation structur´ee COO Relation entre les classes

1

Programmation structur´ ee Fonctions

Proc´ edures

Approche descendante R´ ecursivit´ e

2

Conception orient´ ee objet

3

Relation entre les classes H´ eritage

Classes abstraites Interfaces

Port´ ee des attributs et des m´ ethodes

(15)

Programmation structur´ee COO Relation entre les classes

Int´ erˆ et de la COO

La conception orient´ ee objet fournit une abstraction sur les donn´ ees manipul´ ees Briques de base du programme

Le programme manipule ces ”briques” qui interagissent entre elles

On rassemble les donn´ ees relatives ` a l’´ etat d’un ´ el´ ement du syst` eme et les actions dans une structure de donn´ ees particuli` ere : une classe.

Conception d’un syst` eme ` a partir de l’analyse du probl` eme : Identification des objets

D´ efinition des actions r´ ealis´ ees sur les objets et leurs interactions

Identification des donn´ ees repr´ esentatives de l’´ etat des objets

(16)

Programmation structur´ee COO Relation entre les classes

D´ efinition d’une classe

Une classe est constitu´ ee de deux cat´ egories d’´ el´ ements : Des attributs

Des m´ ethodes Attributs

Les attributs sont les donn´ ees relatives ` a l’objet d’une classe et repr´ esentatives de son ´ etat. Ce sont des variables conserv´ ees dans la m´ emoire de l’objet manipul´ e.

M´ ethodes

Les m´ ethodes d´ ecrivent le comportement des objets et les actions que l’on peut

effectuer dessus. Ce sont des fonctions ou des proc´ edures.

(17)

Programmation structur´ee COO Relation entre les classes

Variables

Objet

Un objet est une instance d’une classe. La classe est la d´ efinition de la structure de donn´ ees, l’objet est la repr´ esentation en m´ emoire de cette classe qui est manipul´ ee par le programme.

Attention ` a la distinction :

Une classe est la description des objets

Un objet est une instance d’une classe. On peut avoir plusieurs objets d’une mˆ eme classe.

Port´ ee des champs d’un objet

Les attributs et les m´ ethodes peuvent ˆ etre : Priv´ es : accessibles uniquement depuis l’objet Publics : accessible depuis n’importe quel objet Int´ erˆ et : ne pas se tromper !

Pas de modification directe des attributs par un autre objet

(18)

Programmation structur´ee COO Relation entre les classes

Exemple : la classe Moto

Comment caract´ eriser une moto ?

Une moto a des roues (utilisation d’une classe Roue), un guidon, une quantit´ e d’essence dans le r´ eservoir, une consommation

Elle peut ˆ etre gar´ ee ou rouler ` a une certaine vitesse On a besoin d’une classe Roue. Comment la caract´ eriser ?

Une roue a un diam` etre et elle est gonfl´ ee ` a un certain niveau

Moto - nbRoues : int - roues[] : Roue - consommation : int + niveauReservoir : float - garee : booleen + vitesse : int - largeurGuidon : int

Roue

- diametre : int

- glonflage : float

(19)

Programmation structur´ee COO Relation entre les classes

Exemple : la classe Moto

Comment caract´ eriser une moto ?

Une moto a des roues (utilisation d’une classe Roue), un guidon, une quantit´ e d’essence dans le r´ eservoir, une consommation

Elle peut ˆ etre gar´ ee ou rouler ` a une certaine vitesse On a besoin d’une classe Roue. Comment la caract´ eriser ?

Une roue a un diam` etre et elle est gonfl´ ee ` a un certain niveau

Moto - nbRoues : int - roues[] : Roue - consommation : int + niveauReservoir : float - garee : booleen + vitesse : int - largeurGuidon : int

Roue

- diametre : int

- glonflage : float

(20)

Programmation structur´ee COO Relation entre les classes

Exemple : la classe Moto (suite)

Quelles actions peut-on effectuer sur une moto ?

Avancer ` a une certaine vitesse sur une certaine distance : on a une m´ ethode bool avancer( int vitesse, int distance ) S’arrˆ eter : on a une m´ ethode void arreter()

Se garer : on a une m´ ethode void garer() qui arrˆ ete la moto si besoin et qui la gare

Remplir le r´ eservoir d’essence : void fairePlein() Quelles actions peut-on effectuer sur une roue ?

La gonfler compl` etement : void gonfler()

La d´ egonfler partiellement : void degonfler( int quantit´ e )

La percer (d´ egonfler compl` etement) : void percer()

(21)

Programmation structur´ee COO Relation entre les classes

Exemple : la classe Moto (suite)

Moto + nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int - largeurGuidon : int

+ avancer(vitesse:int, distance:int):bool + arreter() : void

+ garer() : void + fairePlein() : void

Roue - diametre : int - glonflage : float + gonfler() : void

+ degonfler(quantit´ e:int):void + percer() : void

Port´ ee des attributs et des m´ ethodes : Priv´ e : not´ e -

Public : not´ e +

(22)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

1

Programmation structur´ ee Fonctions

Proc´ edures

Approche descendante R´ ecursivit´ e

2

Conception orient´ ee objet

3

Relation entre les classes H´ eritage

Classes abstraites Interfaces

Port´ ee des attributs et des m´ ethodes

(23)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

Des classes suppl´ ementaires

En plus de nos classes Moto et Roue, on d´ efini deux autres classes Voiture et Camion :

Voiture + nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int - diametreVolant : int - capaCoffre : int - remplissageCoffre : float + avancer(vitesse:int,distance:int): bool + arreter() : void

+ garer() : void + fairePlein() : void

+ remplirCoffre( volume : float ) : bool + viderCoffre( ) : void

Camion + nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int - diametreVolant : int - nbRemorques : int - remorques[] : Remorque + avancer(vitesse:int,distance:int): bool + arreter() : void

+ garer() : void

+ fairePlein() : void

+ ajouterRemorque() : void

(24)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

H´ eritage

On constate des attributs et des m´ ethodes communs entre Moto, Camion et Voiture :

Attributs : nbRoues : int roues[] : Roue consommation : int niveauReservoir : float garee : booleen vitesse : int M´ ethodes :

avancer( vitesse : int, distance : int ) : bool arreter() : void

garer() : void

fairePlein() : void

(25)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

H´ eritage

On va donc les rassembler dans une classe Vehicule : Vehicule

+ nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int

+ avancer( vitesse : int, distance : int ) : bool + arreter() : void

+ garer() : void + fairePlein() : void

Avantage : factorisation de code, abstraction d’une partie des fonctionnalit´ es

d’une classe

(26)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

H´ eritage : classe m` ere et classes filles

Acc` es aux attributs de la classe Vehicule depuis les classes Moto, Voiture et Camion par h´ eritage

La d´ efinition des classes Moto, Voiture et Camion ne contiennent que les attributs et les m´ ethodes qui leur sont propres

Mais on peut toujours appeler la m´ ethode garer() d’une Moto

Moto - largeurGuidon : int

Voiture - diametreVolant : int - capaCoffre : int - remplissageCoffre : float + remplirCoffre( volume : float ) : bool + viderCoffre( ) : void

Camion

- diametreVolant : int

- nbRemorques : int

- remorques[] : Remorque

+ ajouterRemorque() : void

(27)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

H´ eritage

Vehicule

+ nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int

+ avancer( vitesse : int, distance : int ) : bool + arreter() : void

+ garer() : void + fairePlein() : void

Moto

- largeurGuidon : int

Voiture

- diametreVolant : int - capaCoffre : int - remplissageCoffre : float + remplirCoffre( volume : float ) : bool + viderCoffre( ) : void

Camion

- diametreVolant : int

- nbRemorques : int

- remorques[] : Remorque

+ ajouterRemorque() : void

(28)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

Classe abstraite

D´ efinition

Une classe abstraite est uen classe dont il n’est pas possible d’instancier des objets.

Exemple : la classe Vehicule peut ˆ etre une classe abstraite

Cela n’a pas de sens d’instancier un objet de la classe Vehicule

Son nom apparait sur le diagramme de classes en italique.

Int´ erˆ et : ne pas instancier par erreur des objets d’une classe qui n’a pas de sens en elle-mˆ eme. Utilis´ e uniquement dans l’arbre d’h´ eritage.

Vehicule

+ nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int

+ avancer( vitesse : int, distance : int ) : bool + arreter() : void

+ garer() : void + fairePlein() : void

Moto

- largeurGuidon : int

(29)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

Interfaces

D´ efinition

Une interface est une classe qui ne contient que des m´ ethodes, ne donne que leurs prototypes et n’est pas instanciable.

Une interface d´ efinit un contrat de comportement : toutes les classes qui l’instancient doivent respecter de contrat et suivre le comportement d´ efini (prototype des m´ ethodes).

Int´ erˆ et : possibilit´ e d’impl´ ementer la mˆ eme chose de diff´ erentes fa¸ cons dans plusieurs classes diff´ erentes

Toutes les classes impl´ ementant une interface suivent le mˆ eme comportement

On peut instancier un objet de n’importe quelle classe, on sait quel sera

son comportement

(30)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

Interfaces (suite)

<<interface>>

Roule

+ avancer(vitesse:int,distance:int):bool + arreter() : void

+ garer() : void

Vehicule

+ nbRoues : int - roues[] : Roue + consommation : int - niveauReservoir : float - garee : booleen - vitesse : int

+ fairePlein() : void

Moto

- largeurGuidon : int

Voiture

- diametreVolant : int - capaCoffre : int - remplissageCoffre : float + remplirCoffre(volume:float):bool + viderCoffre( ) : void

Camion

- diametreVolant : int

- nbRemorques : int

- remorques[] : Remorque

+ ajouterRemorque() : void

(31)

Programmation structur´ee COO Relation entre les classes H´eritage Classes abstraites Interfaces Port´ee

Propagation des donn´ ees dans l’arbre d’h´ eritage

3eme possibilit´ e pour la port´ ee des variables : prot´ eg´ e

Un attribut ou une variable prot´ eg´ e n’est visible que dans l’arbre d’h´ eritage

Ses classes filles peuvent y acc´ eder, pas les autres On le note # dans l’arbre d’h´ eritage

On a donc en tout trois possibilit´ es :

les attributs et m´ ethodes priv´ es, repr´ esent´ es en pr´ ec´ edant leur nom d’un signe -

Visibles uniquement dans la classe qui les d´ efinit

les attributs et m´ ethodes publics, repr´ esent´ es en pr´ ec´ edant leur nom d’un signe +

Visibles dans toutes les classes

les attributs et m´ ethodes prot´ eg´ es, repr´ esent´ es en pr´ ec´ edant leur nom d’un signe #

Visibles uniquement dans l’arbre d’h´ eritage

Références

Documents relatifs

Compilation et ex´ ecution Le langage Java Classes Cr´ eation d’une classe Constructeur et destructeur H´ eritage. 1 Compilation et

Documentation Java Surcharge des m´ ethodes Attributs et m´ ethodes de classe Les collections Les listes Les ensembles Outils sur les

Plusieurs types d’exceptions possibles pour une seule m´ ethode Trairement selon l’erreur rencontr´ ee. On r´ ecup` ere des informations sur l’exception

´ Ecrit le tableau de caract` eres tab sur le flux de sortie courant public void write( String s ) throws IOException. ´ Ecrit la chaˆıne de caract` eres s sur le flux de

Les proc´ edures SURVEYMEANS, SURVEYFREQ, SURVEYREG, SURVEYLOGISTIC, qui seront pr´ esent´ ees dans l’atelier, permettent de mettre en oeuvre les m´ ethodes classiques d’analyse

Dans ce court travail, nous pr´ esentons les diff´ erentes ´ etapes d’une ´ etude de fonction ` a travers un exemple`. Nous nous limitons ` a des fonctions r´ eelles d’une

Comparaison de proc´ edures de validation crois´ ee ( V -fold ) Sylvain Arlot (collaboration avec Matthieu Lerasle).. 2008, r´ egressogrammes ; valable plus largement).. Variance

D´esormais, on utilisera les commandes Maple rassembl´ees dans la biblioth`eque linalg pour op´erer sur les vecteurs et plus les versions ≪ my_ ≫ construites auparavant.. 4