Généralités
Programmation orienté objet, langage c++
Samedi, 18 Février 2023
Module: PROGR3 C++ Année universitaire: 2022/2023
Rappel
2
Rappel
Langages de programmation:
C, C++, Java, PHP, C#, Pascal, Python, Fortran…
Programmation procédurale Programmation orientée objet
C C++
Pascal Java
Fortran Python
C#
PHP
3
Programmation orientée objet ?
4
Généralités
◼ Un peu d’histoire
◼ Motivation
◼ Critères de qualités
◼ Les langages à objets (LAO)
◼ Les paradigmes de programmation
◼ Pourquoi C++ ?
◼ C++ versus C
◼ Quelques mots sur la POO
◼ Les trois nouveaux concepts de la PO
(encapsulation, héritage et polymorphisme)
◼ Les outils de programmation
5
Un peu d’histoire
◼
◼ Les années 60 et les débuts de la programmation et des
langages
◼ Analyse descendante
◼ Décomposition suivant les traitements
◼ Les logiciels sont organisés autour des actions :
Fonctions
◼ Séparation traitement et données
◼ Programme = Algorithmes + données
◼ Naissance des concepts d’abstraction et de réutilisation
◼ Langage : C, Pascal…
6
Un peu d’histoire
◼ La renaissance : la programmation et la conception orientée objets
◼ Né en 1975, essor dans les années 80
(C++,SmallTalk,Eiffel)
◼ La consécration à partir des années 90
◼ Objectifs principaux (Génie Logiciel) :
◼ Réutiliser ce qui a déjà été écrit
◼ Directement (le code, les modèles)
◼ Adaptation (l’héritage)
◼ Augmenter la qualité
◼ Rapidité de la conception et Facilité de maintenance
◼ Ergonomie d’utilisation et fonctionnement simple et
efficace
7
Motivation
◼ Le logiciel doit être :
➔Valide ➔Robuste
➔Modifiable ➔Réutilisable
➔Portable ➔Ergonomique
➔Efficace
◼ La maintenance doit être facile
◼ correction d’erreurs
◼ évolution du logiciel
◼ Le logiciel doit nécessairement être modulaire
◼ et … les modules doivent être indépendants
8
Critères de qualités
◼
◼ Aptitude d'un programme à réagir lorsqu'on s'écarte des
conditions normales d'exécution.
◼
◼ Facilité avec laquelle un programme pourra être adapté pour
satisfaire une évolution des spécifications.
◼ :
◼ Possibilité d'utiliser certaines parties du code pour résoudre un
autre problème.
◼
◼ Facilité avec laquelle on peut exploiter un même logiciel sous
différents environnements.
◼
◼ La rapidité d'exécution, la taille mémoire... 9
Les langages à objets (LAO)
Les langages à objets
Comme extensions de
langages existants (C++ ...)
Les langages purement
OO
(Eiffel, Java, C#, …) 10
Les paradigmes de
programmation
Programmation structurée
Programmation par objet
•
•
11
Pourquoi C++ ?
❖
❖
❖
12
C++ versus C
• Les deux langages ont une syntaxe similaire.
• La structure du code des deux langages est la même.
• La compilation des deux langages est similaire.
• Ils partagent la même syntaxe de base. Presque tous les opérateurs et
mots-clés de C sont également présents en C++ et font la même chose.
• C++ a une grammaire légèrement étendue que C, mais la grammaire
de base est la même.
• Le modèle de mémoire de base des deux est très proche du matériel.
• Les mêmes notions de portée de fichier et de variables statiques sont
présentes dans les deux langages.
13
C++ versus C
• Méthodes d'entrée et de sortie
• Le paradigme de la programmation
• Gestion des exceptions
• Espaces de noms : Ce sont des conteneurs utilisés pour
organiser le code en groupes logiques d'identifiants et
d'objets similaires sous un nom, dans une portée. Ils
empêchent les collisions de noms lorsque plusieurs
bibliothèques sont présentes et évitent les conflits avec les
noms d'autres espaces de noms au sein d'un programme.
14
Exemple
Langage C Langage C++
#include <stdio.h> #include <iostream.h>
void main() void main()
{ {
printf ( bonjour \n ) ; cout << bonjour << endl ;
} }
15
Quelques mots sur la POO :
16
Quelques mots sur la POO :
Algorithmes + Structures de données
= Programmes
Données + Méthodes agissant sur ces
données = Objet
17
Les caractéristiques de l’Objet
La 1ère étape consiste à déterminer
◼ les entités que l'on souhaite manipuler
◼ la description générique qui relie toutes ses
entités.
18
Exemple 1
◼ Prenons ces informations :
◼ 2 Mars 1956 (Indépendance du Maroc)
◼ 6 Novembre 1975 (marcheVerte)
◼ 07 Mars 2005
◼ Ce sont des dates.
◼ Chaque date se caractérise par :
◼ un jour
◼ un mois
◼ une année.
19
Les Dates
Date Indépendance du Maroc
• Jour •2
• Mois • Mars
• Année • 1956
Une Date Armistice
•7 • 11
• Mars • Novembre
• 2005 • 1918
20
Classes
◼ Le Jour, le Mois et l’Année sont les
attributs d’une Date.
◼ Cet ensemble d’attributs est appelé une
Classe.
21
Objets
◼ Le 2 Mars 1956 et le 6 Novembre 1975 sont
chacune des instances de la classe Date.
◼ Chacune de ces dates est appelée un Objet.
22
Exemple 2 : rectangle
Quels sont les caractéristiques d'un
rectangle ?
- un objet comme rectangle est
caractérisé par sa longueur et sa largeur
23
Que peut-on faire avec un
rectangle ?
1. Déclarer et construire un rectangle à
partir de sa longueur (exemple 15) et
sa largeur (exemple 12) :
24
Que peut-on faire avec un
rectangle ?
2. Appliquer des méthodes appropriées sur ce rectangle :
25
Les trois nouveaux concepts de
la POO
Les 3 nouveaux concepts dans la POO
sont :
L’encapsulation L’héritage Le polymorphisme
26
L’encapsulation
◼ On appelle encapsulation le regroupement des
variables et des fonctions au sein d’une même
entité.
Données membres
Fonctions membres
Partie privée
Vision interne
Partie publique
Vision externe
27
Héritage
◼ Permet de définir une nouvelle classe à partir d’une
classe existante à laquelle on ajoute de nouvelles
données et méthodes. (Spécialisation et réutilisation)
28
Polymorphisme
◼ Donner plusieurs formes à une même classe
d’objets en fonction de données
29
Exemple 3
◼ Ali, 19 ans, étudiant en Génie Industriel.
groupe 1, sous-groupe 2.
◼ Nouhaila, étudiante en informatique, a 18
ans. Elle est dans le sous-groupe 1 du Groupe
2.
◼ Mamado, un garçon de 21 ans, est en BTP.
Il est dans le groupe 3, sous-groupe 2.
30
Etudiant
Ici, un étudiant se caractérise par
◼ age
◼ département
◼ groupe
◼ sous-groupe
◼ sexe
31
Etudiant – 1ère possibilité
Ali Nouhaila
Etudiant • 19 • 18
• Age
• Génie • INFO
• Departement Industriel
•2
• Groupe •1 Mamado •1
• SousGroupe •2 • 21 • Fille
• Sexe • Garçon • BTP
•3
•2
• Garçon
32
Etudiant – 2ème possibilité
Etudiant1 Etudiant3
Etudiant • Ali • Nouhaila
• Prénom
• 19 • 18
• Age
• Génie • INFO
• Departement Industriel Etudiant2
•2
• Groupe •1 • Mamado
•1
• SousGroupe •2 • 21
• Fille
• Sexe • Garçon • BTP
•3
•2
• Garçon
33
Définir une classe en C++
class CDate class NomClasse
{ {
typeAttribut1 nomAttribut1;
int Jour;
typeAttribut2 nomAttribut2;
int Mois; typeAttribut3 nomAttribut3;
int Annee; typeAttribut4 nomAttribut4;
}; …
};
34
Objet en C++
Comment créer un objet indeMaroc de
type CDate ?
La classe CDate est un type comme un
autre (int, char…)
{
CDate indeMaroc;
}
35
Initialiser un Objet
Pour l’instant, notre objet indeMaroc n’est
pas encore le 2 Mars 1956.
Spécifier chaque attribut à la main
{
[Link] = 2;
[Link] = 03;
[Link] = 1956;
}
36
Initialiser un Objet
Autre exemple : la date marcheVerte
que l'on souhaite initialiser au 6
Novembre 1975
{
CDate marcheVerte;
[Link]=6;
[Link]=11;
[Link]=1975;
}
37
Intérêt de la POO
Spécifier des comportements génériques
communs à tous les objets de notre
classe.
Par exemple :
◼ s'initialiser
◼ s'afficher
◼ vérifier si c'est contemporain
38
Initialiser
class CDate void InitDate(int jour,
{ int mois,
int annee)
int Jour ; {
int Mois ; Jour = jour;
int Annee ; Mois = mois;
Annee = annee;
}
};
39
Afficher
class CDate void Affiche()
{ int Jour ; {
int Mois ; cout
int Annee ; << Jour << "/"
<< Mois <<
"/" <<Annee ;
void InitDate(int jour,
}
int mois,
int annee) };
{…}
40
Contemporain
class CDate bool Contemporain()
{ int Jour; {
int Mois;
if( Annee >= 2000 )
int Annee; return true;
return false;
void InitDate(int jour,
}
int mois,
int annee) };
{…}
void Affiche()
{…}
41
Exemple
{
CDate indeMaroc;
[Link](2,03,1956);
CDate marcheVerte;
[Link](6,11,1975);
cout <<"La date "; [Link]();
cout <<" est elle contemporaine ? "
<< [Link]()<<endl;
cout <<"La date "; [Link]();
cout <<" est elle contemporaine ? "
<< [Link]()<<endl;
}
42
Résultat
{
CDate indeMaroc;
CDate marcheVerte;
[Link](2,03,1956);
La date 2/03/1956 est elle contemporaine ? no
cout <<"La date ";
[Link]();
cout <<" est elle contemporaine ? "
<< [Link]()<<endl;
[Link](6,11,1975);
cout <<"La date ";
[Link](); La date 6/11/1975 est elle contemporaine ? no
cout <<" est elle contemporaine ? "
<< [Link]()<<endl;
}
43
Initialiser un Objet – 2ème
méthode
Il existe une autre méthode pour initialiser les
attributs d'un objet :
utiliser les constructeurs.
Un constructeur est une "procédure" appelée
automatiquement qui permet de spécifier
chacun des attributs de l’objet en fonction de
ses paramètres.
Un constructeur ne possède aucun type de
retour, même pas void.
44
Constructeur par défaut
class CDate
{
int Jour ;
int Mois ;
int Annee ;
CDate()
{/* constructeur par défaut qui initialise
l'objet date au 01 Janvier 2005 */
Jour = 1; Mois = 1; Annee = 2005;
}
};
45
Créer mon objet
{
CDate uneDate;
cout << "La date ";
[Link]();
cout<< " est elle contemporaine ? "
<< [Link]();
}
46
Créer mon objet (suite)
Le programme va appeler automatiquement le
{ constructeur (aucun paramètre).
CDate uneDate;
L'objet uneDate sera donc initialisé avec
le 01 Janvier 2005
cout << "La date ";
il appelle ensuite la fonction Affiche() pour afficher
[Link](); la date puis la fonction Contemporaine() pour
cout << " est elle contemporaine ? " savoir si elle est contemporaine de notre
siècle.
<< [Link](); On obtient :
} La date 01/01/2005 est elle contemporaine ? yes
47
Autres Constructeurs Possibles
CDate (int jour, int mois, int annee)
{
Jour = jour;
Mois = mois;
Annee = annee;
}
CDate (int jour, int mois)
{
Jour = jour;
Mois = mois;
Annee = 2005;
}
48
Usage
{
CDate uneDate;
CDate indeMaroc (2,03,1956);
CDate dateCetteAnnee(7,03);
[Link](); // 01/01/2005
[Link](); // 2/03/1956
[Link](); // 7/3/2005
}
49
Écriture d'un Constructeur
class MaClass
{
type1 Attribut1;
…
MaClass(typeP1 parametre1, typeP2 parametre2, …)
{
…
}
};
50
mots clés
Le C++ met à votre disposition 3 mots
clés :
◼ public:
◼ private:
◼ protected:
51
public:
◼ Tous les attributs ou fonctions situés
sous le mot clé public: sont accessibles
en dehors de l’objet ou depuis
n'importe quelles fonctions de la classe.
Remarque : Les fonctions précédentes
ne fonctionnent qu'en ajoutant le mot
clé public:
52
Exemple de public:
class CDate {
{
CDate uneDate;
public:
int Jour;
int Mois; [Link]=03;
int Annee; [Link]=02;
[Link]=2023;
void Affiche()
{
cout [Link](); // 03/02/2023
<< Jour << "/" }
<< Mois << "/"
<< Annee;
}
};
53
private:
◼ Tous les attributs ou fonctions situés
sous le mot clé private: ne sont
accessibles que depuis les fonctions
de l’objet.
◼ C'est le comportement par défaut si
aucun mot clé n'est spécifié.
54
private:
class MaClasse {
{ MaClasse objet;
public:
int NbreAccessible;
private:
[Link]=3; // OK
int NbreProtege;
[Link]=7; // Impossible
void Affiche() {
cout<<NbreProtege<<end; [Link](); // Impossible
}
public:
[Link](); // OK
void LanceAffiche() {
Affiche(); }
}
};
55
protected:
◼Utile en ce qui concerne l'héritage.
Nous verrons cela plus tard.
◼ Pour l'instant, protected: est équivalent
à private:
56
Sécurité
Problème : Comment empêcher l'accès
à certains attributs tout en donnant la
possibilité de les modifier/consulter ?
Solution : Définir des accesseurs
57
Accesseur en lecture
Un accesseur en lecture est une fonction
de la classe permettant de récupérer
le contenu d'un de ses attributs.
int GetMois()
{
return Mois;
}
58
Accesseur en écriture
Un accesseur en écriture est une
procédure de la classe permettant de
modifier le contenu d'un de ses
attributs.
void SetMois(int mois)
{
Mois = mois;
}
59
Protéger les attributs de la
classe CDate
class CDate void SetMois(int mois)
{ {
private: if( mois < 1 || mois >= 12 )
int Jour; mois=1;
int Mois; Mois=mois;
int Année; }
public:
int GetMois() int GetJour(){ … }
{ void SetJour(int jour ) { … }
return Mois;
} int GetAnnee() { … }
void SetAnnee(int annee){ … }
};
60
Reprenons notre exemple
Essayons de définir la date 38/14/-362 ?
{
CDate dateImpossible;
[Link](38); // Jour = 1
[Link](14); // Mois = 1
[Link](-362); // Annee = 2005
[Link](); // 1/1/2005
}
61
Les outils de programmation
Ces programmes permettent de compiler les sources, débugger les programmes. En
voici les principaux :
◼ Visual C++ pour PC. Le logiciel de programmation Win 98/NT ce programme est
actuellement en version 14.32.31326 (10 mai 2022).
◼ Borland Builder : Pour PC.
◼ Bloodshed Dev-C++ : Il est totalement gratuit
◼ Code::Blocks (Gratuit)
◼ CodeLite (Gratuit)
◼ Turbo C++ (Gratuit)
◼ C++Builder (Payant)
◼ etc
62
Conclusion
◼ Programmation orientée objet (POO) ?
◼ Classe & Objet ?
◼ Encapsulation ?
◼ Héritage ?
◼ Polymorphisme ?
63
Exercice
◼ Écrire un programme utilisant une classe rectangle
dont le constructeur prend deux paramètres,
largeur et hauteur et qui offre les fonctions
suivantes :
o calcul du périmètre,
o calcul de la surface,
o affichage.
64