Vous êtes sur la page 1sur 45

Programmation Orientée Objet

(OOP)
Mise en œuvre C++

G. Cherradi 2020
https://www.researchgate.net/profile/Ghyzlane_Cherradi
OBJECTIFS GÉNÉRAUX

Ce cours donnera un aperçu des concepts et des paradigmes sous tendant les langages de
01 programmation;

Ce cours vise à donner à l’étudiant(e) une connaissance appliquée de la programmation et de la


02 philosophie orientée objet

Introduire/Maîtriser le langage C++ (syntaxe, encapsulation, héritage, polymorphisme, templates,


03 exceptions, etc.)

Programmation Orientée objet (POO)


2
G.CHERRADI
PROGRAMME

S1
→ Introduction (produit logiciel, programmation).

→ Paradigmes et langages de programmation

→ Type de donnée abstrait (ADT)

→ Notion d’objet
https://www.youracclaim.com/organizations/ibm/badges
→ Introduction à C++ ( objet, class, encapsulation, héritage, polymorphisme, interface, etc.)

Contrôle des connaissances (Quiz) + Badges


S2

→ Meta-programmation , foncteur , C++/C# https://www.youracclaim.com/organizations/ibm/badges

→ Modèle évènementiel windows : patterns

→ Programmation windows C#

G.CHERRADI Programmation Orientée objet (POO) 3


PRODUCTION LOGICIEL
Qu’est qu’un logiciel?

Application (store), SiteWeb, jeux, microcontrôleur,


etc.

Produire

Code source, exécutable. //www.ibm.com/skills/badges/

Mais avant le codage ???

4
QU’EST CE QUE LA PROGRAMMATION?
Définissons la «programmation» au sens large comme l'activité qui commence par une spécification
et conduit à sa solution sur un ordinateur.

Expressions Langage de Langage de Outil de traduction


des besoins modélisation programmation (ex: Compilateur Logiciel
(ex: Merise, UML) C,C++, java, python) /interpréteurs

Client
inscrivent leur réflexion dans des
modèles de pensée théoriques
appelés paradigmes.
inscrivent leur réflexion dans des
modèles de pensée théoriques
appelés paradigmes.

5
G.CHERRADI Programmation Orientée objets (POO)
CYCLES DE VIE

//www.ibm.com/skills/badges/

6
QU’EST CE QUE LA PROGRAMMATION?

Programmer, c'est donc :

Observer le réel en construire un modèle en choisissant une vision ou domaine d'interprétation


(application d'un paradigme).

Traduire ce modèle pour une machine via un langage dit «Langage de programmation».

7
G.CHERRADI Programmation Orientée objets (POO)
LES PARADIGMES DE LA PROGRAMMATION
Paradigme Si le seul outil que vous avez
- Modèle théorique de pensée qui oriente la recherche et la réflexion est un marteau, vous verrez
scientifiques (Larousse). tout problème comme un clou.
[Abraham Marslow]
- Un outil de pensée, une manière de voire les choses (A. Comte-Sponville).

Paradigme de programmation

- Un outil de pensée qui oriente la façon d'analyser, de concevoir et de coder un programme


(G. Caplat).
- Un paradigme de programmation est une façon d'approcher la programmation informatique et de
traiter les solutions aux problèmes et leur formulation dans un langage de programmation approprié. Il
s'oppose à la méthodologie, qui est une manière d'organiser la solution des problèmes spécifiques du
génie logiciel.

Tout comme il existe plusieurs sciences, chacune proposant sa vision des choses, il existe plusieurs
paradigmes de programmation, chacun supportant une façon de décrire des comportements .

G.CHERRADI Programmation Orientée objets (POO) 8


LES PARADIGMES ET LANGAGES DE PROGRAMMATION

- Il y a beaucoup moins de paradigmes que de langages de


programmation, Langages

- Chaque “paradigme” permet la programmation facile d’un


certain niveau de interactivité;

- Chaque paradigme est défini par un ensemble de


concepts de programmation;
Paradigmes …
- Un paradigme = un ensemble de concepts;

Concepts …

9
G.CHERRADI Programmation Orientée objets (POO)
LES LANGAGES DE PROGRAMMATION

1ère génération: langage machine, notation directement compréhensible par la machine.

2ème génération: langage d'assemblage, les instructions du processeur et les divers registres
disponibles sont représentés par des mots clés mnémotechniques (1950).

3ème génération : langages de haut niveau, langages procéduraux et structurés

- Besoins de gros programmes de calcul numérique ==> FORTRAN (1956)


- Besoin d'un langage permettant d'exprimer et de structurer aisément les constructions algorithmiques :
Algol 60, Algol 68, Pascal (1971), Modula-2 (1983), C (1972),
- Besoins de simulation du monde réel : Simula-67, Smalltalk (1972, 1980), Eiffel, C++ (1986), Java (2000)

4ème génération : langage de programmation permettant par exemple l'interrogation de base de données
avec une syntaxe proche du langage humain (SQL, Postscript, metafont).

5ème génération :des langages destinés à résoudre des problèmes à l'aide de contraintes, et non
d'algorithmes écrits. Ces langages reposent beaucoup sur la logique. Parmi les plus connus, on trouve
Prolog, OPS5 et Mercury.
G.CHERRADI Programmation Orientée objets (POO) 10
LES LANGAGES DE PROGRAMMATION https://www.tiobe.com/tiobe-index/

TIOBE Index for September 2020. September Headline: Programming Language C++ is doing very well.

G.CHERRADI Programmation Orientée objets (POO) 11


LES PARADIGMES DE PROGRAMMATION Procédurale

Modulaire
Programmation Problème de base
procédurale Abstraction

Programmation Instruction 1
structurée Instruction 2
…..
Instruction 20
Programmation Goto: instruction 2
impérative …..
Instruction 1000
l'algorithme s'exprime par des
ordres séquentiels d’exécution
des instructions
Résultat

Programmation Orientée objets (POO)


12
G.CHERRADI
LA PROGRAMMATION PROCÉDURALE (STRUCTURÉE)
Procédurale
- Basée sur des instructions/commandes: « fait quelque chose »
– Exemples: Fortran, COBOL, Pascal, C, etc...
Modulaire
- Basée sur le concept de procédure/fonction ou routine ou sous programme.
- Les sous-programmes utilisent des variables locales et agissent sur des Abstraction
arguments fournis explicitement en paramètre, par valeur ou par référence.
- Un sous programme peut être appelé à partir d’un autre sous-programme
procédure ou à partir de lui même (récursivité).

Structures de Données + Procédures = Programme

//Structure domino bool est_double (Domino*d){


Typedef struct { Return (d->M1==d->m2);
Int M1; // marque droite }
Int M2; // marque gauche
} domino; Int main (void ){
Domino*o;
Bool a =est_double(o);
}

Programmation Orientée objets (POO)


13
G.CHERRADI
LA PROGRAMMATION PROCÉDURALE (STRUCTURÉE)
Procédurale
# include <iostream.h>
Données
const int taille_max=100; Modulaire
float vecteur [taille_max];
int top=0;
Abstraction
Fonctions
bool pile_vide() { return (top ==0); }
bool pile_pleine () { return (top==taille_max);
void initialiser_pile () { top =0;}
void inserer_pile (float valeur) { vecteur[top]=valeur; top+=1;}
float enlever_pile() {return vecteur[top]; top-=1;}

Utilisation
void main(){
initialiser_pile (); inserer_pile (5.2f); inserer_pile (3.2f);
while (!pile_vide()) { cout << enlever_pile() << endl; }
}

Programmation Orientée objets (POO)


13
G.CHERRADI
DATA HIDING (PROGRAMMATION MODULAIRE)
Modula-2 Procédurale
Les applications informatiques devenant de plus en
plus complexes, il y a nécessité de : Modulaire

- travailler en équipe
- réutiliser des composants existants Abstraction
- faciliter la maintenance PASCAL
L’application est décomposée en Modules (packages, unités) indépendants.

Un module désigne généralement un ensemble de procédures et de


données qui y sont liées et qu'elles manipulent.

- Les modules communiquent entre eux par des appels de fonctions seulement et non en
partageant les données .
- Les données peuvent être échangées en passant par les paramètres des fonctions.

Programmation Orientée objets (POO)


14
G.CHERRADI
DATA HIDING (PROGRAMMATION MODULAIRE)
Procédurale
Le module est essentiellement un ensemble de fichiers interdépendants qui
partagent leurs détails d'implémentation mais les cachent du monde extérieur. Modulaire
Data.h Code.Cpp
Abstraction

Struct S1 Fonction F1

1. Module
regroupant ce
Struct S2 Struct S3 Fonction F2
qui rapporte aux
dominos

Fonction F3

2. Module
regroupant ce
qui rapporte aux
joueurs
15
G.CHERRADI Programmation Orientée objets (POO)
TYPE DE DONNÉE ABSTRAIT (ADT) Procédurale

Modulaire

Abstraction

Offering services without highlighting


internal implementation.

Programmation Orientée objets (POO)


17
G.CHERRADI
LES PARADIGMES DE PROGRAMMATION
Procédurale
(structurée)

Decide which procedures you want;


Use the best algorithms you can find;

Data Hiding
(Modulaire)
Modula-2 Decide which Modules you want;
Partition the program so that is hidden in modules;

The main avantage : Security (private)


Abstraction

Decide which types you want;


C# Provide a full set of operations for each type;
C++ The main avantage : Provide flexibility

Programmation Orientée objets (POO)


18
G.CHERRADI
CRITIQUE PROCÉDURALE STRUCTURÉ

«Struct»
Phone

- color: char*; Les valeurs ne sont pas encapsulées,


- marque: char*; c'est-à-dire que l'on peut partout lire ou
- state: bool; modifier ces valeurs.
- password: char*;

«Operations»
Phone les traitements étant séparés, il est difficile de
+ call(phone*d): void; connaître exactement quelles sont toutes les
+ init(phone*,char*,bool): void opérations possibles sur ce type.
+ free(phone*,char*,bool):void
+ quit(phone*): bool

Programmation Orientée objets (POO)


19
G.CHERRADI
CRITIQUE PROCÉDURALE STRUCTURÉ

les valeurs peuvent ne pas être correctement


Phone p initialisées. La variable risque d'avoir des valeurs
inconsistantes.

Call(0) Free(0) Init(0)

free(&p) free(&p) Il y a donc risque de ré-écriture de fonctions existantes ou de


définition de traitements qui ne correspondent pas à au champ
sémantique du type.

p.state=true

Programmation Orientée objets (POO)


20
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation
Regroupement du code (opérations) et des données (variables) dans une
seule unité. La classe est un exemple d'encapsulation, car elle encapsule la
méthode et la propriété.

Programmation Orientée objets (POO)


21
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation
Une classe est un type de données dont le rôle est de rassembler sous un même
nom à la fois données et traitements. (2) Classe et Objet
→ Les données attachées à une classe sont appelées attributs (ou données
membres).
→ Les traitements attachés à une classe sont appelés méthodes (ou fonctions
membres, opérations).

Nom de la classe «Class»


Phone

- color: char*;
Champs, attributs - marque: char*; Type de l’attribut
Classe en UML
Données membres - state: bool;
- password: char*;
Visibilité
+ call(phone*d): void;
+ init(phone*,char*,bool): void Type de retour
Opérations, méthodes + free(phone*,char*,bool):void
fonctions membres - quit(phone*): bool

Paramétres 22
G.CHERRADI Programmation Orientée objets (POO)
LE PARADIGME OBJET
Définition de classe (1) Encapsulation
Avant de manipuler un objet, il faut définir la classe dont il provient, c’est-à-dire décrire
de quoi est composé la classe; méthodes et attributs. La définition d’une classe (2) Classe et Obje
effectue dans un fichier d’entête (header)(.h, .hpp). Le nom de ce fichier est souvent le
même que celui de la classe.

Visibilité
▪ ‘+’ correspond à public → aucune restriction. Il s’agit du plus bas niveau de restriction
d’accès, toutes les fonctions membres (de n’importe quelle classe) peuvent accéder aux
champs ou aux méthodes public .

▪ ‘-’ correspond à private→ Restriction d’accès le plus élevé. L’accès aux données et fonctions
membres est limité aux méthodes de la classe elle-même.

▪ ‘#’ correspond à protected → ??? (héritage)

Programmation Orientée objets (POO)


23
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

(2) Classe et Obje

Programmation Orientée objets (POO)


24
G.CHERRADI
LE PARADIGME OBJET
Les données membres (attributs) permettent de conserver des informations relatives à la (1) Encapsulation
classe, tandis que les fonction membre (méthodes) représentent les traitement qu’il est
possible de réaliser avec les objets de la classe. Il existe deux façons de définir des fonctions (2) Classe et Obje
membres:
▪ En définissant la fonction (prototype et corps) à l’intérieur de la classe en une opération;

▪ En déclarant la fonction à l’intérieur de la classe et en définissant à l’extérieur (dans un autre fichier).


(meilleur lisibilité)( il est nécessaire de préciser à quelle classe cette dernière fait partie. On utilise
pour cela l’opérateur de résolution de portée noté ::).

// fichier Phone.h // fichier phone.cpp


// declaration des methodes à l’interieur de la classe // definition des methodes à l’exterieur de la classe
Class Phone #include "phone.h"
{ double Phone::call(Phone* ph){
Private :
int stockage; // traitements
bool state;
Public : return ph->state;
bool call(Phone* ph); }
};
Programmation Orientée objets (POO)
25
G.CHERRADI
LE PARADIGME OBJET : CRÉATION D’OBJETS
L'instanciation est l'action d'instancier, de créer un objet à partir d'un modèle (classe). (1) Encapsulation
Elle est réalisée par la composition de deux opérations : l'allocation et l'initialisation.
(2) Classe et Obje
Un objet est une instance (une réalisation) d’une classe. Cela signifie qu'un objet est la
matérialisation concrète d'une classe. (3) Instanciation

Article
FC5348
FP1245 référence
Smart_Phone
Pantalon designation
5200
520 prixHT
10
50 quantité
prixTTC()
prixTransport()
Instance_de Retirer() Instance_de
Ajouter()

Instanciation de la classe Article


L'état d'un objet est la valeur de ses attributs. Deux objets de même type sont dans le même état
si leurs valeurs coïncident. Ces objets sont alors des clones

Programmation Orientée objets (POO)


26
G.CHERRADI
LE PARADIGME OBJET : CRÉATION D’OBJETS
(1) Encapsulation
Un objet est une structure informatique regroupant :
– des variables, caractérisant l’état de l’objet, (2) Classe et Obje
– des fonctions, caractérisant le comportement de l’objet.
(3) Instanciation
En C++, il existe deux façons de créer des objets, c a d d’instancier une classe :

▪ Création statique

Créer un objet en lui affectant un nom, de la même façon qu’une variable:

NomClass NomObjet ();

Ainsi l’objet est accessible à partie de son nom. L’accès à partir d’un objet à un attribut ou une
méthode de la classe instanciée se fait grâce à l’opérateur . :

Programmation Orientée objets (POO)


27
G.CHERRADI
LE PARADIGME OBJET
▪ Création dynamique (1) Encapsulation

La création d’objet dynamique se fait de la façon suivante:


(2) Classe et Obje
• Définition d’un pointeur du type de la classe à pointer;
• Création de l’objet dynamique grâce au mot clé new, renvoyant l’adresse de l’objet (3) Instanciation
nouvellement crée. (new : opérateur d’allocation mémoire).
• Affecter cette adresse au pointeur,
• Après utilisation: libération de l’espace mémoire réservé : delete

Syntaxe

Ou

Programmation Orientée objets (POO)


28
G.CHERRADI
LE PARADIGME OBJET : MÉTHODES PARTICULIÈRES
La vie d'un objet se résume à trois épisodes fondamentaux : sa création, son (1) Encapsulation
utilisation puis sa destruction. La création et la destruction font appel à des méthodes
particulières : respectivement les constructeurs et le destructeur. (2) Classe et Objet
▪ Constructeur
(3) Instanciation
Un constructeur est une fonction membre qui sert à initialiser les données membres
Un constructeur possède les propriétés suivantes:

▪ Un constructeur porte le même nom que la classe dans laquelle il est défini;
▪ Un constructeur n’a pas de type de retour (même pas le void) :
▪ Un constructeur peut avoir des arguments.
▪ Sa définition n’est obligatoire que si elle est nécessaire au bon fonctionnement de la classe.

Si le développeur juge que la présence d’un constructeur n’est pas utile, un constructeur par défaut
est défini automatiquement par le compilateur si la classe n’en possède pas.

Programmation Orientée objets (POO)


29
G.CHERRADI
LE PARADIGME OBJET : MÉTHODES PARTICULIÈRES
▪ Constructeur de recopie (1) Encapsulation
Un constructeur de copie est une fonction membre qui initialise un objet à l'aide d'un autre
objet de la même classe. Un constructeur de copie a le prototype de fonction générale (2) Classe et Objet
suivant:
Syntaxe: NomClass(const NomClass & old_obj); (3) Instanciation

En C ++, un constructeur de copie peut être appelé dans les cas suivants:
▪ Lorsqu'un objet de la classe est renvoyé par valeur
▪ Lorsqu'un objet de la classe est passé (à une fonction) par valeur comme argument.
▪ Lorsqu'un objet est construit à partir d'un autre objet de la même classe.
▪ Lorsque le compilateur génère un objet temporaire.

Si nous ne définissons pas notre propre constructeur de copie, le compilateur C ++ crée un constructeur de
copie par défaut pour chaque classe qui effectue une copie par membre entre les objets. Le constructeur de
copie créé par le compilateur fonctionne bien en général. Nous devons définir notre propre constructeur de
copie uniquement si un objet a des pointeurs ou une allocation d'exécution de la ressource comme un handle
de fichier, une connexion réseau..etc.

Programmation Orientée objets (POO)


30
G.CHERRADI
LE PARADIGME OBJET : MÉTHODES PARTICULIÈRES
▪ Destructeur (1) Encapsulation
Un destructeur est une fonction membre qui détruit ou supprime un objet.
(2) Classe et Objet
Syntaxe: ~NomClass();
▪ Un constructeur est automatiquement appelé lorsque les objets sont détruits. (3) Instanciation
▪ Il ne peut pas être déclaré statique ou const.
▪ Un destructeur n'a pas d'arguments.
▪ Un destructeur n’a pas de type de retour (même pas le void) :
▪ Un destructeur doit être déclaré dans la section publique de la classe.

Si nous n'écrivons pas notre propre destructeur en classe, le compilateur crée un destructeur par défaut
pour nous. Le destructeur par défaut fonctionne bien sauf si nous avons alloué dynamiquement de la
mémoire ou un pointeur dans la classe. Lorsqu'une classe contient un pointeur vers la mémoire allouée
dans la classe, nous devons écrire un destructeur pour libérer de la mémoire avant que l'instance de classe
ne soit détruite. Cela doit être fait pour éviter les fuites de mémoire.

Programmation Orientée objets (POO)


31
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

Namespace (2) Classe et Objet


Un espace de nom permet de regrouper plusieurs déclarations de variables, fonctions
et classes dans un groupe nommé.(ex: pratique) (3) Instanciation

Le pointeur this

Dans toutes les classes, on dispose d’un pointeur ayant pour nom this, qui pointe vers l’objet courant.

Point

this

Programmation Orientée objets (POO)


32
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

Transmission par référence (2) Classe et Objet

Pour modifier la valeur d’un paramètre réel dans une fonction, il faut passer ce
(3) Instanciation
paramètre par référence

Une référence sur une variable est un synonyme de cette variable, c’est-à-dire une
autre manière de désigner le même emplacement mémoire.

On utilise le symbole & pour la déclaration d’une référence:

<type> &<nom> = <nom var>;


Par exemple :
int v = 5;
int &r = v; // r est une référence sur v

Programmation Orientée objets (POO)


33
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation
Mot clé const
(2) Classe et Objet
Les méthodes constantes sont des méthodes de « lecture seule ».
Elles possèdent le mot-clé const à la fin de leur prototype. Des méthodes qui ne doivent (3) Instanciation
pas modifier les valeurs des données membres de la classe, ni retourner une référence
non constante ou un pointeur non constant d’une donnée membres.

- Lorsqu'une fonction est déclarée comme const, elle peut être appelée sur n'importe
quel type d'objet, objet const ainsi que sur des objets non const.
- Chaque fois qu'un objet est déclaré comme const, il doit être initialisé au moment de
la déclaration. cependant, l'initialisation de l'objet lors de la déclaration n'est possible
qu'avec l'aide de constructeurs.

Programmation Orientée objets (POO)


34
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

Mot clé static (2) Classe et Objet

Le mot-clé static a différentes significations lorsqu'il est utilisé avec différents types. Nous (3) Instanciation
pouvons utiliser un mot-clé statique avec:
- Variables statiques: variables dans une classe.
- Membres statiques de classe: objets de classe et fonctions dans une classe.

Variables statiques dans une classe: les variables déclarées comme statiques ne sont initialisées qu'une seule
fois, car elles disposent d'un espace alloué dans un stockage statique séparé, les variables statiques d'une classe
sont partagées par les objets. Il ne peut pas y avoir plusieurs copies des mêmes variables statiques pour différents
objets. Aussi pour cette raison, les variables statiques ne peuvent pas être initialisées à l'aide de constructeurs.
Fonctions statiques dans une classe: tout comme les variables statiques à l'intérieur de la classe, les fonctions
membres statiques ne dépendent pas non plus de l'objet de la classe. Nous sommes autorisés à invoquer une
fonction membre statique à l’aide de l’objet et de l’opérateur «.», Mais il est recommandé d’appeler les membres
statiques à l’aide du nom de classe et de l’opérateur de résolution de portée(::) .
Les fonctions membres statiques sont autorisées à accéder uniquement aux membres de données statiques ou à
d'autres fonctions membres statiques, elles ne peuvent pas accéder aux membres de données non statiques ou
aux fonctions membres de la classe.

Programmation Orientée objets (POO)


35
G.CHERRADI
LE PARADIGME OBJET
Surcharge de Fonctions (overload)

La surcharge de fonctions est une fonctionnalité en C ++ où deux ou plusieurs fonctions peuvent avoir le
même nom mais des paramètres différents.

Le compilateur sélectionnera la fonction à appeler en fonction du type et du nombre des arguments qui
figurent dans l’appel de la fonction.

En C ++, les déclarations de fonction suivantes ne peuvent pas être surchargées.


- Déclarations de fonction qui diffèrent uniquement par le type de retour.
int Fun() ;
void Fun();
- Les déclarations de fonction membre portant le même nom et le nom parameter-type-list ne peuvent
pas être surchargées si l'une d'entre elles est une déclaration de fonction membre statique.
static int Fun(string s) ;
int Fun(string s);

Programmation Orientée objets (POO)


36
G.CHERRADI
LE PARADIGME OBJET
Surcharge de Fonctions (overload)

En C ++, les déclarations de fonction suivantes ne peuvent pas être surchargées.


- Les déclarations de paramètres qui ne diffèrent que par un pointeur * par rapport à un tableau [] sont
équivalentes. Autrement dit, la déclaration de tableau est ajustée pour devenir une déclaration de
pointeur. Seules les dimensions du deuxième tableau et les suivantes sont significatives dans les
types de paramètres.
int Fun(int tab[]) ;
void Fun(int *tab);
- Les déclarations de paramètres qui ne diffèrent que par la présence ou l'absence de const sont
équivalentes. Autrement dit, les spécificateurs de type const pour chaque type de paramètre sont
ignorés lors de la détermination de la fonction déclarée, définie ou appelée.

int Fun(const int x) ;


int Fun(int x);

Programmation Orientée objets (POO)


37
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

Surcharge d'opérateurs
(2) Classe et Objet
Un operateur peut être définit comme une fonction membre;
(Ex : + s’appelle en réalité operator+(). ) (3) Instanciation
En C ++, nous pouvons faire fonctionner les opérateurs pour les classes définies par l'utilisateur.
Cela signifie que C ++ a la capacité de fournir aux opérateurs une signification spéciale pour un
type de données, cette capacité est connue sous le nom de surcharge d'opérateurs.
Par exemple, nous pouvons surcharger un opérateur «+» dans une classe comme String
afin de pouvoir concaténer deux chaînes en utilisant simplement +.

▪ NomClass operator+(NomClass const& a, NomClass const& b);

Presque tous les opérateurs peuvent être surchargés sauf quelques-uns. Voici la liste des opérateurs qui ne
peuvent pas être surchargés.

.(dot)
::
?:
sizeof

Programmation Orientée objets (POO)


38
G.CHERRADI
LE PARADIGME OBJET
Les fonctions amies

En principe, l’encapsulation interdit à une fonction membre d’une classe ou toute fonction d’accéder à des
données privées d’une autre classe. Mais grâce à la notion d’amitié entre fonction et classe, il est possible,
lors de la définition de cette classe d’y déclarer une ou plusieurs fonctions (extérieurs de la classe) amies
de cette classe.
Il existe plusieurs situations d’amitiés :
1. Fonction indépendante, amie d’une classe.
2. Fonction membre d’une classe, amie d’une autre classe.
3. Fonction amie de plusieurs classes.
4. Toutes les fonctions membres d’une classe, amies d’une autre classe.

Pour déclarer une fonction amie d’une classe, il suffit de la déclarer dans cette classe en la précédent par le
mot clé ‘friend’.

Programmation Orientée objets (POO)


39
G.CHERRADI
LA CLASSE STRING
Présentation de la classe string
- Il s'agit d'une classe standard qui permet de représenter une chaîne de caractères.
- Pour l'utiliser, il faut rajouter #include <string>.
- Cette classe encapsule des données pour pouvoir effectuer toutes les opérations de base sur les
chaînes.
Comment utiliser les string ?
- Déclaration et initialisation : string s1,s2= " hello";
- Affichage et saisie : cout<<s1; cin >> s1;
- Concaténation : string s3=s2+s1;

Séparateurs
• Par défaut, lorsqu'on saisit une chaîne de caractères en utilisant cin, le séparateur est l'espace : cela
empêche de saisir une chaîne de caractères comportant une espace.
• La fonction getline(iostream &,string) permet de saisir une chaîne de caractères en utilisant le passage à
la ligne comme séparateur : notre chaîne de caractères peut alors comporter des espaces.

Programmation Orientée objets (POO)


40
G.CHERRADI
LE PARADIGME OBJET
- Macro assert
void assert( int condition );
Une assertion est utilisée pour tester l'état d'une variable ou d'une zone de mémoire : si la valeur qui y est stockée est
incohérente par rapport à ce que vous attendez, votre programme sera alors interrompu et un message d'erreur sera alors
affiché sur la console.
condition : condition à évaluer pour déclencher ou non l'assertion. Si la valeur est vrai (n'importe quelle valeur entière non
nulle), l'assertion ne sera pas déclenchée. Si la valeur est fausse (égale à 0), l'assertion sera déclenchée et le programme
s'arrêtera en affichant un message d'erreur relatif à l'assertion.
Aucune valeur de retour n'est produite par cette fonction.

Programmation Orientée objets (POO)


41
G.CHERRADI
LE PARADIGME OBJET https://docs.microsoft.com/en-us/cpp/build/walkthrough-
creating-and-using-a-static-library-cpp?view=msvc-160

- Create and use a Static Library (MSDN)


PCH : les inclusions qui reviennent un peu souvent

Programmation Orientée objets (POO)


42
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation
Spécialiser et factoriser : important pour la réutilisabilité
(2) Classe et Objet
- Les connaissance les plus générales sont mises en commun dans des classes qui sont ensuite
spécialisées par définitions de sous-classes (connaissances spécifique). (3) Instanciation

- Une sous-classe est donc la spécialisation de la description d’une classe


appelée sa superclasse. (4) Héritage

- Une sous-classe hérite de sa superclasse.

- Conceptuellement tout se passe comme si les informations de la superclasse


étaient recopiées dans la sous-classe.
- La spécialisation d’une classe peut être réalisée selon deux techniques:

-- l’enrichissement : la sous-classe est dotée de nouvelles variables d’instances et/ou méthodes.

-- substitution : donner une nouvelle définition à une méthode hérité, lorsque celle-ci se révèle
inadéquate pour l’ensemble des objets de la sous-classe (masquage).

Programmation Orientée objets (POO)


43
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation
L’héritage permet d’ajouter des propriétés à une classe existante pour en obtenir une
nouvelle plus précise. Il permet donc la spécialisation ou la dérivation de types (2) Classe et Objet

Propriétés de l’héritage (3) Instanciation

L’héritage est une relation entre classes qui a les propriétés


suivantes : (4) Héritage
– si B hérite de A et si C hérite de B alors C hérite de A
– une classe ne peut hériter d’elle-même
– si A hérite de B, B n’hérite pas de A
– il n’est pas possible que B hérite de A, C hérite de B et que A
hérite de C
– le C++ permet à une classe C d’hériter des propriétés des
classes A et B (héritage multiple)

Programmation Orientée objets (POO)


44
G.CHERRADI
LE PARADIGME OBJET
(1) Encapsulation

(2) Classe et Objet

(3) Instanciation

(4) Héritage

Un graphe d'héritage simple

Programmation Orientée objets (POO)


45
G.CHERRADI