Vous êtes sur la page 1sur 38

République Tunisienne Université de Carthage

Ministère de l’Enseignement Supérieur et Ecole Nationale d’Ingénieurs de Bizerte


de la Recherche Scientifique

Programmation orientée objet


Langage C++
GI1 et GM1
(Semestre 2)

Safa Hachani & Islam ELLEUCH

Safa.hachani@enib.ucar.tn / elleuchislam@gmail.com

2023-2024
CHAPITRE 1

Introduction à la
Programmation Orientée
Objet (POO) et au C++
Plan

Présentation du cours

La programmation orientée objet

Du C au C++ (E/S, Types et variables, Allocation


dynamique, référence, etc..)

3
Présentation du cours

Objectif du cours
 Connaitre les concepts de la programmation orientée objet.
 Apprendre le langage C++.
 Utiliser des outils d’aide au développement (dev++).

Organisation

 21h de cours: Concepts de la POO et C++.


 12h de TP: Programmation C++ et outils de développement.

4
Programmation Procédurale (PPD)

 Principe
 Le programme est divisé en petites parties appelées procédures /fonctions qui
effectuent des traitements sur des données.
 Il n’existe pas un lien direct entre les données et les traitements.
 Les données et les traitements sont séparés.
 Les données à traiter sont passées en arguments aux procédures

PPD

Traitement 1 Données Traitement 2

Traitement 3

 Exemples de langages procéduraux : C, Pascal …

5
Programmation Procédurale (PPD)

 Limites :

 Complexité du code
 Difficulté de réutilisation du code.
 Difficulté de la maintenance et l’ajout de nouvelle fonctionnalités dans les
grandes applications.
 Nécessité de modification ou d’insertion des séquences.
 Difficulté du travail en équipe.

6
Programmation Orienté Objet (POO)

 Principe
 Le programme est composé de plusieurs objets qui contiennent :
 des données « internes »,
 des traitement qui manipulent ces données internes ou d’autres données
 Les données et leurs traitements sont regroupés dans une seule entité : objet.

POO Objet 1
Données

Traitements

Objet 2 Objet 3
Données Données

Traitements Traitements

7
Programmation Orienté Objet (POO)

 Principe
 Les données d’un objet sont appelés ses attributs.
 Les traitements d’un objet sont appelés ses méthodes.
 Exemples de langages orientés-objets : C++, C#, Java, Python…

POO Objet 1
Données
Attributs

Traitements
Méthodes

Objet 2 Objet 3
Données
Attributs Données
Attributs

Méthodes
Traitements Traitements
Méthodes

8
Programmation Orienté Objet (POO)

 Introduction
 Paradigme (style) de programmation consistant à assembler des briques
logicielles (objets).
 Un objet représente un concept ou une entité du monde.

 La plupart des langages de programmation populaires aujourd’hui sont basés


sur l’approche objets. Mais les objets ne sont pas uniquement utilisés pour la
programmation...
 Bases de données objets(Oracle)
 Méthodes de conception objets (UML)
 HTML+CSS, (accompagné de Javascript, PHP...)

9
Programmation Orienté Objet (POO)

 Concept
Abstraction

Héritage

Polymorphisme

Concepts de
POO

Encapsulation
Objet

Classe

10
Concepts de la Programmation Orienté Objet

 Des objets... pour quoi faire?


 Objectif premier c’est faciliter le développement d’une application robuste.

 En clair, programmer de manière orientée objet, c'est écrire du code source


(potentiellement complexe) mais que l'on masque en le plaçant à l'intérieur
d'un objet.

 Pour la personne qui va l'utiliser, travailler avec un objet est donc beaucoup
plus simple qu'avant : il suffit d’appeler les fonctions sur celui-ci..

11
Concepts de la Programmation Orienté Objet

 Objet
 Le concept d’objet est utilisé pour modéliser informatiquement des "objets"
concrets de la vie courante (véhicule, personne, etc.) ou des objets
conceptuels (date, quantité, etc.).

Exemple: Gestion de location de véhicule

Renault Ali Ben Salah


Noir 5 jours Directeur
120 d Amal Mhiri
Audi Mohamed Tounssi Locataire
Bleu Agent
Mounir Gharbi

 Un objet se caractérise par une identité (adresse en mémoire), des états


(valeurs de ses attributs) et un comportement (ses méthodes).

12
Concepts de la Programmation Orienté Objet

 Classe
 Une classe est la description d’une famille d’objets ayant une même
structure et un même comportement
 Les objets d’une classe ont des valeurs différentes.
Exemple: Gestion de location de véhicule

Renault Ali Ben Salah


Noir 5 jours Directeur
120 d Amal Mhiri
Audi Mohamed Tounssi Locataire
Bleu Agent
Mounir Gharbi

Classe Véhicule Classe Contrat Classe Employé Classe Client


- marque, couleur - durée, prix - nom, prénom, statut - nom, prénom

13
Concepts de la Programmation Orienté Objet

 Classe
 Une classe est composée de plusieurs membres dont chacun est soit:
 un attribut : variable typée
 Une méthode : ensemble d’instruction de traitement

Classe Véhicule
marque
Attributs couleur
vitesse

Méthodes accelerer() : vitesse + 10


décélérer() : vitesse - 10

14
Introduction C++

Langage C++
 Langage normalisé par l’ISO
 Défini dans les années 1980 (mais a évolué depuis : C++ 98,
C++ 03, C++ 11, C++ 14, C++ 17 puis en 2020 (ISO/IEC 14882:2020, ou
C++ 20).
 « Amélioration » de C facilite l’apprentissage pour quelqu’un
qui connaît déjà C. Mais … faire du C en C++ n’est pas
programmer en C++!
 Doté d’une bibliothèque de classes et algorithmes

15
Introduction C++

Objectifs du C++
 Efficacité (mémoire et rapidité) : Le langage n’ajoute aucune fonction
«cachée» demandant de la mémoire ou des traitements
→ Pas de ramasse -miettes (garbage collector)
 Développement plus rapide : Utilisation de la bibliothèque standard,
Réutilisation du code.
 Gestion de la mémoire plus simple : Gérer les libérations de
mémoire (free) plus facilement (voire automatiquement), Gestion des
chaînes plus simple
 Avantages de la POO
 …

16
Du C au C++

Du C au C++

 Types et variables
 Entrée et Sorties
 Allocation dynamique
 Le mot clé const
 Références
 Inférence de type
 Conversion de type
 Compilation

17
Types et variables

Les types du C++

 signed (+/ -); unsigned (+)

 char; short (short int); int; long (long int); long long (long long int); float;
double; long double

 bool → true false

18
Types et variables

Déclaration et initialisation des variables


Multiple déclarations
int a, b, c;
// équivalent à
int a; int b; int c;

Attention
int* a, b;
//a est un pointeur sur un entier, b est un entier.

Initialisation C / Initialisation C++


int a=0;
// équivalent à
int a(0);
//Dans les deux cas, il s’agit d’une initialisation
(et non une affectation).
Initialisation : donner une valeur initiale à une nouvelle variable.
Affectation : modifier la valeur d’une variable existante.
19
Types et variables

Chaînes de caractères
Le type (classe) std::string fournit les operations courantes sur les chaînes de
façon bien plus simple que les « chaînes » en C.

 Déclaration et initialisation
 std::string s1;
 std::string s2a("valinit"), s2b="valinit";
 std::string s3a(s1), s3b=s1;
 Affectation =
 Comparaison == != <=, ...
 Accès à un caractères[i]
 Lecture au clavier std::cin >> s;
 Affichage std::cout << s;
 Longueur d’une chaînes.length()
 Concaténation ++=

20
Types et variables

Premier exemple premierexemple.cc


#include <iostream>

int f(int a, int b){


int res(1);
for (int i=1; i<=b; ++i)
res*=a;
return res;
}
int main(){
int a,b;
std::cin >> a;
std::cin >> b;
std::cout <<f(a,b) << std::endl;
return 0;
}

21
Types et variables

Portée des variables


Une variable est accessible à partir de sa déclaration dans le bloc (accolades)
dans lequel elle est déclarée.

 Une variable globale est déclarée à l’extérieur de tout bloc. Il est toutefois
fortement conseillé de ne pas utiliser de variables globales.

 Cas particulier d’une déclaration dans un for :


La variable est accessible uniquement dans les instructions répétées par le for.

22
Types et variables

Portée des variables porteevariables.cc


#include <iostream>

signed short varglobale;


int main(){
varglobale = 5;
unsigned int varlocale = 10; // initialisation
while (varlocale >= 0){
int v(6);
varglobale += v;
varlocale--;
}
std::cout << varglobale << "\n";
return 0;
}

23
Types et variables

Tableaux C++ std::array


Le (modèle de) type (classe) std::array fournit les opérations de base d’un
tableau (d’éléments de même type) de façon plus simple et fiable
qu’un tableau en C
 n’est pas converti de façon implicite en pointeur.
 peut être passé par valeur → Copie.
 peut être affecté.
 «connaît» sa taille.
 peut détecter un accès à un indice invalide.

24
Types et variables

Tableaux C++ std::array


 Déclaration : std::array<typeElement, taille>
 L’indice d’un tableau est de type std::size_t ou std::size_type.
 Accès : [] ne fait aucune vérification, alors que at() lève une
exception.

terminate called after throwing an instance of 'std::out_of_range'


what():array::at: _n (which is 5) >= _Nm (which is 5)

 std::max_element calcule le maximum d’un conteneur.

25
Types et variables

array array.cc
#include <iostream>
#include <array>
int max (std::array<int,5> t){
int m(t[0]);
for (std::size_t i=1; i<5; i++)
if (t[i]>m)
m = t[i];
return m;
}
int main(){
std::array<int, 5> tab {3, 7, 1, 2, 6}; //initializer_list
std::cout << max(tab) << "\n";
std::array<int, 5> tab2(tab);
tab2[2]=12;
tab2.at(5)=15; // Erreur !
tab=tab2;
return 0;

26
Types et variables

Boucles for d’intervalle


Syntaxe for d’intervalle
for (typevar nomvar : intervalle)

 Un intervalle peut être :


Boucle for d’intervalle array2.cc
#include <iostream>
 un std::initializer_list (un
#include <array>
ensemble de valeurs de même void afficher(std::array<int,5> t){
for (int a : t)
type entre accolades std::cout << a << " "; //sur meme ligne
séparées par des virgules), //std::cout << a << "\n";
}
 un std::array (ou toute autre int main(){
std::array<int, 5> tab {3, 7, 1, 2, 6};
classe disposant de méthodes begin et
for (int a : {3, 7, 1, 2, 6})
end). std::cout << a << "\n";
afficher(tab);
return 0;
}

27
Types et variables

Struct et Enum Usage du typedef


#include <iostream>
 ypedef n’est plus utile lors de la typedef unsigned int Annee;
enum EtatPersonne{
déclaration de struct ou enum MAJEUR,
MINEUR
 Enum permet de déclarer une liste };
struct Personne {
d ’énumération. std::string nom;
std::string prenom;
 Une struct peutêtre initialisée à
EtatPersonne etat;
sa déclaration en passant entre Annee naissance;
};
accolades {} une valeur pour int main (){
Personne p;//et non struct Personne p
chacun des champs de la structure p.nom = "Ahmad";
p.etat = MINEUR;
(dans l’ordre de déclaration).
Personne p2 { "Ali", "Makni", MAJEUR,
1990};
return 0;
}

28
Types et variables

Clause using
 using peut être utilisé à la place de typedef avec une syntaxe plus naturelle.

typedef unsigned int Annee ;

Exemple
using Annee = unsigned int;
Using Tableau = std::array<std::string, 10>;

29
Types et variables

Enum
 Les types énumérés de C (enum) sont utilisables en C++ mais conservent leurs
défauts.

enums C enum1.cc
enum Couleur {Rouge, Vert, Bleu };
enum EtatPersonne {Majeur, Mineur};
int main(){
Couleur c(Rouge);
if (c == Majeur ){ }; //seulement un avertissement
int d(c); //même pas un avertissement
return 0; → convertis silencieusement en int.
}

 On préfèrera les énumérations fortement typées enum class à


enum : plus sûrs, car ne sont pas convertis silencieusement en int.

30
Types et variables

Enumération fortement typées: enum class

enums Class enum2.cc


enum class Couleur {Rouge, Vert, Bleu };
enum class EtatPersonne {Majeur, Mineur};
int main(){
Couleur c(Couleur::Rouge);
if (c == EtatPersonne::Majeur ){ }; //Erreur
int d(c); // Erreur
return 0;
}

 De plus les valeurs énumérées ne «polluent» pas l’espace des noms, et


doivent être préfixées par le nomde l’énumération.

31
Types et variables

Arguments par défaut


Exemple
void f(int a=2, int b=3){
std::cout <<a << " " << b << "\n";
}
...
f(); // 2 3
f(5);// 5 3
f(5, 7);// 5 7

 Les arguments d’une fonction peuvent avoir une valeur par défaut
lors de la déclaration de la fonction.
 Si les arguments correspondants ne sont pas passés lors d’un appel, la valeur
par défaut est prise en compte.

32
Allocation dynamique

Rappel en C
Syntaxe en C

 Allocation simple
int * i = (int *)(malloc (sizeof(int)));
 Allocation d’une zone
int * t = (int *)(malloc (sizeof(int)*taille));
 Libération
free(t);

33
Allocation dynamique

Allocation dynamique en C++


Syntaxe en C

 Allocation simple
int * i = new int;
int * i = new int(3); //Fixer la valeur initiale
 Allocation d’une zone
int * t = new int[taille];
 Libération simple
delete i;
 Libération d’une zone
delete []i;

34
Allocation dynamique

Allocation dynamique en C++

Attention

 Tout ce qui est alloué doit être libéré.


 Tout ce qui est alloué par new … [] doit être libéré par delete [ ].
 Ne pas mélanger new/delete avec malloc/free.

 Utiliser l’allocation dynamique uniquement quand elle est requise.


Si on alloue dynamiquement des objets, il faut les libérer explicitement.

35
Const

Le mot-clef const spécifie que la valeur d’une variable est constante.

Exemple
const int I(4); // équivalent à
const int I=4; // équivalent à
int const I(4);

I = 5 // erreur de compilation

 Une constante peut être utilisée pour spécifier la taille d’un tableau .
 Souvent on marque syntaxiquement les constantes (écriture en
majuscules, première lettre en majuscule, préfixe particulier telque
c_… )

36
Const

Const et pointeurs
Attention à la position du const

 Pointeur variable sur des caractères variables char * c;


 Pointeur constant sur des caractères variables char * const c;
c = c1; est interdit. *c='a'; c[1]='b'; sont autorisés.
 Pointeur variable sur des caractères constants
const char * c; (ou char const * c;)
c = c1; est autorisé. *c='a'; c[1]='b'; sont interdits
 Pointeur constant sur des caractères constants
const char * const c; ou (char const . const c;)
c=c1; c='a'; c[1]='b'; sont interdits

37
Exercice

Écrire un programme qui demande à l'utilisateur de taper 5 entiers


et qui affiche leur moyenne. Le programme ne devra utiliser que 2
variables.

38

Vous aimerez peut-être aussi