01-programmationorienteeobjet
TRANSCRIPT
-
8/12/2019 01-ProgrammationOrienteeObjet
1/56
Licence Sciences, Technologies, Sant Universit de Perpignan Via DomitiaSemestre 5 (L3) - Mention Mathmatiques, Informatique Anne universitaire 2011/2012
Programmation Oriente Objet
Introduction la Programmation Oriente Objet... et son application au C++
Guillaume [email protected]
Universit de PerpignanVia Domitia
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 1/36
http://localhost/var/www/apps/conversion/tmp/scratch_8/[email protected]://localhost/var/www/apps/conversion/tmp/scratch_8/[email protected] -
8/12/2019 01-ProgrammationOrienteeObjet
2/56
Prrequis et organisation du cours
Prrequis: bonne connaissance enprogrammation Cet enalgorithmique
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 final (quelque part en dcembre/janvier)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 2/36
-
8/12/2019 01-ProgrammationOrienteeObjet
3/56
Rappels lmentaires de langage C la fonction principalemain
/ / h el lo . c
/ / I nc l us i on d es f ic h ie rs d e nt et es#include / / g e s t i on d es e n tr e es / s o r t ie s#include / / u t i l is a t io n d e s f o n c ti o ns m a t he m a ti q u es
/ / D e fi n it io n d e l a f on c ti on p r in c ip a lein tmain ( void ){
printf (" H el lo w or ld ! \ n"); / / A f f ic h ag e d e " H e ll o w or ld ! "return 0; / / p ar c on ve nt io n , " r e tu rn 0 " i n di qu e q u au cu ne
/ / e rr eu r n es t s u rv en ue}
$ > g cc - Wa ll - o h el lo h el lo . c
$ > . / he ll o
H el lo w or ld !
Remarques:
la fonctionmainest le point dentre du programme elle estindispensable
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
-
8/12/2019 01-ProgrammationOrienteeObjet
4/56
Rappels lmentaires de langage C dclaration dune variable
/ / r ap pe l - v a ri a b le . c
#include
in tmain ( void ){
in t x1 ; / / D e cl a ra ti o n d e l e nt ie r x 1in t x2 = 18; / / D e cl a ra ti o n e t i n it i al i sa t io n de l e nt ie r x 2x1 = 17; / / A ff ec ta ti on de 17 a l en ti er x
printf (" Ma v al eu r e nt ie re x 1 v au t : % d .\ n ",x1 );printf (" Ma v al eu r e nt ie re x 2 v au t : % d .\ n ",x2 );
return 0;}
$ > g cc - W al l - o v a ri ab l es v a ri ab l es . c
$ > . / r ap pe l - v a ri a b leM a v al eu r e nt ie re x 1 v au t : 1 7.M a v al eu r e nt ie re x 2 v au t : 1 8.
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 4/36
-
8/12/2019 01-ProgrammationOrienteeObjet
5/56
Rappels lmentaires de langage C fonction et passage de paramtres
/ / f o n ct i o ns . c
#include
in taddition_v1 ( in t a , in t b) // c = a + b{ in t c; c = a + b; return c; }
voidaddition_v2 ( in t a , in t b , in t c) // c = a + b
{ c = a + b; }
voidaddition_v3 ( in t a , in t b , in t *c) // c = a + b{ *c = a + b; }
in tmain ( void ){
in t x1 = 17 , x2 = 18;in t c_v1 = addition_v1 (x1 , x2 ); // x1 et x2 s on t p as se s p ar v al eu rsin t c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); // c _v 2 es t pa ss e pa r va le urin t c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 ); // c _v 3 e st p as se p ar a dr es se
printf (" Fi na le me nt c _v 1 = % d, c_v 2 = % 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
-
8/12/2019 01-ProgrammationOrienteeObjet
6/56
Rappels lmentaires de langage C fonction et passage de paramtres
/ / f o n ct i o ns . c
/ / . ..in tmain ( void ){
in t x1 = 17 , x2 = 18;in t c_v1 = addition_v1 (x1 , x2 ); // x1 et x2 s on t p as se s p ar v al eu rsin t c_v2 = 0; addition_v2 (x1 ,x2 , c_v2 ); // c _v 2 es t pa ss e pa r va le urin t c_v3 ; addition_v3 (x1 ,x2 ,& c_v3 ); // c _v 3 e st p as se p ar a dr es se
printf (" Fi na le me nt c _v 1 = % d, c_v 2 = % d et c_ v3 = % d.\ n" ,c_v1 , c_v2 , c_v3 );
return 0;}
$ > g cc - W al l - o f o nc ti o ns f o nc ti o ns . c
$ > . / f o n ct i o nsF in al em en t c _v 1 = 35 , c _v 2 = 0 et c_ v3 = 35.
Remarque:
une variable passe par valeur, nest pas modifie 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
-
8/12/2019 01-ProgrammationOrienteeObjet
7/56
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
-
8/12/2019 01-ProgrammationOrienteeObjet
8/56
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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
9/56
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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
10/56
Pourquoi la programmation oriente objet ?
Quest ce que la programmation oriente objet ?
Programmation Oriente Objet(POO) : paradigme de programmationinformatique
labor par Alan Kay, dans les annes 70
dfinition 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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
11/56
q p g j
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
Lecot des dpenses informatiques principalementcot des logiciels
program
matio
nproced
urale
co
utde
lapplication
taille de lapplication
cot du logiciel de plus en plus lev
en programmation procdurale : cot du logiciel croit demanire exponentielle avec la complexit de lapplication
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 10/36
Pourquoi la programmation oriente objet ?
-
8/12/2019 01-ProgrammationOrienteeObjet
12/56
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
Lecot des dpenses informatiques principalementcot des logiciels
program
matio
nproced
urale
coutde
lapplication
taille de lapplication
cot du logiciel de plus en plus lev
en programmation procdurale : cot du logiciel croit demanire 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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
13/56
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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
14/56
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 modification/extension dune partie dun programme
confinement 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 ?
-
8/12/2019 01-ProgrammationOrienteeObjet
15/56
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 (fournitaux clients, par exemple)
progra
mmati
onori
enteeobjet
coutdel
application
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
-
8/12/2019 01-ProgrammationOrienteeObjet
16/56
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
-
8/12/2019 01-ProgrammationOrienteeObjet
17/56
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
lesattributs: donnes de lobjet / variable quil contient et reprsentant son tat
lesmthodes(fonctions membres) : caractrise son comportement, lensemble desactions que lobjet peut ralsier, accs/modification des donnes
uneidentit, 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
-
8/12/2019 01-ProgrammationOrienteeObjet
18/56
La notion de classe
Une classe = lastructure dun objet elle dfinit 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 dinstanciationde 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
-
8/12/2019 01-ProgrammationOrienteeObjet
19/56
La notion de classe
Une classe = lastructure dun objet elle dfinit 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 dinstanciationde 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
-
8/12/2019 01-ProgrammationOrienteeObjet
20/56
Exemple de classe et dobjet
Dfinition dune classePersonne
(on verra plus tard le formalisme utilis ici)
dfinition dun typePersonne
regroupe les proprits communues aux
personnes : caractristiques (attributs) etcomportement (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
-
8/12/2019 01-ProgrammationOrienteeObjet
21/56
Exemple de classe et dobjet
Dfinition dune classePersonne
(on verra plus tard le formalisme utilis ici)
dfinition dun typePersonne
regroupe les proprits communues aux
personnes : caractristiques (attributs) etcomportement (mthodes)
Instanciation dun objet de typePersonne
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
-
8/12/2019 01-ProgrammationOrienteeObjet
22/56
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 / modification
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
-
8/12/2019 01-ProgrammationOrienteeObjet
23/56
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 / modification
augmentation la scurit dune application
facilit de maintenance de lapplication
Hritage permettre la cration dune classe partir dune classe existante la classedrive(fille) contientsous certaines conditionsles attributs et les
mthodes de la classemre(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
-
8/12/2019 01-ProgrammationOrienteeObjet
24/56
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 / modification
augmentation la scurit dune application
facilit de maintenance de lapplication
Hritage permettre la cration dune classe partir dune classe existante la classedrive(fille) contientsous certaines conditionsles attributs et les
mthodes de la classemre(super-classe)
permet ainsi la rutilisation de code
plusieurs types dhritage : public, protg, ou priv
Polymorphisme permettre de redfinir dans une classe drive les mthodesdont 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
-
8/12/2019 01-ProgrammationOrienteeObjet
25/56
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
-
8/12/2019 01-ProgrammationOrienteeObjet
26/56
UML - Unified 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
-
8/12/2019 01-ProgrammationOrienteeObjet
27/56
UML - Unified 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 desdiagrammes 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
-
8/12/2019 01-ProgrammationOrienteeObjet
28/56
Reprsentation dune classe
Reprenons la classePersonneprcdente
encapsulation dfinition des mthodes accessibles lextrieure de la classe= mthodespubliques
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
-
8/12/2019 01-ProgrammationOrienteeObjet
29/56
Reprsentation dune classe
Reprenons la classePersonneprcdente
encapsulation dfinition des mthodes accessibles lextrieure de la classe= mthodespubliques
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
-
8/12/2019 01-ProgrammationOrienteeObjet
30/56
Relation dhritage
Intrt de lhritage :
transfertdes proprits dune classe mre vers lesclasses filles
gnralisation: factorisation de classes en regroupantdes 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 classesdrives
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
R l i d i i d i i d i
-
8/12/2019 01-ProgrammationOrienteeObjet
31/56
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
R l ti d i ti d iti t d ti
-
8/12/2019 01-ProgrammationOrienteeObjet
32/56
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
R l ti d i ti d iti t d ti
-
8/12/2019 01-ProgrammationOrienteeObjet
33/56
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 decomposition faible
les objets agrgs ont une dure de vieindpendantede 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
R l ti d i ti d iti t d ti
-
8/12/2019 01-ProgrammationOrienteeObjet
34/56
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 decomposition faible
les objets agrgs ont une dure de vieindpendantede celle de lagrgat
Composition exprime une relation decomposition forte
les objets agrgs ont une dure de viedpendantede 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
-
8/12/2019 01-ProgrammationOrienteeObjet
35/56
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++
-
8/12/2019 01-ProgrammationOrienteeObjet
36/56
Petite histoire du C++
Annes 80 : mise au point du langage C++ parBjarne 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++
-
8/12/2019 01-ProgrammationOrienteeObjet
37/56
Fonctionnalits introduites par C++
Les oprateursnewet deletepour la gestion dallocation mmoire
Les types de donnes bool(boolen), etstring(chane de caractres)
Le mot cl constpour dfinir des constantes
Lesrfrences
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 (outemplates)
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++
Dfinition dentits constantes avec le mot cl const
-
8/12/2019 01-ProgrammationOrienteeObjet
38/56
Dfinition d entits constantes avec le mot cl const
En C++, le mot cl constpermet lutilisateur de dfinir des entits constantes(fonctions/variables)
leur valeur ne pourra pas tre modifie directement
elles doivent treinitialises la dclaration
exemple: la plupart des paramtres de fonctions sont lus, mais pas modifis
c o ns t i nt model = 90; / / m od el e st u ne c on st an te = 90
c o ns t i nt v [ ] = { 1 ,2 , 3 ,4 }; / / v [i ] e st u ne c on st an te
c o ns t i nt x; / / E RR EU R : x d oi t e tr e i ni t ia l is e
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 26/36
-
8/12/2019 01-ProgrammationOrienteeObjet
39/56
Quelques lments importants du C++
Les pointeurs et les constantes
-
8/12/2019 01-ProgrammationOrienteeObjet
40/56
Les pointeurs et les constantes
Le mot clconstpeut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * xouconst int * x)
dclarer un pointeur constant sur un objet (int * const x)
Exemple 1: pointeur vers une valeur constante
c o ns t c h ar * ms g = " e x em pl e d e m es sa ge c o ns ta nt " ;
* ms g = E ; // E RR EU R : m o di f ic a ti o n i nt er di te , c ar l a v al eu r p o in te e n e// peut etre modifiee
ms g = "modiciation"; / / O K : m od if ic at io n de l ob je t p oi nt e , et n on 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
-
8/12/2019 01-ProgrammationOrienteeObjet
41/56
Les pointeurs et les constantes
Le mot clconstpeut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * xouconst int * x)
dclarer un pointeur constant sur un objet (int * const x)
Exemple 2: pointeur constant vers un objet non constant
char * const ms g = " e xe m pl e d e p o i nt e ur c o n st a nt " ;
ms g = "Test"; / / E RR EU R : m od i fi ca t io n i nt er di t , c ar l o bj et s ur l eq ue l// le pointeur pointe ne peut pas etre modifie
* ms g = E ; / / O K : l e c o nt en u de l ob je t p eu t e t re m od if ie
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
-
8/12/2019 01-ProgrammationOrienteeObjet
42/56
Les pointeurs et les constantes
Le mot clconstpeut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * xouconst 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 unpointeur sur lequel aucune restriction ne sapplique (cette opration autoriserait lechangement de la valeur de lobjet).
in t x = 1;c o ns t i nt y = 2;
c o ns t i nt * pt 1 = &x; // OKc o ns t i nt * pt 2 = &y; // OK
in t * pt 3 = &y; / / ER RE UR : on p ou rr ai t si no n mo di fi er y (* p t3 = 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
-
8/12/2019 01-ProgrammationOrienteeObjet
43/56
Les pointeurs et les constantes
Le mot clconstpeut tre utilis pour :
dclarer un pointeur sur un objet constant (int const * xouconst int * x)
dclarer un pointeur constant sur un objet (int * const x)
Remarque 2: Un pointeur dfini comme pointeur sur une variableconstne peut
pas tre utilis pour modifier une variable, mme si ceux-ci peuvent pointer surdes variables non-const.
in t x = 17;c o ns t i nt * pt x = &x;
* pt x = 18; / / E RR EU R : on ne p eu t m od if ie r l ob je t p oi nt e p ar 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++
-
8/12/2019 01-ProgrammationOrienteeObjet
44/56
Les rfrences en C++
En C++, unerfrncepermet de dfinir unaliassur une variable, fournit uneautre nom pour une variable :X&signifierfrence X.
Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit treinitialise.
in t x = 17;in t & ref1 = x; / / OK : re f1 et x fo nt ma in te na nt r ef er en ce au me me in t
in t & ref2 ; / / E RR EU R : r ef 2 d oi t e tr e i ni t ia l is e
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++
-
8/12/2019 01-ProgrammationOrienteeObjet
45/56
En C++, unerfrncepermet de dfinir unaliassur une variable, fournit uneautre nom pour une variable :X&signifierfrence X.
Une rfrence sutilise comme une variable. Pour garantir sa validit, elle doit treinitialise.
in t x = 17;in t & ref1 = x; / / OK : re f1 et x fo nt ma in te na nt r ef er en ce au me me in t
in t & ref2 ; / / E RR EU R : r ef 2 d oi t e tr e i ni t ia l is e
Les rfrences sont principalement utilises pour la spcification des argumentset des valeurs renvoyes pour les fonctions
in t fo o ( in t & x){ x = x + 1; }
in tmain ( void ){
in t x = 16;fo o (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
-
8/12/2019 01-ProgrammationOrienteeObjet
46/56
Une rfrence non-constante de typeT&doit tre initialise avec un objetnon-constant de typeT(une variable, par exemple).
c o ns t i nt x = 17;in t y = 2 01 1;
in t & ref1 = x; / / E RR EU R : x n es t p as u ne va ri ab le non - c o ns ta nt ein t & ref2 = 17; / / E RR EU R : 17 n es t p as un ob je t non - c o ns ta nt
in t & ref3 = y; / / OK : y e st un e v ar ia bl e non - c o ns ta nt e de ty pe in t
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
-
8/12/2019 01-ProgrammationOrienteeObjet
47/56
Une rfrence non-constante de typeT&doit tre initialise avec un objetnon-constant de typeT(une variable, par exemple).
c o ns t i nt x = 17;in t y = 2 01 1;
in t & ref1 = x; / / E RR EU R : x n es t p as u ne va ri ab le non - c o ns ta nt ein t & ref2 = 17; / / E RR EU R : 17 n es t p as un ob je t non - c o ns ta nt
in t & ref3 = y; / / OK : y e st un e v ar ia bl e non - c o ns ta nt e de ty pe in t
Une rfrence constante (ouconst-rfrence) de typeconst T&peut treinitialise avec un objet non-constant de type Tou constant de typeconst T.
c o ns t i nt x = 17;
in t y = 2 01 1;
c o ns t i nt & ref1 = x; / / O K : x e st p as u ne v ar ia bl e c on st an te ( c on st i nt )c o ns t i nt & ref2 = 17; // OK : 17 est pas un o bj et c on st an t
c o ns t i nt & ref3 = y; / / O K : y e st u ne v ar ia bl e n on - c o ns ta nt e de t yp e i n t
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
-
8/12/2019 01-ProgrammationOrienteeObjet
48/56
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
-
8/12/2019 01-ProgrammationOrienteeObjet
49/56
On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan
et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.
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
-
8/12/2019 01-ProgrammationOrienteeObjet
50/56
On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan
et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.
On doit pouvoir galement : linitialiser,
et accder / modifier 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
-
8/12/2019 01-ProgrammationOrienteeObjet
51/56
On souhaite modliser unpointdu plan 2D un point est caractris par ses coordonnes (x,y) dans le plan
et il peut tre affich (au moins ses coordonnes, dans un premier temps) ettranslat.
On doit pouvoir galement : linitialiser,
et accder / modifier 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
-
8/12/2019 01-ProgrammationOrienteeObjet
52/56
/ / P o in t 2 D . h pp
#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 O UB LI ER !!
#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++
Dfinition de la classe Point2D
-
8/12/2019 01-ProgrammationOrienteeObjet
53/56
/ / P o in t 2D . c p p
#include / / i os t re am - > g es ti on d es e nt re es - s o rt ie s#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 ){st d :: cout
-
8/12/2019 01-ProgrammationOrienteeObjet
54/56
Dclaration de deux points
un pointstatique (2.5,1.5)
un pointdynamique (17.3,15.1)
/ / c 1 - e x pl 1 . c pp
#include #include "Point2D.hpp"
in tmain ( void ){
P o in t 2D a; Point2D * b = n ew P o in t 2D () ; // a ll o ca t io n d yn a mi qu e d e b
a. init2d (2.5,1.5); b -> init2d (17.3,15.1);st d :: cout translate2d (1,1);st d :: cout
-
8/12/2019 01-ProgrammationOrienteeObjet
55/56
Utilisation du compilateur GNU C++ (g++ 4.5) compilation spare
idalement (notamment dans vos TP/projet), utilisation dun makefile
$ > g + + - c P oi nt 2D . c pp$ > g + + - c c1 - e x pl 1 . cp p$ > g + + - o c1 - e x pl 1 c1 - e x pl 1 . o P oi nt 2D . o
$ > . / c1 - e x p l 1Avant translate(1,1)- - > P o in t 2D ( 2 .5 , 1 . 5 )- - > P o in t 2D ( 1 7. 3 , 1 5 .1 )Apres translate(1,1)
- - > P o in t 2D ( 3 .5 , 2 . 5 )- - > P o in t 2D ( 1 8. 3 , 1 6 .1 )
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 35/36
-
8/12/2019 01-ProgrammationOrienteeObjet
56/56
Questions ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction la Programmation Oriente Objet ... et son application au C++ 36/36