Beruflich Dokumente
Kultur Dokumente
(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;
S1
→ Introduction (produit logiciel, programmation).
→ Notion d’objet
https://www.youracclaim.com/organizations/ibm/badges
→ Introduction à C++ ( objet, class, encapsulation, héritage, polymorphisme, interface, etc.)
→ Programmation windows C#
Produire
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.
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?
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
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 .
Concepts …
9
G.CHERRADI Programmation Orientée objets (POO)
LES LANGAGES DE PROGRAMMATION
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).
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.
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
Utilisation
void main(){
initialiser_pile (); inserer_pile (5.2f); inserer_pile (3.2f);
while (!pile_vide()) { cout << enlever_pile() << endl; }
}
- 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.
- 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.
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
Data Hiding
(Modulaire)
Modula-2 Decide which Modules you want;
Partition the program so that is hidden in modules;
«Struct»
Phone
«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
p.state=true
- 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.
Article
FC5348
FP1245 référence
Smart_Phone
Pantalon designation
5200
520 prixHT
10
50 quantité
prixTTC()
prixTransport()
Instance_de Retirer() Instance_de
Ajouter()
▪ Création statique
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 . :
Syntaxe
Ou
▪ 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.
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.
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.
Le pointeur this
Dans toutes les classes, on dispose d’un pointeur ayant pour nom this, qui pointe vers l’objet courant.
Point
this
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.
- 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.
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.
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.
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 +.
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
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’.
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.
-- 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).
(3) Instanciation
(4) Héritage