10
09/01/2016 1 Programmation Orientée Objet par C++ ZAKRANI Abdelali ENSAM – CASABLANCA Année universitaire 2014-2015 ZAKRANI / POO par C++ / 14-15 2 Rappel Fonctions (déclaration, transmission par valeur/référence, argument par défaut) Variables locales et globales Surdéfinition de fonctions Structures: déclaration, initialisation et utilisation… Les classes Les objets La séance dernière Cette séance

Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

Embed Size (px)

Citation preview

Page 1: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

1

Programmation Orientée Objet

par C++

ZAKRANI Abdelali

ENSAM – CASABLANCA

Année universitaire 2014-2015

ZAKRANI / POO par C++ / 14-15 2

Rappel

Fonctions (déclaration, transmission par valeur/référence, argument par défaut)

Variables locales et globales

Surdéfinition de fonctions

Structures: déclaration, initialisation et utilisation…

Les classes

Les objets

La séance dernière

Cette séance

Page 2: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

2

ZAKRANI / POO par C++ / 14-15 3

Notion de classe

Une classe est la généralisation de la notion de type

défini par l’utilisateur, dans lequel se trouvent associées

à la fois des données (membres données) et des

méthodes (fonctions membres)

Une classe est une structure dans laquelle seulement

certains membres et/ou fonctions membres seront

«publics», c.à.d. accessibles «de l’extérieur», les autres

membres étant dits «privés».

ZAKRANI / POO par C++ / 14-15 4

Exemple de déclaration d’une classe

• Les champs x et y sont les membres données de la classe

point. Ils sont déclarés privés. (private).

• Les fonctions membres nommées initialise, deplace et

affiche sont publiques. (public)

Page 3: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

3

ZAKRANI / POO par C++ / 14-15 5

Exem

ple

d’u

tilis

atio

n d

’une c

lass

e

x et y membres données

de la classe point Visibilité: privés

Trois fonctions membres

de la classe point

Visibilité:

publics

Définition de la

fonction affiche

Définition de la fonction initialise

Définition de la fonction deplace

En P.O.O., on dit que a et b sont des instances de la

classe point, ou encore que ce sont des objets de type

point.

Dans l’exemple précédent, tous les membres données de

point sont privés, ce qui correspond à une encapsulation

complète des données.

Il existe un troisième mot, protected (protégé), qui

s’utilise de la même manière que les deux autres ; il sert

à définir un statut intermédiaire entre public et privé,

lequel n’intervient que dans le cas de classes dérivées.

ZAKRANI / POO par C++ / 14-15 6

Utilisation d’une classe

Page 4: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

4

Est-il possible de remplacer l’instruction

b=a; par :

b.x = a.x ;

b.y = a.y ;

Soient les déclarations suivantes:

ZAKRANI / POO par C++ / 14-15 7

Affectation d’objets

Comme c’est le cas pour les

structures, on peut affecter à

b les valeurs de a:

b=a;

Un constructeur est une fonction membre (définie comme les autres fonctions membres) qui sera appelée automatiquement à chaque création d’un objet.

Son rôle est d’initialiser les données de l’objet créé.

Un objet pourra aussi posséder un destructeur, c’est-à-dire une fonction membre appelée automatiquement au moment de la destruction de l’objet.

Le constructeur porte le même nom que la classe.

Le destructeur porte le même nom que la classe, précédé d’un tilde (~).

ZAKRANI / POO par C++ / 14-15 8

Notions de constructeur et de

destructeur

Page 5: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

5

ZAKRANI / POO par C++ / 14-15 9

Exemple de classe comportant un

constructeur

La fonction initialise transformé

en un constructeur en la

renommant point

Commet utiliser cette classe comportant un constructeur?

La déclaration point a; convient-elle toujours?

À partir du moment où une classe possède un constructeur,

il n’est plus possible de créer un objet sans fournir les

arguments requis par son constructeur (sauf si ce dernier ne

possède aucun argument !).

Déclaration: point a(1,3) ; // correct

ZAKRANI / POO par C++ / 14-15 10

Exem

ple

de c

lass

e c

om

port

ant

un c

onst

ruct

eur

Page 6: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

6

ZAKRANI / POO par C++ / 14-15 11

Construction et destruction des

objets

Lorsque dans un même programme on crée différents

objets d’une même classe, chaque objet possède ses

propres membres données.

Par exemple :

ZAKRANI / POO par C++ / 14-15 12

Les membres données statiques

Une déclaration

telle que :

exple1 a, b ;

Objet a

Objet b

a.n

a.x

b.n

b.x

class exple1

{ int n ;

float x ;

.....

} ;

Page 7: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

7

Une façon de permettre à plusieurs objets de partager

des données consiste à déclarer avec le qualificatif static

les membres données qu’on souhaite voir exister en un

seul exemplaire pour tous les objets de la

ZAKRANI / POO par C++ / 14-15 13

Les membres données statiques

Une déclaration

telle que :

exple1 a, b ; Objet a Objet b

a.n

a.x

b.n

b.x

class exple1

{ static int n ;

float x ;

.....

} ;

On peut dire que les membres données statiques sont

des sortes de variables globales dont la portée est

limitée à la classe.

ZAKRANI / POO par C++ / 14-15 14

Exemple d’une classe comportant

un membre donnée statique

Page 8: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

8

struct point

{ int y ;

int x ;

void initialise (...) ;

....

} ;

1) Ces deux déclarations sont-elles équivalentes?

ZAKRANI / POO par C++ / 14-15 15

class point

{ public :

int y ;

int x ;

void initialise (...) ;

....

} ;

2) Cette déclaration est-elle correcte? class

{ int y ;

int x ;

void initialise (...) ;

....

} c, d ;

1) Supposons que l’on définisse une classe point disposant

d’un constructeur sans argument.

Quelle est la manière correcte pour déclarer un objet:

point a;

point a();

point() a;

ZAKRANI / POO par C++ / 14-15 16

2) Comment expliquer le fait que la déclaration d’un objet de

la classe point, par exemple, sans constructeur et avec un

constructeur sans argument sont pareilles?

point a;

Page 9: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

9

Déterminants d’un vecteur Soient v1 et v2, deux vecteurs définis par leurs coordonnées (x, y) et (x’, y’) extrémités, dans le plan euclidien orienté usuel.

Écrivez un programme, construit autour d’une classe vecteur, dont les fonctions membres (méthodes) afficheront les 2 vecteurs v1 et v2, puis calculeront les déterminants det(v1, v2) et det (v2, v1).

Les coordonnées extrémités des 2 vecteurs v1 et v2 seront imposées.

Résultat après exécution:

v1 (x, y) = (2, 3)

v2 (x, y) = (2.5, 7)

det(v1, v2) = xy'- yx‘

det(v1, v2) = 6.5

det(v2, v1) = x'y - y'x

det(v2, v1) = -6.5

ZAKRANI / POO par C++ / 14-15 17

Exercice

Déterminants d’un vecteur

#include <iostream>

using namespace std;

//classe vecteur

class vecteur{

float x,y;

public:

// déclaration du constructeur

vecteur (float, float);

//fonction membre affiche et det

void affiche(int);

float det(vecteur);

};

ZAKRANI / POO par C++ / 14-15 18

Solution

Page 10: Programmation Orientée Objet par C++ Classes-Objets 2015-2016.pdf

09/01/2016

10

//définition du constructeur

vecteur::vecteur(float i=0, float j=0){

x=i;

y=j;

}

//définition de la fonction affiche

void vecteur::affiche(int i){

cout<<"v"<<i<<" (x, y) = ("<<x<<", «<<y<<")"<<"\n\n";

}

//définition de la fonction det

float vecteur::det(vecteur w){

float determ;

determ=x*w.y-y*w.x;

return determ;

}

ZAKRANI / POO par C++ / 14-15 19

Solution (suite)

int main(){

//appel du constructeur vecteur, initialisation et

instanciation de v1 et v2

vecteur v1(2, 3), v2(2.5, 7);

//appel de la fonction affiche

v1.affiche(1);

v2.affiche(2);

//affichage des résultats et appel de la fonction

det

cout<<"det(v1, v2) = xy’- yx’"<<endl;

cout <<"det(v1, v2) = "<<v1.det(v2)<<"\n\n";

cout<<"det(v2, v1) = x’y - y’x"<<endl;

cout <<"det(v2, v1) = "<<v2.det(v1)<<endl;

return 0;

}

ZAKRANI / POO par C++ / 14-15 20

Solution (suite)