Introduction A La Programmation Orientee
Introduction A La Programmation Orientee
Guillaume Revy
[Link]@[Link]
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 1/36
Prérequis et organisation du cours
Organisation :
֒→ 9h de cours 6 séances de 1.5h
֒→ 21h de TD 14 séances de 1.5h
Évaluation :
֒→ 20% projet de programmation (seul ou en binôme, vers octobre/novembre)
֒→ 80% examen final (quelque part en décembre/janvier)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 2/36
Rappels élémentaires de langage C
la fonction principale main
// hello .c
$ > ./ hello
Hello world !
Remarques :
֒→ la fonction main est le point d’entrée du programme elle est indispensable
֒→ les instructions sont exécutées dans l’ordre d’apparition dans le programme
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 3/36
Rappels élémentaires de langage C
déclaration d’une variable
// rappel - variable .c
# include < stdio .h >
int
main ( void )
{
int x1 ; // Declaration de l ’ entier x1
int x2 = 18; // Declaration et initialisation de l ’ entier x2
x1 = 17; // Affectation de 17 a l ’ entier x
return 0;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 4/36
Rappels élémentaires de langage C
fonction et passage de paramètres
// 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;
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 5/36
Rappels élémentaires de langage C
fonction et passage de paramètres
// 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;
}
$ > ./ fonctions
Finalement c_v1 = 35 , c_v2 = 0 et c_v3 = 35.
Remarque :
֒→ une variable passée par valeur, n’est pas modifiée à l’extérieure de la fonction
utilisation du passage par adresse (&c_v3)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 5/36
Et maintenant la Programmation Orientée 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 détails techniques.
B. Stroustrup, Le langage C++ - Edition spéciale - §1.1.2 (2000)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 6/36
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 7/36
Pourquoi la programmation orientée objet ?
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 8/36
Pourquoi la programmation orientée objet ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 9/36
Pourquoi la programmation orientée objet ?
coût de l’application
e
al
manière exponentielle avec la complexité de l’application
ur
éd
oc
pr
n
io
at
m
m
ra
og
pr
taille de l’application
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 10/36
Pourquoi la programmation orientée objet ?
coût de l’application
e
al
manière exponentielle avec la complexité de l’application
ur
éd
oc
pr
n
io
at
m
m
ra
og
Objectifs de la programmation orientée objet :
pr
֒→ diminuer le coût du logiciel taille de l’application
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 10/36
Pourquoi la programmation orientée objet ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 11/36
Pourquoi la programmation orientée objet ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 11/36
Pourquoi la programmation orientée objet ?
coût de l’application
Inversion de la courbe d’évolution du coût du logiciel
t
bje
֒→ le développement d’une petite application gros effort téeo
r ien
֒→ par contre, son extension effort faible no
atio
mm
gra
pro
taille de l’application
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 12/36
Principes fondamentaux de la programmation orientée objet
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 13/36
Principes fondamentaux de la programmation orientée objet
La notion d’objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 14/36
Principes fondamentaux de la programmation orientée objet
La notion de classe
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 15/36
Principes fondamentaux de la programmation orientée objet
La notion de classe
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 15/36
Principes fondamentaux de la programmation orientée objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 16/36
Principes fondamentaux de la programmation orientée objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 16/36
Principes fondamentaux de la programmation orientée objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 17/36
Principes fondamentaux de la programmation orientée objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 17/36
Principes fondamentaux de la programmation orientée objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 17/36
Éléments de modélisation d’un programme orienté objet
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 18/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 19/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 19/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 20/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 20/36
Éléments de modélisation d’un programme orienté objet
Relation d’héritage
Intérêt de l’héritage :
֒→ transfert des propriétés d’une classe mère vers les
classes filles
֒→ généralisation : factorisation de classes en regroupant
des propriétés communes
֒→ spécialisation : ajout d’attributs et méthodes
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 21/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 22/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 22/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 22/36
Éléments de modélisation d’un programme orienté objet
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 22/36
Quelques éléments importants du C++
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 23/36
Quelques éléments importants du C++
Années 80’ : mise au point du langage C++ par Bjarne Stroustrup (Bell labs)
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 24/36
Quelques éléments importants du C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 25/36
Quelques éléments importants du C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 26/36
Quelques éléments importants du C++
int
main ( void ){
int x;
foo (& x); // la variable x peut etre modifiee
}
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 26/36
Quelques éléments importants du C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++
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 Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++
Remarque 2 : Un pointeur défini comme pointeur sur une variable const ne peut
pas être utilisé pour modifier une variable, même si ceux-ci peuvent pointer sur
des variables non-const.
int x = 17;
const int * ptx = &x;
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++
Une référence s’utilise comme une variable. Pour garantir sa validité, elle doit être
initialisée.
int x = 17;
int & ref1 = x; // OK : ref1 et x font maintenant reference au meme int
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 28/36
Quelques éléments importants du C++
Une référence s’utilise comme une variable. Pour garantir sa validité, elle doit être
initialisée.
int x = 17;
int & ref1 = x; // OK : ref1 et x font maintenant reference au meme int
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 28/36
Quelques éléments importants du C++
Une référence non-constante de type T & doit être initialisée avec un objet
non-constant de type T (une variable, par exemple).
int & ref1 = x; // ERREUR : x n ’est pas une variable non - constante
int & ref2 = 17; // ERREUR : 17 n ’est pas un objet non - constant
int & ref3 = y; // OK : y est une variable non - constante de type int
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 29/36
Quelques éléments importants du C++
Une référence non-constante de type T & doit être initialisée avec un objet
non-constant de type T (une variable, par exemple).
int & ref1 = x; // ERREUR : x n ’est pas une variable non - constante
int & ref2 = 17; // ERREUR : 17 n ’est pas un objet non - constant
int & ref3 = y; // OK : y est une variable non - constante de type int
Une référence constante (ou const-référence) de type const T & peut être
initialisée avec un objet non-constant de type T ou constant de type const T.
const int & ref3 = y; // OK : y est une variable non - constante de type int
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 29/36
Premiers exemples de programmes C++
Plan du cours
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 30/36
Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 31/36
Premiers exemples de programmes C++
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 31/36
Premiers exemples de programmes C++
Remarque
֒→ attributs = privés
֒→ méthodes = publiques
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 31/36
Premiers exemples de programmes C++
class Point2D
{
private :
float x , y;
public :
# endif // __POINT2D_HPP__
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 32/36
Premiers exemples de programmes C++
// Point2D . cpp
# include < iostream > // iostream -> gestion des entrees - sorties
# include " Point2D . hpp "
void Point2D :: init2d ( float _x , float _y ){
x = _x ;
y = _y ;
}
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 Orientée Objet ... et son application au C++ 33/36
Premiers exemples de programmes C++
// c1 - expl1 . cpp
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 34/36
Premiers exemples de programmes C++
$ > ./ 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 Orientée Objet ... et son application au C++ 35/36
Questions ?
Guillaume Revy (Univ. de Perpignan Via Domitia) Introduction à la Programmation Orientée Objet ... et son application au C++ 36/36