Vous êtes sur la page 1sur 66

Introduction la Programmation Oriente

Objet et au C++

Concepts et exemples

Christophe Collard

Plan

Notions de programmation de base


Classes et Objets
Les fonctions amies
La surdfinition d op ateu s
Les patrons de fonctions et de classes
La te h i ue de l h itage
Les espaces de nommage
Application - Code de calcul Simula+
Discussion
Christophe Collard

Notions de Programmation de Base

Christophe Collard

1 octet = 8 bits
1 bit = 0 ou 1

1. Les variables systme


Type de donne

Signification

Taille (en octets)

Plage de valeurs accepte

char

Caractre

-128 127

unsigned char

Caractre non sign

0 255

short int

Entier court

-32 768 32 767

unsigned short int

Entier court non sign

int

Entier

unsigned int

Entier non sign

2
2 (sur processeur 16 bits)
4 (sur processeur 32 bits)
2 (sur processeur 16 bits)
4 (sur processeur 32 bits)

0 65 535
-32 768 32 767
-2 147 483 648 2 147 483 647
0 65 535
0 4 294 967 295

long int

Entier long

-2 147 483 648 2 147 483 647

unsigned long int

Entier long non sign

0 4 294 967 295

float

Flottant (rel)

-3.4*10-38 3.4*1038

double

Flottant double

-1.7*10-308 1.7*10308

long double

Flottant double long

10

-3.4*10-4932 3.4*104932

Mme taille que le type int,


parfois 1 sur quelques
compilateurs

Prend deux valeurs : 'true' et 'false'


mais une conversion implicite (valant 0
ou 1) est faite par le compilateur
lorsque l'on affecte un entier (en
ralit toute autre valeur que 0 est
considre comme gale True).

bool

Boolen

Christophe Collard

2. Les boucles
But : effectuer plusieurs fois le

e type dop ratio s

Ex: sommer les 10 premiers entiers

Attention : en C++ il faut initialiser les variables, sinon une valeur alatoire est attribue

for (int i=0; i<10; i++)


type du compteur
Incrmente le compteur de 1
initialisation du compteur
reste dans la boucle tant que cette condition est vrifie
Christophe Collard

3. Les fonctions

But : accomplir une tche

int
double

float

Fonction

INPUTS
Atte tio : u e fo tio

OUTPUT
e peut e o e

u u seul t pe

Fonction standard :
float fctname (int, double)
Fonction sans argument :
float fctname ()
Fonction sans valeur de retour : void fctname (int, double)
Remarque : une fonction bien programme peut tre lue sur 1 seul cran

Christophe Collard

Transmission de variable
Il existe 3 faons de transmettre des variables une fonction :
- transmission par valeur

adresse

adresse

valeur

valeur

les valeurs de n et p sont dupliques


on change les valeurs des copies
- transmission par adresse
n

adresse

valeur

les valeurs de n et p ne sont pas dupliques


on change les valeurs des originaux
- transmission par rfrence
la simplicit de la notation de la transmission par valeur
le mcanisme de la transmission par adresse
Christophe Collard

4. Surdfinition de fonctions
une fonction avec un mme nom possde plusieurs significations

sosie numero 1 : a = 5
sosie numero 2 : a = 2.5

Que se passe t il si x est de type float, long


dou le, ?
conversion du type par le compilateur
Christophe Collard

7. L allo atio d a i ue de

oi e

l op ateu NEW se t alloue de la


l op ateu DELETE se t li

oi e

e de la

oi e

L op ateu NEW
Exemple 1

Exemple 2
Pou alloue

e ts d u type donn :

new type [n]

new retourne un pointeur (type*) sur le 1er l


p

adresse

adresse

adresse

adresse

adresse

valeur

valeur

valeur

valeur

valeur

p[0]

p[4]

e t d u ta leau

Christophe Collard

L op ateu DELETE
li

e la

o do

oi e allou e pa l op ateu NEW

e o

e a gu e t l ad esse du poi teu fou ie pa

syntaxe pour les lments de type C++ standard


int* p;
p = new int [5];
delete p;
Atte tio le rle de lop rateur delete est tr s i porta t.
Si on dtruit un pointeur sans librer correctement la mmoire, celle-ci est
plus accessible et ne peut tre ralloue
Stack overflow

Christophe Collard

Classes et Objets

Christophe Collard

Objectif
Variables standart du C++

double a, b, s, p;
a= 5;
b = 7;
s = a + b;
p = a * b;

Christophe Collard

Objectif
Variables standart du C++

double a, b, s, p;
a= 5;
b = 7;
s = a + b;
p = a * b;
D fi i de ou eau t pes de a ia les : e teu s,

at i e, te seu s,

double p;
vector u (4) , v(4), w(4);
u[1]=5; u[2]=3; u[3]=-1; u[4]=7;
v[1]=0.4; v[2]=7; v[3]=-1.2; v[4]=0.75
w = u + v;
p = u * v;

Christophe Collard

1. Classes et encapsulation des donnes


Classe

gnralisation de la notion de type

e te sio des t pes C++ sta da d de ou eau t pes d fi is pas l utilisateu


regroupe des donnes et des mthodes

donnes membres

fonctions membres

On a spar les donnes et fonctions membres en 2 catgories

public

private

Christophe Collard

Encapsulation
p i ate : do
es et
thodes o a essi les l e t ieu de la lasse
seules les fonctions membres y ont accs
p ote ted : do
es et
thodes o a essi les l e t ieu de la lasse
accs possible par les classes drives (cf plus tard)
pu li : do

es et

thodes a essi les l e t ieu de la lasse

Remarques
pour modifier des donnes prives il faut passer via des mthodes publiques
En POO pure, les donnes sont encapsules et leur accs ne peut se faire que par le
biais de mthodes

Christophe Collard

Dfinition des fonctions membres (mthodes)

initialise mthode de point

x et y modifiables

le symbole :: est un oprateur de rsolution de porte

l ide tifi ateu initialise est celui dfini dans la classe point
Christophe Collard

Utilisation de la classe

Remarques
poi t est u

ou eau t pe d fi i pa l utilisateu

a et b sont des instances de la classe point


a et b sont encore appels des objets de type point
si au u des ots p i ate ou pu li appa at da s la lasse, tout est
o sid
o
e ta t p i ate => ie est a essi le

Christophe Collard

2. Constructeur et destructeur
atio d u

ou el o jet

allocation de mmoire

Processus automatis
CONSTRUCTEUR

initialisation de ses donnes

Fonctions membres appeles automatiquement


ha ue atio / dest u tio d o jet

dest u tio d u o jet


libration de mmoire

Processus automatis

DESTRUCTEUR

Christophe Collard

Christophe Collard

Rsultat: affiche 10 valeurs alatoires

Exemple

3. E ploitatio d u e lasse
Disso ie l i pl

e tatio d u e lasse de so utilisatio

Mettre dans un fichier spar la classe et son implmentation

C atio de i lioth

ues ue l o

eg oupe pa th

es

4. Proprits des fonctions membres


Surdfinition des fonctions membres
La surdfinition de fonctions ordinaires e C++ s appli ue au
fonctions membre d u e lasse, o p is au constructeur
Elle e peut s appli ue au dest u teu

ui e eoit au u a gu e t
Christophe Collard

Exemple

Christophe Collard

Les o jets t a s is e a gu e t d u e fo tio

Exemple

dfinir une mthode coincide dans la classe point pour comparer 2


objets de type point
so appel s effe tue de la

a i e sui a te

a.coincide (b)
ou par symtrie du problme
b.coincide (a)

- transmission par valeur


- transmission par adresse
- transmission par rfrence

Christophe Collard

Rsultat
a et b 0 (false)
b et c 1 (true)
Christophe Collard

Les fonctions amies

Christophe Collard

POO pure

Encapsulation des donnes

donnes membres prives accessibles seulement par les


mthodes publiques de la classe

u e
thode d u e aut e lasse doit passe ia les
mthodes publiques de la classe pour accder aux
donnes prives

problme dans certains cas


Exemple
On dfinit une classe vector et une classe matrix.
Produit matrice- e teu
essite l a s au do

es p i es des 2 lasses
Christophe Collard

Il e iste plusieu s situatio s d a iti


fo tio i d pe da te a ie d u e lasse
fo tio

e d u e lasse et a ie d u e aut e lasse

fonction amie de plusieurs classes


toutes les fo tio s

e d u e lasse, a ies d u e aut e lasse

Fo tio i d pe da te a ie d u e lasse
Une fonction amie se dclare avec le mot cl friend

Exemple

Christophe Collard

Rsultat

a et b coincident

a et c ne coincident pas

Christophe Collard

La su d fi itio d op ateu s

Christophe Collard

On considre une classe vector 2D :

class vector
{ int x,y;

};
On dfinit 2 objets de type vector a et b
b

Peut on crire comme pour un type standard C++ la somme a + b ?

Christophe Collard

Il faut surd fi ir lop rateur + pour la classe


dfinir une fonction operator + au sein de la classe

utiliser le mot cl operator sui i de l op ateu su d fi i

la fonction operator + peut tre :


soit une fonction membre de la classe
soit une fonction indpendante amie de la classe
soit une fonction indpendante de la classe
Afi de p ot ge les do
su d fi i l op ateu o

es et d a l e le ode, o hoisit e g
al de
e fo tio i d pe da te a ie de la lasse.
Christophe Collard

Surdfinition d op ateu a e u e fo tio a ie

Rsultat
coordonnees (1,2)
coordonnees (2,5)
coordonnees (3,7)
coordonnees (6,14)

Christophe Collard

Surdfinition d op ateu a e u e fo tio

Rsultat identique
Christophe Collard

Remarques
la fonction operator + est appel de la manire suivante :
fontion indpendante : a + b

operator + (a,b)

fontion membre : a + b

a.operator + (b)

la fonction membre operator + fait apparatre une dissymtrie et


l o jet a e peut pas t e p ot g

Oprateurs et transmission par rfrence


Dans les deux exemples prcdents, on utilise la transmission par valeur
Pour des objets de grande taille, il vaut mieux utiliser la transmission par
f e e. O peut alo s p ot ge les o jets t a s is a e
o st
point operator + (const point& a, const point&b)
Le etou de l o jet poi t se fait obligatoirement par valeur
Christophe Collard

Surdfinition de l op ateu [ ]
exemple de la classe vector
l op ateu [ ] pe

et d a

de au ime lment du vecteur

En informatique on commence compter partir de 0


En mathmatiques on commence compter partir de 1

C est l op ateu [ ] ui fe a la o e sio

C++ i pose de d fi i l op ateu [ ] o

e fonction membre

int& operator [ ] (int);

retour par rfrence o ligatoi e afi d utilise l op ateu pou affe te des
valeurs
Christophe Collard

Les patrons de fonctions


Les patrons de classes

Christophe Collard

La surdfinition de fonctions permet de donner un nom unique plusieurs


fonctions ralisant un travail diffrent

La notion de patron est plus puissante et plus restrictive


Plus puissante
o
it u e seule fois la d fi itio d u e fo tio pou ue le o pilateu
puisse l adapte auto ati ue e t i po te uel t pe

Plus restrictive
toutes les fonctions ainsi fabriques ont la mme dfinition et le mme
algorithme
But
crire une fonction qui soit valable quel que soit le type des arguments utiliss

Christophe Collard

Exemple
int min (int a, int b)
{ return (a < b) ? a : b;
}

double min (double a, double b)


{ return (a < b) ? a : b;
}

float min (float a, float b)


{ return (a < b) ? a : b;
}

long int min (long int a, long int b)


{ return (a < b) ? a : b;
}

et
On crit la mme fonction pour tous les types existant en C++
est lo g, t s lo g, t s t s lo g

et en plus il faut le faire pour toutes les fonctions


a multiplie les lignes de code et rend le code illisible
il faut complter le code quand on dfinit ses propres classes
Christophe Collard

On rsout ce problme en utilisant les patrons de fonctions


cette mthode est trs puissante
Elle pe

et de d fi i des

thodes pou des t pes ui e iste t pas e o e

fonction
patron

Rsultat

type

min (n,p) = 4
min (x,y) = 2.5

Christophe Collard

Surdfinition des patrons

Remarque

o peut t a s ett e des l


grce aux patrons

e ts de

les fo tio s su d fi ies doi e t a oi u


d ite les a igit s

i po te uel t pe au fo tio s

e d a gu e ts diff e t afi
Christophe Collard

Les patrons de classes


Mise en vidence du problme

Comment stocker des points avec des coordonnes int, float, dou le, ?

Utiliser des patrons de classe

Christophe Collard

Les patrons de patrons


Exemple d appli atio la mcanique:
Loi de comportement : = C :: E

Christophe Collard

Les patrons de patrons


Exemple d appli atio la mcanique:
Loi de comportement : = C :: E
Tenseurs d o d e 2 : , E
Tenseur d o d e 4 : C (tenseur d lasti it )
C isotrope => 2 constantes d lasti it (Lam)

Christophe Collard

Les patrons de patrons


Exemple d appli atio la mcanique:
Loi de comportement : = C :: E
Tenseurs d o d e 2 : , E
Tenseur d o d e 4 : C (tenseur d lasti it )
C isotrope => 2 constantes d lasti it (Lam)
E

C
INPUTS

Loi de
comportement
Fonction

OUTPUT

Christophe Collard

Les patrons de patrons


Exemple d appli atio la mcanique:
Loi de comportement : = C :: E
Tenseurs d o d e 2 : , E
Tenseur d o d e 4 : C (tenseur d lasti it )
C isotrope => 2 constantes d lasti it (Lam)
E

C
INPUTS

Loi de
comportement
Fonction

OUTPUT

C: utilisation d u pat o pou sto ke les constantes d lasti it

Christophe Collard

E
C
INPUTS

Loi de
comportement
Fonction

OUTPUT

C: utilisation d u pat o pou sto ke les constantes d lasti it


C -> cubique (3 constantes lastict)

Tenseurs d o d e 2 : , E
Tenseur cubique : C (tenseur d lasti it )
Comment ne pas rcrire le code de la loi de comportement dans ce nouveau cas ?

Christophe Collard

E
C
INPUTS

Loi de
comportement
Fonction

OUTPUT

C: utilisation d u pat o pou sto ke les constantes d lasti it


C -> cubique (3 constantes lastict)

Tenseurs d o d e 2 : , E
Tenseur cubique : C (tenseur d lasti it )
Comment ne pas rcrire le code de la loi de comportement dans ce nouveau cas ?
utiliser un patron pour C
C utilise dj un patron pour stocker les constantes d lasti it
=> utilisation d u pat o de pat o

Christophe Collard

Avantage :
La loi de comportement reste valable mme pour des objets non encore dfinis

Ex. On pourra dfinir plus tard un classe pour l lasti it orthotrope et utiliser
la mme loi de comportement sans changer le code grant cette loi.

Christophe Collard

La te h i ue de l h itage

Christophe Collard

Le o ept de l h itage ou de lasses d i es o stitue l u des


fondements de la POO
Intrt
Classe drive :
nouvelle classe

classe de base

dfinie partir de la classe de base

proprits de la classe

hrite des proprits de la classe de base


ajoute de nouvelles proprits la classe de base
ne modifie pas la classe de base

classe drive
proprits classe de base + nouvelles proprits

permet de dvelopper de nouveaux outils en se basant sur les acquis de la


classe de base

Christophe Collard

Remarque
L h itage est pas li it u seul i eau
une classe drive peut devenir classe de base pour une autre classe
plusieu s lasses peu e t t e d i es d u e

e lasse

Christophe Collard

Mise e u e de l h itage
Classe de base

Christophe Collard

On ajoute une information cette classe : la couleur du point

Classe drive

Programme principal

Christophe Collard

Utilisatio des
drive

es d u e lasse de ase da s u e lasse

Quand on appelle p.affiche() pour un objet de type pointcol, cette fonction


est pas d fi ie da s la lasse e fa t poi t ol

C est la fo tio affi he de la lasse pa e t poi t

ui est appel e

C est la fo tio affi he de la lasse pa e t poi t

ui est appel e

Christophe Collard

Utilisation
pa tie o

u edu p o l

classe de base

drive 1

drive 2

drive 3

drive 4

solution 1

solution 2

solution 3

solution 4

gain de temps en programmation


pas de pnalit de temps pour les fonctions non utilises dans la classe
drive, car non i lues lo s de l ditio de lie
pe te de te ps lo s d appel de fo tio s i

i u es

Christophe Collard

Les espaces de nommage

Christophe Collard

Mot cl : namespace
zones de dclaration permettant de dlimiter la recherche des noms des
identificateurs par le compilateur
But

regrouper les identificateurs logiquement pour viter les conflits de nom


e t e plusieu s pa ties d u
e p ojet
Remarque

par dfaut, C++ utilise un espace de nommage (namespace std) de porte


globale dans lequel il doit y avoir aucun conflit de nom

D fi itio d u espa e de o

age

Christophe Collard

Exemple de projet

Christophe Collard

MOL++

MateriOL++
simula+
MPISOL++
PMOL++

materials

MOL++
MateriOL++

MPISOL++
PMOL++

materials

tests
gui
doc
Christophe Collard

dfinition de la classe vector

Christophe Collard

Christophe Collard

Mthodes de la classe vector

Christophe Collard

Christophe Collard

Utilisation de la classe vector

Christophe Collard

Christophe Collard

Documentation en ligne & hritage

Christophe Collard

Rfrences
P se tatio t l ha gea le l ad esse :
http://www.lpmm.univ-metz.fr/collard/doc/introduction a la POO.pdf

Cours complet tlchargeable l ad esse :


http://www.lpmm.univ-metz.fr/collard/doc/Programmation Orientee objet et
C++.v1.pdf

Christophe Collard

Vous aimerez peut-être aussi