0% ont trouvé ce document utile (0 vote)
101 vues56 pages

CPP Et Poo

Transféré par

Andri Tsoa
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
101 vues56 pages

CPP Et Poo

Transféré par

Andri Tsoa
Copyright
© Attribution Non-Commercial (BY-NC)
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi