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

Introduction A La Programmation Orientee

Programmes

Transféré par

m2tkgzxgpd
Copyright
© © All Rights Reserved
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)
33 vues56 pages

Introduction A La Programmation Orientee

Programmes

Transféré par

m2tkgzxgpd
Copyright
© © All Rights Reserved
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é Université de Perpignan Via Domitia

Semestre 5 (L3) - Mention Mathématiques, Informatique Année universitaire 2011/2012

Programmation Orientée Objet

Introduction à la Programmation Orientée 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 Orientée Objet ... et son application au C++ 1/36
Prérequis et organisation du cours

Prérequis : bonne connaissance en programmation C et en algorithmique

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

// 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 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

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 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;
}

$ > gcc - Wall -o fonctions fonctions .c

$ > ./ 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

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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 ?

Qu’est ce que la programmation orientée objet ?

Programmation Orientée Objet (POO) : paradigme de programmation


informatique
֒→ élaboré par Alan Kay, dans les années 70’
֒→ définition et interactions de briques logicielles objets

Un objet = un concept, une idée ou une entité du monde physique


֒→ par exemple : une voiture, un étudiant, ...
֒→ possède une structure interne et un comportement

Quelques langages objets : C++, Java, Ada, PHP, Python, ...

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 ?

Pourquoi la programmation orientée objet ?

Depuis plusieurs années :


֒→ le matériel de moins en moins cher, et de plus en plus puissant
֒→ le développement d’applications de plus en plus performantes et complexes

Le coût des dépenses informatiques principalement coût des logiciels


֒→ coût du logiciel de plus en plus élevé
֒→ en programmation procédurale : coût du logiciel croit de

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 ?

Pourquoi la programmation orientée objet ?

Depuis plusieurs années :


֒→ le matériel de moins en moins cher, et de plus en plus puissant
֒→ le développement d’applications de plus en plus performantes et complexes

Le coût des dépenses informatiques principalement coût des logiciels


֒→ coût du logiciel de plus en plus élevé
֒→ en programmation procédurale : coût du logiciel croit de

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

֒→ augmenter sa durée de vie, sa réutilisabilité et sa facilité de maintenance

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 ?

Pourquoi la programmation orientée objet ?

Programmation orientée objet : modélisation directe d’objets du monde réels


֒→ de très nombreux représentants d’un tout petit nombre de concepts différents
֒→ exploiter cette redondance petites entités informatiques

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 ?

Pourquoi la programmation orientée objet ?

Programmation orientée objet : modélisation directe d’objets du monde réels


֒→ de très nombreux représentants d’un tout petit nombre de concepts différents
֒→ exploiter cette redondance petites entités informatiques

Réduction de l’impact d’une modification/extension d’une partie d’un programme


֒→ confinement dans de petites unités qui ont peu de contact avec l’extérieure = objets

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 ?

Pourquoi la programmation orientée objet ?

Finalement, un programme objet = production d’un ensemble d’objets


֒→ séparation de l’interface et de l’implantation de ce que fait l’objet
֒→ accès à un objet (et à ces données) se fait uniquement via l’interface de haut (fournit
aux clients, par exemple)

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

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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

Un objet = un concept, une idée ou une entité du monde physique


֒→ voiture, personne, étudiant, animal, fenêtre graphique, forme géométrique, ...

Dans un programme, un objet s’apparente à une variable

Un objet est caractérisé par trois notions


֒→ les attributs : données de l’objet / variable qu’il contient et représentant son état
֒→ les méthodes (fonctions membres) : caractérise son comportement, l’ensemble des
actions que l’objet peut réalsier, accès/modification des données
֒→ une identité, qui permet de le distinguer de manière unique des autres objets,
indépendamment de son état

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

Une classe = la structure d’un objet


֒→ elle définit son type
֒→ déclaration de l’ensemble des entités qui composeront un objet

Un objet est donc « issu » d’une classe


֒→ on dit qu’un objet est une instance (ou une occurrence) d’une classe
֒→ on parle d’instanciation 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

Une classe = la structure d’un objet


֒→ elle définit son type
֒→ déclaration de l’ensemble des entités qui composeront un objet

Un objet est donc « issu » d’une classe


֒→ on dit qu’un objet est une instance (ou une occurrence) d’une classe
֒→ on parle d’instanciation de classe

Une classe est composée de deux parties :


֒→ les attributs (données membres)
֒→ les méthodes (fonctions membres)

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

Exemple de classe et d’objet

Définition d’une classe Personne


(on verra plus tard le formalisme utilisé ici)
֒→ définition d’un type Personne
֒→ regroupe les propriétés communues aux
personnes : caractéristiques (attributs) et
comportement (méthodes)

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

Exemple de classe et d’objet

Définition d’une classe Personne


(on verra plus tard le formalisme utilisé ici)
֒→ définition d’un type Personne
֒→ regroupe les propriétés communues aux
personnes : caractéristiques (attributs) et
comportement (méthodes)

Instanciation d’un objet de type Personne


֒→ affectation d’une valeur à chaque attribut
֒→ possibilité d’agir, via les méthodes

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

Les trois grands principes de la POO


Encapsulation rassembler les données et méthodes au sein d’une structure
֒→ en cachant l’implantation de l’objet (à l’utilisateur, au moins)
֒→ protection de l’accès aux données mécanisme d’accès / modification
֒→ augmentation la sécurité d’une application
֒→ facilité de maintenance de l’application

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

Les trois grands principes de la POO


Encapsulation rassembler les données et méthodes au sein d’une structure
֒→ en cachant l’implantation de l’objet (à l’utilisateur, au moins)
֒→ protection de l’accès aux données mécanisme d’accès / modification
֒→ augmentation la sécurité d’une application
֒→ facilité de maintenance de l’application

Héritage permettre la création d’une classe à partir d’une classe existante


֒→ la classe dérivée (fille) contient sous certaines conditions les attributs et les
méthodes de la classe mère (super-classe)
֒→ permet ainsi la réutilisation de code
֒→ plusieurs types d’héritage : public, protégé, ou privé

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

Les trois grands principes de la POO


Encapsulation rassembler les données et méthodes au sein d’une structure
֒→ en cachant l’implantation de l’objet (à l’utilisateur, au moins)
֒→ protection de l’accès aux données mécanisme d’accès / modification
֒→ augmentation la sécurité d’une application
֒→ facilité de maintenance de l’application

Héritage permettre la création d’une classe à partir d’une classe existante


֒→ la classe dérivée (fille) contient sous certaines conditions les attributs et les
méthodes de la classe mère (super-classe)
֒→ permet ainsi la réutilisation de code
֒→ plusieurs types d’héritage : public, protégé, ou privé

Polymorphisme permettre de redéfinir dans une classe dérivée les méthodes


dont elle hérite de sa classe mère
֒→ une même méthode possède alors plusieurs formes

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

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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

UML - Unified Modeling Language

UML = langage de modélisation graphique à base de pictogrammes


֒→ années 90 : fusion des langages de modélisation objet : Booch, OMT, OOSE
֒→ apparition dans le cadre de la conception orientée objet
֒→ ensemble de diagrammes (de classes, d’objets, ...), permettant de modéliser les
aspects statiques et dynamiques d’une application
֒→ 1997 : normalisation par l’OMG (Object Management Group) → 05/2010 : UML 2.3

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

UML - Unified Modeling Language

UML = langage de modélisation graphique à base de pictogrammes


֒→ années 90 : fusion des langages de modélisation objet : Booch, OMT, OOSE
֒→ apparition dans le cadre de la conception orientée objet
֒→ ensemble de diagrammes (de classes, d’objets, ...), permettant de modéliser les
aspects statiques et dynamiques d’une application
֒→ 1997 : normalisation par l’OMG (Object Management Group) → 05/2010 : UML 2.3

Dans le cadre de ce cours : utilisation principalement des diagrammes de classes


֒→ représenter les classes d’un système et les interactions entre elles

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

Représentation d’une classe


Reprenons la classe Personne précédente
֒→ encapsulation définition des méthodes accessibles à l’extérieure de la classe
= méthodes publiques

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

Représentation d’une classe


Reprenons la classe Personne précédente
֒→ encapsulation définition des méthodes accessibles à l’extérieure de la classe
= méthodes publiques

Visibilité des attributs / méthodes


− privés
# protégés
+ publics

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

Héritage public en C++ le plus utilisé


+ accessibles par tous
− accessibles de la classe elle-même uniquement
# accessibles de la classe elle-même et des classes
dérivées

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

Relation d’association, de composition et d’agrégation

Association exprime une liaison sémantique bidirectionnelle entre deux classes

Les cardinalités expriment le nombre d’instances associées


֒→ un livre appartient à une et une seul personne
֒→ une personne possède aucun livre ou plusieurs

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

Relation d’association, de composition et d’agrégation

Agrégation/Composition : relation entre classes, indiquant que les instances d’une


classe sont les composants d’une autre

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

Relation d’association, de composition et d’agrégation

Agrégation/Composition : relation entre classes, indiquant que les instances d’une


classe sont les composants d’une autre

Agrégation exprime une relation de composition faible


֒→ les objets agrégés ont une durée de vie indépendante de celle de l’agrégat

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

Relation d’association, de composition et d’agrégation

Agrégation/Composition : relation entre classes, indiquant que les instances d’une


classe sont les composants d’une autre

Agrégation exprime une relation de composition faible


֒→ les objets agrégés ont une durée de vie indépendante de celle de l’agrégat

Composition exprime une relation de composition forte


֒→ les objets agrégés ont une durée de vie dépendante de celle de l’agrégat

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

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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++

Petite histoire du C++

Années 80’ : mise au point du langage C++ par Bjarne Stroustrup (Bell labs)

Extension du langage C, mis au point par Ritchie et Kernighan (années 70’)


֒→ ajout de l’approche orientée objet
֒→ C++ C with classes (“C avec des classes”)

1998 : normalisation par l’ISO (International Organization for Standardization)


֒→ dernière normalisation : 2003

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++

Fonctionnalités introduites par C++

֒→ Les opérateurs new et delete pour la gestion d’allocation mémoire


֒→ Les types de données bool (booléen), et string (chaîne de caractères)
֒→ Le mot clé const pour définir des constantes
֒→ Les références
֒→ Les paramètres par défaut dans les fonctions
֒→ Les classes, ainsi que tout ce qui y est lié (héritage, fonctions membres, ...)
֒→ Les référentiels lexicaux (espace de noms) et l’opérateur de résolution ::
֒→ La surcharge des opérateurs
֒→ Les patrons (ou templates)
֒→ La gestion d’exceptions
֒→ ...

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++

Définition d’entités constantes avec le mot clé const


En C++, le mot clé const permet à l’utilisateur de définir des entités constantes
(fonctions/variables)
֒→ leur valeur ne pourra pas être modifiée directement
֒→ elles doivent être initialisées à la déclaration
֒→ exemple : la plupart des paramètres de fonctions sont lus, mais pas modifiés

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

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++

Définition d’entités constantes avec le mot clé const


En C++, le mot clé const permet à l’utilisateur de définir des entités constantes
(fonctions/variables)
֒→ leur valeur ne pourra pas être modifiée directement
֒→ elles doivent être initialisées à la déclaration
֒→ exemple : la plupart des paramètres de fonctions sont lus, mais pas modifiés

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 modifier le type d’une 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 Orientée Objet ... et son application au C++ 26/36
Quelques éléments importants du C++

Les pointeurs et les constantes

Le mot clé const peut être utilisé pour :


֒→ déclarer un pointeur sur un objet constant (int const * x ou const int * x)
֒→ déclarer 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 Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++

Les pointeurs et les constantes

Le mot clé const peut être utilisé pour :


֒→ déclarer un pointeur sur un objet constant (int const * x ou const int * x)
֒→ déclarer 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 Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++

Les pointeurs et les constantes

Le mot clé const peut être utilisé pour :


֒→ déclarer un pointeur sur un objet constant (int const * x ou const int * x)
֒→ déclarer un pointeur constant sur un objet (int * const x)

Remarque 1 : L’adresse d’une variable peut être attribuée à un pointeur de


constante. Par contre, l’adresse d’une constante ne peut pas être attribuée à un
pointeur sur lequel aucune restriction ne s’applique (cette opération autoriserait le
changement de la valeur de l’objet).

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++

Les pointeurs et les constantes

Le mot clé const peut être utilisé pour :


֒→ déclarer un pointeur sur un objet constant (int const * x ou const int * x)
֒→ déclarer un pointeur constant sur un objet (int * const x)

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;

* 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 Orientée Objet ... et son application au C++ 27/36
Quelques éléments importants du C++

Les références en C++


En C++, une référénce permet de définir un alias sur une variable, fournit une
autre nom pour une variable : X & signifie référence à X .

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

int & ref2 ; // ERREUR : ref2 doit etre initialise

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++

Les références en C++


En C++, une référénce permet de définir un alias sur une variable, fournit une
autre nom pour une variable : X & signifie référence à X .

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

int & ref2 ; // ERREUR : ref2 doit etre initialise

Les références sont principalement utilisées pour la spécification des arguments


et des valeurs renvoyées 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 Orientée Objet ... et son application au C++ 28/36
Quelques éléments importants du C++

Les références et les constantes

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).

const int x = 17;


int y = 2011;

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++

Les références et les constantes

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).

const int x = 17;


int y = 2011;

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 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 Orientée Objet ... et son application au C++ 29/36
Premiers exemples de programmes C++

Plan du cours

1. Pourquoi la programmation orientée objet ?

2. Principes fondamentaux de la programmation orientée objet

3. Éléments de modélisation d’un programme orienté objet

4. Quelques éléments importants du C++

5. Premiers exemples de programmes C++

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++

Modélisation d’un point du plan 2D

On souhaite modéliser un point du plan 2D


֒→ un point est caractérisé par ses coordonnées (x,y ) dans le plan
֒→ et il peut être affiché (au moins ses coordonnées, dans un premier temps) et
translaté.

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++

Modélisation d’un point du plan 2D

On souhaite modéliser un point du plan 2D


֒→ un point est caractérisé par ses coordonnées (x,y ) dans le plan
֒→ et il peut être affiché (au moins ses coordonnées, dans un premier temps) et
translaté.

On doit pouvoir également :


֒→ l’initialiser,
֒→ et accéder / modifier ses coordonnées.

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++

Modélisation d’un point du plan 2D

On souhaite modéliser un point du plan 2D


֒→ un point est caractérisé par ses coordonnées (x,y ) dans le plan
֒→ et il peut être affiché (au moins ses coordonnées, dans un premier temps) et
translaté.

On doit pouvoir également :


֒→ l’initialiser,
֒→ et accéder / modifier ses coordonnées.

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++

Déclaration 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 Orientée Objet ... et son application au C++ 32/36
Premiers exemples de programmes C++

Définition 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 Orientée Objet ... et son application au C++ 33/36
Premiers exemples de programmes C++

Utilisation simple de la classe Point2D


Déclaration 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 Orientée Objet ... et son application au C++ 34/36
Premiers exemples de programmes C++

Compilation et exécution de cet exemple simple

Utilisation du compilateur GNU C++ (g++ ≥ 4.5)


֒→ compilation séparée
֒→ idéalement (notamment dans vos TP/projet), utilisation d’un makefile

$ > 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 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

Vous aimerez peut-être aussi