Licence Sciences, Technologies, Sant Semestre 5 (L3) - Mention Mathmatiques, Informatique Programmation Oriente Objet
Universit de Perpignan Via Domitia Anne universitaire 2011/2012
Introduction la Programmation Oriente Objet
... et son application au C++
Guillaume Revy
[Link]@[Link]
Universit de Perpignan Via Domitia
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
1/36
Prrequis et organisation du cours
Prrequis : bonne connaissance en programmation C et en algorithmique Organisation :
9h de cours 21h de TD
valuation :
6 sances de 1.5h 14 sances de 1.5h
20% 80%
projet de programmation (seul ou en binme, vers octobre/novembre) examen nal (quelque part en dcembre/janvier)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
2/36
Rappels lmentaires de langage C
la fonction principale main
// hello .c // Inclusion des fichiers d entetes # include < stdio .h > // gestion des entrees / sorties # include < math .h > // utilisation des fonctions mathematiques // Definition de la fonction principale int main ( void ) { printf (" Hello world !\ n"); // Affichage de " Hello world !" return 0; // par convention , " return 0" indique qu aucune // erreur n est survenue }
$ > gcc - Wall -o hello hello .c $ > ./ hello Hello world !
Remarques :
la fonction main est le point dentre du programme
elle est indispensable
les instructions sont excutes dans lordre dapparition dans le programme
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 3/36
Rappels lmentaires de langage C
dclaration dune variable
// rappel - variable .c # include < stdio .h > int main ( void ) { int x1 ; int x2 = 18; x1 = 17;
// Declaration de l entier x1 // Declaration et initialisation de l entier x2 // Affectation de 17 a l entier x
printf (" Ma valeur entiere x1 vaut : %d .\ n" ,x1 ); printf (" Ma valeur entiere x2 vaut : %d .\ n" ,x2 ); return 0; }
$ > gcc - Wall -o variables variables .c $ > ./ rappel - variable Ma valeur entiere x1 vaut : 17. Ma valeur entiere x2 vaut : 18.
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
4/36
Rappels lmentaires de langage C
fonction et passage de paramtres
// fonctions .c # include < stdio .h > int addition_v1 ( int a , int b) { int c; c = a + b; return c; } void addition_v2 ( int a , int b , int c) { c = a + b; } void addition_v3 ( int a , int b , int *c) { *c = a + b; } int main ( { int int int int void ) x1 = 17 , x2 = 18; c_v1 = addition_v1 (x1 , x2 ); c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 ); // x1 et x2 sont passes par valeurs // c_v2 est passe par valeur // c_v3 est passe par adresse // c = a + b
// c = a + b
// c = a + b
printf (" Finalement c_v1 = %d , c_v2 = %d et c_v3 = %d .\ n" ,c_v1 , c_v2 , c_v3 ); return 0; }
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 5/36
Rappels lmentaires de langage C
fonction et passage de paramtres
// fonctions .c // ... int main ( void ) { int x1 = 17 , x2 = 18; int c_v1 = addition_v1 (x1 , x2 ); int c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); int c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 );
// x1 et x2 sont passes par valeurs // c_v2 est passe par valeur // c_v3 est passe par adresse
printf (" Finalement c_v1 = %d , c_v2 = %d et c_v3 = %d .\ n" ,c_v1 , c_v2 , c_v3 ); return 0; }
$ > gcc - Wall -o fonctions fonctions .c $ > ./ fonctions Finalement c_v1 = 35 , c_v2 = 0 et c_v3 = 35.
Remarque :
une variable passe par valeur, nest pas modie lextrieure de la fonction
utilisation du passage par adresse (&c_v3)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 5/36
Et maintenant la Programmation Oriente Objet et le C++
Pour apprendre le langage C++, le point essentiel consiste se concentrer sur les concepts et viter de se perdre dans les dtails techniques. B. Stroustrup, Le langage C++ - Edition spciale - 1.1.2 (2000)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
6/36
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
7/36
Pourquoi la programmation oriente objet ?
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
8/36
Pourquoi la programmation oriente objet ?
Quest ce que la programmation oriente objet ?
Programmation Oriente Objet (POO) : paradigme de programmation informatique
labor par Alan Kay, dans les annes 70 dnition et interactions de briques logicielles
objets
Un objet = un concept, une ide ou une entit du monde physique
par exemple : une voiture, un tudiant, ... possde une structure interne et un comportement
Quelques langages objets : C++, Java, Ada, PHP, Python, ...
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
9/36
Pourquoi la programmation oriente objet ?
Pourquoi la programmation oriente objet ?
Depuis plusieurs annes :
le matriel de moins en moins cher, et de plus en plus puissant le dveloppement dapplications de plus en plus performantes et complexes
Le cot des dpenses informatiques principalement cot des logiciels
cout de lapplication
cot du logiciel de plus en plus lev
manire exponentielle avec la complexit de lapplication
oc ed ur al
en programmation procdurale : cot du logiciel croit de
taille de lapplication
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
pr o
gr am m
at io
pr
e
10/36
Pourquoi la programmation oriente objet ?
Pourquoi la programmation oriente objet ?
Depuis plusieurs annes :
le matriel de moins en moins cher, et de plus en plus puissant le dveloppement dapplications de plus en plus performantes et complexes
Le cot des dpenses informatiques principalement cot des logiciels
cout de lapplication
cot du logiciel de plus en plus lev
manire exponentielle avec la complexit de lapplication
oc ed ur al
en programmation procdurale : cot du logiciel croit de
Objectifs de la programmation oriente objet :
diminuer le cot du logiciel
taille de lapplication
augmenter sa dure de vie, sa rutilisabilit et sa facilit de maintenance
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
pr o
gr am m
at io
pr
e
10/36
Pourquoi la programmation oriente objet ?
Pourquoi la programmation oriente objet ?
Programmation oriente objet : modlisation directe dobjets du monde rels
de trs nombreux reprsentants dun tout petit nombre de concepts diffrents exploiter cette redondance
petites entits informatiques
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
11/36
Pourquoi la programmation oriente objet ?
Pourquoi la programmation oriente objet ?
Programmation oriente objet : modlisation directe dobjets du monde rels
de trs nombreux reprsentants dun tout petit nombre de concepts diffrents exploiter cette redondance
petites entits informatiques
Rduction de limpact dune modication/extension dune partie dun programme
connement dans de petites units qui ont peu de contact avec lextrieure = objets
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
11/36
Pourquoi la programmation oriente objet ?
Pourquoi la programmation oriente objet ?
Finalement, un programme objet = production dun ensemble dobjets sparation de linterface et de limplantation de ce que fait lobjet
accs un objet (et ces donnes) se fait uniquement via linterface de haut (fournit
aux clients, par exemple)
Inversion de la courbe dvolution du cot du logiciel
cout de lapplication
le dveloppement dune petite application par contre, son extension
effort faible
gros effort
pro
gra
a mm
tio
no
tee ien
ob
jet
taille de lapplication
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
12/36
Principes fondamentaux de la programmation oriente objet
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
13/36
Principes fondamentaux de la programmation oriente objet
La notion dobjet
Un objet = un concept, une ide ou une entit du monde physique
voiture, personne, tudiant, animal, fentre graphique, forme gomtrique, ...
Dans un programme, un objet sapparente une variable Un objet est caractris par trois notions
les attributs : donnes de lobjet / variable quil contient et reprsentant son tat les mthodes (fonctions membres) : caractrise son comportement, lensemble des
actions que lobjet peut ralsier, accs/modication des donnes
une identit, qui permet de le distinguer de manire unique des autres objets,
indpendamment de son tat
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
14/36
Principes fondamentaux de la programmation oriente objet
La notion de classe
Une classe = la structure dun objet
elle dnit son type dclaration de lensemble des entits qui composeront un objet
Un objet est donc issu dune classe
on dit quun objet est une instance (ou une occurrence) dune classe on parle dinstanciation de classe
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
15/36
Principes fondamentaux de la programmation oriente objet
La notion de classe
Une classe = la structure dun objet
elle dnit son type dclaration de lensemble des entits qui composeront un objet
Un objet est donc issu dune classe
on dit quun objet est une instance (ou une occurrence) dune classe on parle dinstanciation de classe
Une classe est compose de deux parties :
les attributs (donnes membres) les mthodes (fonctions membres)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
15/36
Principes fondamentaux de la programmation oriente objet
Exemple de classe et dobjet
Dnition dune classe Personne (on verra plus tard le formalisme utilis ici)
dnition dun type Personne regroupe les proprits communues aux
personnes : caractristiques (attributs) et comportement (mthodes)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
16/36
Principes fondamentaux de la programmation oriente objet
Exemple de classe et dobjet
Dnition dune classe Personne (on verra plus tard le formalisme utilis ici)
dnition dun type Personne regroupe les proprits communues aux
personnes : caractristiques (attributs) et comportement (mthodes)
Instanciation dun objet de type Personne
affectation dune valeur chaque attribut possibilit dagir, via les mthodes
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
16/36
Principes fondamentaux de la programmation oriente objet
Les trois grands principes de la POO
Encapsulation rassembler les donnes et mthodes au sein dune structure
mcanisme daccs / modication
en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes augmentation la scurit dune application facilit de maintenance de lapplication
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
17/36
Principes fondamentaux de la programmation oriente objet
Les trois grands principes de la POO
Encapsulation rassembler les donnes et mthodes au sein dune structure
mcanisme daccs / modication
en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes augmentation la scurit dune application facilit de maintenance de lapplication
Hritage permettre la cration dune classe partir dune classe existante
la classe drive (lle) contient sous certaines conditions les attributs et les
mthodes de la classe mre (super-classe)
permet ainsi la rutilisation de code plusieurs types dhritage : public, protg, ou priv
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
17/36
Principes fondamentaux de la programmation oriente objet
Les trois grands principes de la POO
Encapsulation rassembler les donnes et mthodes au sein dune structure
mcanisme daccs / modication
en cachant limplantation de lobjet ( lutilisateur, au moins) protection de laccs aux donnes augmentation la scurit dune application facilit de maintenance de lapplication
Hritage permettre la cration dune classe partir dune classe existante
la classe drive (lle) contient sous certaines conditions les attributs et les
mthodes de la classe mre (super-classe)
permet ainsi la rutilisation de code plusieurs types dhritage : public, protg, ou priv
Polymorphisme permettre de rednir dans une classe drive les mthodes dont elle hrite de sa classe mre
une mme mthode possde alors plusieurs formes
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 17/36
lments de modlisation dun programme orient objet
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
18/36
lments de modlisation dun programme orient objet
UML - Unied Modeling Language
UML = langage de modlisation graphique base de pictogrammes
annes 90 : fusion des langages de modlisation objet : Booch, OMT, OOSE apparition dans le cadre de la conception oriente objet ensemble de diagrammes (de classes, dobjets, ...), permettant de modliser les
aspects statiques et dynamiques dune application
1997 : normalisation par lOMG (Object Management Group) 05/2010 : UML 2.3
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
19/36
lments de modlisation dun programme orient objet
UML - Unied Modeling Language
UML = langage de modlisation graphique base de pictogrammes
annes 90 : fusion des langages de modlisation objet : Booch, OMT, OOSE apparition dans le cadre de la conception oriente objet ensemble de diagrammes (de classes, dobjets, ...), permettant de modliser les
aspects statiques et dynamiques dune application
1997 : normalisation par lOMG (Object Management Group) 05/2010 : UML 2.3
Dans le cadre de ce cours : utilisation principalement des diagrammes de classes
reprsenter les classes dun systme et les interactions entre elles
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
19/36
lments de modlisation dun programme orient objet
Reprsentation dune classe
Reprenons la classe Personne prcdente
encapsulation
dnition des mthodes accessibles lextrieure de la classe
= mthodes publiques
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
20/36
lments de modlisation dun programme orient objet
Reprsentation dune classe
Reprenons la classe Personne prcdente
encapsulation
dnition des mthodes accessibles lextrieure de la classe
= mthodes publiques
Visibilit des attributs / mthodes
# +
privs protgs publics
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
20/36
lments de modlisation dun programme orient objet
Relation dhritage
Intrt de lhritage :
transfert des proprits dune classe mre vers les
classes lles
gnralisation : factorisation de classes en regroupant
des proprits communes
spcialisation : ajout dattributs et mthodes
Hritage public en C++ le plus utilis
+ accessibles par tous accessibles de la classe elle-mme uniquement # accessibles de la classe elle-mme et des classes
drives
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
21/36
lments de modlisation dun programme orient objet
Relation dassociation, de composition et dagrgation
Association exprime une liaison smantique bidirectionnelle entre deux classes
Les cardinalits expriment le nombre dinstances associes
un livre appartient une et une seul personne une personne possde aucun livre ou plusieurs
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
22/36
lments de modlisation dun programme orient objet
Relation dassociation, de composition et dagrgation
Agrgation/Composition : relation entre classes, indiquant que les instances dune classe sont les composants dune autre
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
22/36
lments de modlisation dun programme orient objet
Relation dassociation, de composition et dagrgation
Agrgation/Composition : relation entre classes, indiquant que les instances dune classe sont les composants dune autre Agrgation exprime une relation de composition faible
les objets agrgs ont une dure de vie indpendante de celle de lagrgat
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
22/36
lments de modlisation dun programme orient objet
Relation dassociation, de composition et dagrgation
Agrgation/Composition : relation entre classes, indiquant que les instances dune classe sont les composants dune autre Agrgation exprime une relation de composition faible
les objets agrgs ont une dure de vie indpendante de celle de lagrgat
Composition
exprime une relation de composition forte
les objets agrgs ont une dure de vie dpendante de celle de lagrgat
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
22/36
Quelques lments importants du C++
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
23/36
Quelques lments importants du C++
Petite histoire du C++
Annes 80 : mise au point du langage C++ par Bjarne Stroustrup (Bell labs) Extension du langage C, mis au point par Ritchie et Kernighan (annes 70)
ajout de lapproche oriente objet C++
C with classes (C avec des classes)
1998 : normalisation par lISO (International Organization for Standardization)
dernire normalisation : 2003
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
24/36
Quelques lments importants du C++
Fonctionnalits introduites par C++
Les oprateurs new et delete pour la gestion dallocation mmoire Les types de donnes bool (boolen), et string (chane de caractres) Le mot cl const pour dnir des constantes Les rfrences Les paramtres par dfaut dans les fonctions Les classes, ainsi que tout ce qui y est li (hritage, fonctions membres, ...) Les rfrentiels lexicaux (espace de noms) et loprateur de rsolution :: La surcharge des oprateurs Les patrons (ou templates) La gestion dexceptions ...
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
25/36
Quelques lments importants du C++
Dnition dentits constantes avec le mot cl const
En C++, le mot cl const permet lutilisateur de dnir des entits constantes (fonctions/variables)
leur valeur ne pourra pas tre modie directement elles doivent tre initialises la dclaration exemple : la plupart des paramtres de fonctions sont lus, mais pas modis
const int model = 90; const int v [] = {1 ,2 ,3 ,4}; const int x; // model est une constante = 90 // v[i] est une constante // ERREUR : x doit etre initialise
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
26/36
Quelques lments importants du C++
Dnition dentits constantes avec le mot cl const
En C++, le mot cl const permet lutilisateur de dnir des entits constantes (fonctions/variables)
leur valeur ne pourra pas tre modie directement elles doivent tre initialises la dclaration exemple : la plupart des paramtres de fonctions sont lus, mais pas modis
const int model = 90; const int v [] = {1 ,2 ,3 ,4}; const int x; // model est une constante = 90 // v[i] est une constante // ERREUR : x doit etre initialise
Remarque : le mot cl const peut modier le type dune variable
void foo ( const int * x) { /* ne peut pas modifier le parametre x */ } int main ( void ){ int x; foo (& x); }
// la variable x peut etre modifiee
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
26/36
Quelques lments importants du C++
Les pointeurs et les constantes
Le mot cl const peut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * x ou const int * x) dclarer un pointeur constant sur un objet (int * const x)
Exemple 1 : pointeur vers une valeur constante
const char * msg = " exemple de message constant "; * msg = E ; // ERREUR : modification interdite , car la valeur pointee ne // peut etre modifiee msg = " modiciation "; // OK : modification de l objet pointe , et non de // sa valeur
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
27/36
Quelques lments importants du C++
Les pointeurs et les constantes
Le mot cl const peut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * x ou const int * x) dclarer un pointeur constant sur un objet (int * const x)
Exemple 2 : pointeur constant vers un objet non constant
char * const msg = " exemple de pointeur constant "; msg = " Test "; // ERREUR : modification interdit , car l objet sur lequel // le pointeur pointe ne peut pas etre modifie * msg = E ; // OK : le contenu de l objet peut etre modifie
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
27/36
Quelques lments importants du C++
Les pointeurs et les constantes
Le mot cl const peut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * x ou const int * x) dclarer un pointeur constant sur un objet (int * const x)
Remarque 1 : Ladresse dune variable peut tre attribue un pointeur de constante. Par contre, ladresse dune constante ne peut pas tre attribue un pointeur sur lequel aucune restriction ne sapplique (cette opration autoriserait le changement de la valeur de lobjet).
int x = 1; const int y = 2; const int * pt1 = &x; // OK const int * pt2 = &y; // OK int * pt3 = &y; // ERREUR : on pourrait sinon modifier y (* pt3 = 17)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
27/36
Quelques lments importants du C++
Les pointeurs et les constantes
Le mot cl const peut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * x ou const int * x) dclarer un pointeur constant sur un objet (int * const x)
Remarque 2 : Un pointeur dni comme pointeur sur une variable const ne peut pas tre utilis pour modier une variable, mme si ceux-ci peuvent pointer sur des variables non-const.
int x = 17; const int * ptx = &x; * ptx = 18; // ERREUR : on ne peut modifier l objet pointe par ptx , // bien que x soit modifiable
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
27/36
Quelques lments importants du C++
Les rfrences en C++
En C++, une rfrnce permet de dnir un alias sur une variable, fournit une autre nom pour une variable : X & signie rfrence X . Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit tre initialise.
int x = 17; int & ref1 = x; int & ref2 ; // OK : ref1 et x font maintenant reference au meme int // ERREUR : ref2 doit etre initialise
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
28/36
Quelques lments importants du C++
Les rfrences en C++
En C++, une rfrnce permet de dnir un alias sur une variable, fournit une autre nom pour une variable : X & signie rfrence X . Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit tre initialise.
int x = 17; int & ref1 = x; int & ref2 ; // OK : ref1 et x font maintenant reference au meme int // ERREUR : ref2 doit etre initialise
Les rfrences sont principalement utilises pour la spcication des arguments et des valeurs renvoyes pour les fonctions
int foo ( int & x){ x = x + 1; } int main ( void ){ int x = 16; foo (x); }
// a la sortie de foo : x = 17
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
28/36
Quelques lments importants du C++
Les rfrences et les constantes
Une rfrence non-constante de type T & doit tre initialise avec un objet non-constant de type T (une variable, par exemple).
const int x = 17; int y = 2011; int & ref1 = x; int & ref2 = 17; int & ref3 = y; // ERREUR : x n est pas une variable non - constante // ERREUR : 17 n est pas un objet non - constant // OK : y est une variable non - constante de type int
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
29/36
Quelques lments importants du C++
Les rfrences et les constantes
Une rfrence non-constante de type T & doit tre initialise avec un objet non-constant de type T (une variable, par exemple).
const int x = 17; int y = 2011; int & ref1 = x; int & ref2 = 17; int & ref3 = y; // ERREUR : x n est pas une variable non - constante // ERREUR : 17 n est pas un objet non - constant // OK : y est une variable non - constante de type int
Une rfrence constante (ou const-rfrence) de type const T & peut tre initialise avec un objet non-constant de type T ou constant de type const T.
const int x = 17; int y = 2011; const int & ref1 = x; const int & ref2 = 17; const int & ref3 = y; // OK : x est pas une variable constante ( const int ) // OK : 17 est pas un objet constant // OK : y est une variable non - constante de type int
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
29/36
Premiers exemples de programmes C++
Plan du cours
1. Pourquoi la programmation oriente objet ? 2. Principes fondamentaux de la programmation oriente objet 3. lments de modlisation dun programme orient objet 4. Quelques lments importants du C++ 5. Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
30/36
Premiers exemples de programmes C++
Modlisation dun point du plan 2D
On souhaite modliser un point du plan 2D
un point est caractris par ses coordonnes (x,y ) dans le plan et il peut tre afch (au moins ses coordonnes, dans un premier temps) et
translat.
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
31/36
Premiers exemples de programmes C++
Modlisation dun point du plan 2D
On souhaite modliser un point du plan 2D
un point est caractris par ses coordonnes (x,y ) dans le plan et il peut tre afch (au moins ses coordonnes, dans un premier temps) et
translat.
On doit pouvoir galement :
linitialiser, et accder / modier ses coordonnes.
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
31/36
Premiers exemples de programmes C++
Modlisation dun point du plan 2D
On souhaite modliser un point du plan 2D
un point est caractris par ses coordonnes (x,y ) dans le plan et il peut tre afch (au moins ses coordonnes, dans un premier temps) et
translat.
On doit pouvoir galement :
linitialiser, et accder / modier ses coordonnes.
Remarque
attributs = privs mthodes = publiques
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
31/36
Premiers exemples de programmes C++
Dclaration de la classe Point2D
// Point2D . hpp # ifndef __POINT2D_HPP__ # define __POINT2D_HPP__ class Point2D { private : float x , y; public : void init2d ( float , float ); void translate2d ( float , float ); void print ( void ); float getX ( void ); float getY ( void ); void setX ( float ); void setY ( float ); }; // <---- A NE PAS OUBLIER !!
# endif // __POINT2D_HPP__
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
32/36
Premiers exemples de programmes C++
Dnition de la classe Point2D
// Point2D . cpp # include < iostream > # include " Point2D . hpp " // iostream -> gestion des entrees - sorties
void Point2D :: init2d ( float _x , float _y ){ x = _x ; y = _y ; } void Point2D :: translate2d ( float _x , float _y ){ x += _x ; y += _y ; } void Point2D :: print ( void ){ std :: cout << " --> Point2D (" << x << " ," << y << ")" << std :: endl ; } float Point2D :: getX ( void ){ return x; } void Point2D :: setX ( float _x ){ x = _x ; } // idem : void Point2D :: setY ( float _y ){ ... } // idem : float Point2D :: getY ( void ){ ... }
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
33/36
Premiers exemples de programmes C++
Utilisation simple de la classe Point2D
Dclaration de deux points
un point statique (2.5,1.5) un point dynamique (17.3,15.1)
// c1 - expl1 . cpp # include < iostream > # include " Point2D . hpp " int main ( void ) { Point2D a;
Point2D * b = new Point2D () ; // allocation dynamique de b
a. init2d (2.5 ,1.5) ; b -> init2d (17.3 ,15.1) ; std :: cout << " Avant translate2d (1 ,1) " << std :: endl ; a. print () ; b -> print () ; a. translate2d (1 ,1) ; b -> translate2d (1 ,1) ; std :: cout << " Apres translate2d (1 ,1) " << std :: endl ; a. print () ; b -> print () ; delete b; // liberation de la memoire de b return 0; }
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
34/36
Premiers exemples de programmes C++
Compilation et excution de cet exemple simple
Utilisation du compilateur GNU C++ (g++ 4.5)
compilation spare idalement (notamment dans vos TP/projet), utilisation dun makele
$ > g ++ -c Point2D . cpp $ > g ++ -c c1 - expl1 . cpp $ > g ++ -o c1 - expl1 c1 - expl1 .o Point2D .o $ > ./ c1 - expl1 Avant translate (1 ,1) --> Point2D (2.5 ,1.5) --> Point2D (17.3 ,15.1) Apres translate (1 ,1) --> Point2D (3.5 ,2.5) --> Point2D (18.3 ,16.1)
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
35/36
Questions ?
Guillaume Revy (Univ. de Perpignan Via Domitia)
Introduction la Programmation Oriente Objet ... et son application au C++
36/36