Vous êtes sur la page 1sur 56

Licence Sciences, Technologies, Sant Universit de Perpignan Via Domitia

Semestre 5 (L3) - Mention Mathmatiques, Informatique Anne universitaire 2011/2012


Programmation Oriente Objet
Introduction la Programmation Oriente Objet
... et son application au C++
Guillaume Revy
guillaume.revy@univ-perp.fr
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 6 sances de 1.5h
21h de TD 14 sances de 1.5h
valuation :
20% projet de programmation (seul ou en binme, vers octobre/novembre)
80% 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 dentetes
#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 quaucune
// erreur nest 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; // Declaration de lentier x1
int x2 = 18; // Declaration et initialisation de lentier x2
x1 = 17; // Affectation de 17 a lentier 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) // c = a + b
{ int c; c = a + b; return c; }
void
addition_v2(int a, int b, int c) // c = a + b
{ c = a + b; }
void
addition_v3(int a, int b, int *c) // c = a + b
{ *c = a + b; }
int
main( void )
{
int x1 = 17, x2 = 18;
int c_v1 = addition_v1(x1,x2); // x1 et x2 sont passes par valeurs
int c_v2 = 0; addition_v2(x1,x2,c_v2); // c_v2 est passe par valeur
int c_v3; addition_v3(x1,x2,&c_v3); // 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
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); // x1 et x2 sont passes par valeurs
int c_v2 = 0; addition_v2(x1,x2,c_v2); // c_v2 est passe par valeur
int c_v3; addition_v3(x1,x2,&c_v3); // 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
p
r
o
g
r
a
m
m
a
t
i
o
n
p
r
o
c
e
d
u
r
a
l
e
c
o

u
t
d
e
l

a
p
p
l
i
c
a
t
i
o
n
taille de lapplication
cot du logiciel de plus en plus lev
en programmation procdurale : cot du logiciel croit de
manire exponentielle avec la complexit de lapplication
Objectifs de la programmation oriente objet :
diminuer le cot du logiciel
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++ 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
p
r
o
g
r
a
m
m
a
t
i
o
n
p
r
o
c
e
d
u
r
a
l
e
c
o

u
t
d
e
l

a
p
p
l
i
c
a
t
i
o
n
taille de lapplication
cot du logiciel de plus en plus lev
en programmation procdurale : cot du logiciel croit de
manire exponentielle avec la complexit de lapplication
Objectifs de la programmation oriente objet :
diminuer le cot du logiciel
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++ 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
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 ?
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)
p
r
o
g
r
a
m
m
a
t
i
o
n
o
r
i
e
n
t
e
e
o
b
j
e
t
c
o

u
t
d
e
l

a
p
p
l
i
c
a
t
i
o
n
taille de lapplication
Inversion de la courbe dvolution du cot du logiciel
le dveloppement dune petite application gros effort
par contre, son extension effort faible
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
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
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)
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
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
en cachant limplantation de lobjet ( lutilisateur, au moins)
protection de laccs aux donnes mcanisme daccs / modication
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
Principes fondamentaux de la programmation oriente objet
Les trois grands principes de la POO
Encapsulation rassembler les donnes et mthodes au sein dune structure
en cachant limplantation de lobjet ( lutilisateur, au moins)
protection de laccs aux donnes mcanisme daccs / modication
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
Principes fondamentaux de la programmation oriente objet
Les trois grands principes de la POO
Encapsulation rassembler les donnes et mthodes au sein dune structure
en cachant limplantation de lobjet ( lutilisateur, au moins)
protection de laccs aux donnes mcanisme daccs / modication
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
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
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
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
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
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
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
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; // model est une constante = 90
const int v[] = {1,2,3,4}; // v[i] est une constante
const int x; // 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++
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; // model est une constante = 90
const int v[] = {1,2,3,4}; // v[i] est une constante
const int x; // 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 lobjet 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 lobjet sur lequel
// le pointeur pointe ne peut pas etre modifie
*msg = E; // OK : le contenu de lobjet 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 lobjet 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; // OK : ref1 et x font maintenant reference au meme int
int& ref2; // 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 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; // OK : ref1 et x font maintenant reference au meme int
int& ref2; // 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; // ERREUR : x nest pas une variable non -constante
int& ref2 = 17; // ERREUR : 17 nest pas un objet non -constant
int& ref3 = y; // 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; // OK : x est pas une variable constante (const int)
const int& ref2 = 17; // OK : 17 est pas un objet constant
const int& ref3 = y; // 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; // ERREUR : x nest pas une variable non -constante
int& ref2 = 17; // ERREUR : 17 nest pas un objet non -constant
int& ref3 = y; // 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; // OK : x est pas une variable constante (const int)
const int& ref2 = 17; // OK : 17 est pas un objet constant
const int& ref3 = y; // 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.
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++
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++
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 > // iostream -> gestion des entrees -sorties
#include "Point2D.hpp"
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){ // idem : float Point2D::getY(void){ ... }
return x;
}
void Point2D::setX(float _x){ // idem : void Point2D::setY(float _y){ ... }
x = _x;
}
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