0% ont trouvé ce document utile (0 vote)
5 vues64 pages

Introduction à la POO en C++

Transféré par

oumaima hajji
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)
5 vues64 pages

Introduction à la POO en C++

Transféré par

oumaima hajji
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

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

Vous aimerez peut-être aussi