Vous êtes sur la page 1sur 50

Dorra ZAIBI Cours POO C++

Programmation
classique/procédurale

La programmation classique (ou encore procédurale,
structurée) telle que étudiée au travers des langages C,
Pascal… définie un programme comme étant:

1) Un ensemble de données sur lesquelles agissent des


procédures et des fonctions.

2) Les procédures sont les éléments actifs et importants,


les données devenant des éléments passifs qui
traversent l’arborescence de programmation procédurale en
tant que flot d‟informations.
Programmation classique

Exécuter un programme se réduit alors
- à appeler ces procédures dans un ordre décrit par le
séquençage des instructions (étape par étape), en
leur fournissant les données nécessaires

- à traiter indépendamment les données et les


procédures sans tenir compte des relations qui les
unissent.

Dorra ZAIBI Cours POO C++


Programmation classique

Dorra ZAIBI Cours POO C++


Problématique

 La complexité, sans cesse croissante, des
développements de logiciels a fini par trouver les
limites de la programmation structurée.

 Il fallait alors, pour maîtriser les coûts de


développement et de maintenance, trouver une
nouvelle approche qui pousse encore plus loin le
concept de modularité.

Dorra ZAIBI Cours POO C++


Nécessité de modularité

Extensibilité

Réutilisabilité Modularité

Compatibilité

Dorra ZAIBI Cours POO C++


De la programmation classique vers
l‟orientée objet

 En introduisant la notion de modularité dans la
programmation structurée descendante, l‟approche diffère
légèrement de l‟approche habituelle de la programmation
algorithmique classique.

 La programmation orientée objet relève d'une conception


ascendante définie comme des "messages" échangés par des
entité de base appelées objets.

 Les langages objets sont nés pour répondre à ces questions.


Ils sont fondés sur la connaissance d‟une seule catégorie
d‟entités informatiques: les objets.

Dorra ZAIBI Cours POO C++


De la programmation classique vers
l‟orientée objet

 Un programme est constitué d‟un ensemble d’objets chacun
disposant d‟une partie procédures et d‟une partie données.
Les objets interagissent par envoie de messages.

 Un objet peut recevoir un msg qui déclenche:


- Une fonction qui modifie son état ou
- Une fonction qui envoie un msg à un autre objet

- Exemples de langages orientés-objet : C++, Java, …

Dorra ZAIBI Cours POO C++


Notion d‟Objet

 Approche procédurale : "Que doit faire mon programme ?"
 Approche orientée-objet : "De quoi doit être composé mon
programme ?"
 Cette composition est conséquence d'un choix de modélisation
fait pendant la conception .
Donc la programmation orientée objet permet une modélisation en
lien direct avec le monde réel.
Notion de Classe

 Des objets similaires peuvent être informatiquement décrits par
une même abstraction : une classe
 même structure de données et méthodes de traitement
 valeurs différentes pour chaque objet
Structure d‟un programme
C++

C++ est un langage compilé


Notions de bases en langage C++

Les variables

 Elle possède un type (char, int…), un nom et une
valeur.
 Déclaration de variable :
Nom_type nom_objet;
ou Nom_type nom_objet = valeur;

Dorra ZAIBI Cours POO C++


Les types élémentaires

 Les entiers relatifs (1,2,-3, etc…) : int. On peut leur ajouter
les attribut : short, long, signed, unsigned)
 Les réels ou flottants (0.12, PI, …) : float (4 octet).
 Les réels double précison : double (8 octets).(on peut lui
ajouter l‟attribut : long)
 Les caractères („a‟, „b‟, „c‟, „#‟, „3‟…) : char (1 octet)=
code ASCII du caractères.(on peut lui ajouter les attributs
signed ou unsigned)
 Le type logique ou booléen (true, false) : bool
Variables: les types
élémentaires

Dorra ZAIBI Cours POO C++


Constantes symboliques

Il est possible de définir des constantes symboliques
avec le mot clé const :

Syntaxe :
const type nom = val;

Exemple :
const int Taille = 100 ;

Dorra ZAIBI Cours POO C++


Chaînes de caractères

1ère possibilité
char msg[50] = "This is an example";

Exemple:
char str[4] = "C++";
char str[] = {'C','+','+','\0'};
char str[4] = {'C','+','+','\0'};

Dorra ZAIBI Cours POO C++


Chaînes de caractères
2ème possibilité: 
On utilise la classe string.
Il faut placer en tête du fichier : #include <string>
string est un tableau de caractères qui se termine avec le caractère nul, ‘\0’
( le code ASCII du caractère nul est égale à 0).
Exemple:
- string t ; // variable de type string, la taille non fixée, elle peut être
étendue
- string s(N,c) ; // variable s de longueur N (un entier) où chaque
élément est initialisée avec le caractère c
- string mot = "bonjour" ; //variable mot contenant la chaîne
« bonjour »
- string maChaine("Bonjour !"); //Création d'un objet 'maChaine' de
type string et initialisation
Chaînes de caractères
2ème possibilité: 
On utilise la classe string.
Il faut placer en tête du fichier : #include <string>
string est un tableau de caractères qui se termine avec le caractère nul, ‘\0’
( le code ASCII du caractère nul est égale à 0).
Exemple:
- string t ; // variable de type string, la taille non fixée, elle peut être
étendue
- string s(N,c) ; // variable s de longueur N (un entier) où chaque
élément est initialisée avec le caractère c
- string mot = "bonjour" ; //variable mot contenant la chaîne
« bonjour »
- string maChaine("Bonjour !"); //Création d'un objet 'maChaine' de
type string et initialisation
Chaînes de caractères
Taille chaine:

string t;
t.size() représente la longueur de t et le i-éme caractère d‟une chaîne t est
désigné par t[i] avec i = 0,1,. . . t.size()-1.

Modifier chaine:
string maChaine("Bonjour !");
maChaine = "Re bonjour !";

Concaténation:
Etant données deux chaînes s et t, s+t est une nouvelle chaîne correspondant à
la concaténation de s et t.
Exemple: string chaine; chaine=s+t;

Comparaison de chaine à l'aide des symboles == ou !=


Exemple: if (chaine1 == chaine2)
{
}
Dorra ZAIBI Cours POO C++
Les tableaux

Il existe deux types de tableau en C++ :
 la classe vector et
 les tableaux simples (les seuls disponibles dans le langage C)

Pour utiliser la classe vector, on ajoute #include <vector>

Un tableau est une structure typée : on distingue les tableaux sur les
int, char, etc. On précise donc son type lors de la définition.

Dorra ZAIBI Cours POO C++


Les tableaux

La structure générale est: vector <type> Nom(n,v) ;
lorsqu‟on initialise le tableau avec une valeur v.

Exemple:
vector <int> Tab(100,5); // tableau d‟entiers de taille 100
initialisé à 5.
vector <int>Tab(50); // tableau d‟entiers de taille 50
initialisé à 0.
vector <double> T; // tableau de double, vide

On peut aussi initialiser: vector <type> Nom1 = Nom2 ;

Dorra ZAIBI Cours POO C++


Les tableaux

Autre possibilité (comme en C)

Syntaxe:
Type nom_variable[taille];

Exemple:
int age[5];
int age[5]={1,2,3,4,5};
int age[]={1,2,3,4,5};
Les tableaux: multidimentionnel

Syntaxe:
Type nom_variable[taille][taille];

Exemple:
int x[3][4]; // x un tableau deux dimensions de 12 éléments
int test[2][3] = {2, 4, -5, 9, 0, 9}; // initialisation d‟un tableau
int test[2][3] = { {2, 4, 5}, {9, 0 0}}; // meilleure façon pour
initialiser un tableau

int test[2][3][4]; // tableau trois dimensions

Dorra ZAIBI Cours POO C++


Les tableaux: multidimentionnel

Dorra ZAIBI Cours POO C++


auto, decltype

 C++ offre plusieurs mécanismes de déduction de types.
 NB: on doit ajouter : #include <bits/stdc++.h>

 En particulier :
 Le mot clé auto, qui permet de déduire le type d'un
objet à partir du type de l'expression utilisée pour
l'initialiser
decltype

 L'opérateur decltype, dans ses
déclinaisons decltype(expr) et decltype(auto), permet
de déduire avec précision le type d'une expression.

 decltype « retourne » un type.

Dorra ZAIBI Cours POO C++


decltype

 L'opérateur decltype, dans ses
déclinaisons decltype(expr) et decltype(auto), qui
permet de déduire avec précision le type d'une
expression

 decltype « retourne » un type

Dorra ZAIBI Cours POO C++


Commentaires

Pour commenter une fin de ligne :
// suivi de ce que l’on veut !

Pour commenter un ensemble de lignes :


/* commentaires */

Dorra ZAIBI Cours POO C++


Affectation

 Opérateur d‟affectation simple „=„: i=j;
 Opérateur d‟affectation additionneur „+=„: a+=b;
 Opérateur d‟affectation soustracteur „-=„ : a-=b;
 Opérateur d‟affectation multiplicateur „*=„ : a*=b;
 Opérateur d‟affectation diviseur „/=„ : a/=b;
 Opérateur d‟affectation modulo „%=„ : a%=b;

Dorra ZAIBI Cours POO C++


Opérateurs arithmétiques

+ addition a + b

- Soustraction a - b

* multiplication a * b

/ division a / b : division entière et réelle

% reste a % b

Dorra ZAIBI Cours POO C++


Opérateurs de comparaison

== (égale), != (différent), < (inférieur), <= (inférieur ou
égal), >(supèrieur), >= (supèrieur ou égal)

Ces opérateurs sont définis pour les types élémentaires


et renvoient ’true‟ lorsque la condition est vérifiée et
’false‟ sinon

 Attention à ne pas confondre = et ==

Dorra ZAIBI Cours POO C++


Opérateurs booléens

 && représente l‟opérateur “AND” (conjonction),
 || représente le “OR” (disjonction), et
 ! représente le “NOT” (négation).

Dorra ZAIBI Cours POO C++


Contrôles conditionnels
 if (expr) instr;

 if (expr) instr1 else instr2;

 if (expr1) instr1 else if (expr2) instr2 else if (expr3) instr3 else


instr4;

Remarque:
* La condition doit être entre des parenthèses
* Instruction peut être simple ou bien composé {liste d’instructions}
Contrôles conditionnels
 if (expr) instr;

 if (expr) instr1 else instr2;

 if (expr1) instr1 else if (expr2) instr2 else if (expr3) instr3 else


instr4;

Remarque:
* La condition doit être entre des parenthèses
* Instruction peut être simple ou bien composé {liste d’instructions}
Contrôles conditionnels
switch (exp)

{
case cste1 : liste d‟instructions 1
...
case csten : liste d‟instructions n
default : liste d‟instructions
}

Cette instruction permet, selon la valeur de expr, d‟exécuter la liste


d‟instructions.

Il est important de placer un “break ;” `a la fin de chaque liste

Dorra ZAIBI Cours POO C++


Contrôles itératifs

Différentes boucles en C++

Dorra ZAIBI Cours POO C++


Contrôles itératifs

 for (expr1 ; expr2 ; expr3) instr

Exemple : for (i=0 ; i <200 ; i=i+1, j=j+2) instr

Initialisation Incrémentation/décrémentation
Condition

 while (expr) instr la difference entre les deux c‟est


que la seconde s‟exécute au moins
 do instr while (expr) ; 1 fois.

Dorra ZAIBI Cours POO C++


Contrôles itératifs

 break provoque l‟arrêt de la première instruction do,
for ou while englobant et la boucle switch.

 continue provoque (dans une instruction do, for, ou


while) l‟arrêt de l‟itération courante et le passage au
début de l‟itération suivante.

Dorra ZAIBI Cours POO C++


Contrôles itératifs

Dorra ZAIBI Cours POO C++


For each

 C++11 introduit un nouveau type de boucle, appelé
for-each, permettant de faire l‟itération dans un
tableau,

 Elle est utilisée pour accéder aux éléments d‟un


tableau rapidement sans effectuer l’initialisation, les
tests et l’incrémentation/décroissement.

 Syntaxe:
 for (element_declaration : array) statement;

Dorra ZAIBI Cours POO C++


For each

 C++11 introduit un nouveau type de boucle, appelé
for-each, permettant de faire l‟itération dans un
tableau,

 Elle est utilisée pour accéder aux éléments d‟un


tableau rapidement sans effectuer l’initialisation, les
tests et l’incrémentation/décroissement.

 Syntaxe:
 for (element_declaration : array) statement;

Dorra ZAIBI Cours POO C++


Autres opérateurs

 Opérateur ternaire: (condition) ? exp1 : exp2 => vaut
exp1 si condition est évaluée à vrai et exp2 sinon.

 Pré et Post incrément : ++. L‟expression ++var (resp.


var++) incrémente la variable var et retourne la
nouvelle (resp. l‟ancienne) valeur.

Lorsqu‟elles sont utilisées en dehors d‟une expression,


i++ et ++i sont donc équivalentes.

Dorra ZAIBI Cours POO C++


Autres opérateurs

Dorra ZAIBI Cours POO C++


Conversion de types: cast

 Il existe plusieurs manières de convertir des objets:

• Conversions implicites : Elles ne demandent aucun


opérateur ou symbole particuliers et se produisent
automatiquement lors de copie d‟une valeur vers un
type compatible.

• Conversions explicites : fonctionnelles et C-style.


Lorsque l‟on précise explicitement la conversion, on
réalise une conversion explicite.

Dorra ZAIBI Cours POO C++


Espaces de noms

 Utilisation d’espaces de noms (namespace) lors de l’utilisation
de nombreuses bibliothèques pour éviter les conflits de noms
 Espace de noms : association d’un nom à un ensemble de
variable, types ou fonctions
Ex. Si la fonction MaFonction() est définie dans l’espace de noms
MonEspace, l’appel de la fonction se fait par MonEspace::MaFonction()
 Pour être parfaitement correct :
std::cin
std::cout :: opérateur de résolution de portée
std::endl

Dorra ZAIBI Cours POO C++


Espaces de noms

Pour éviter l’appel explicite à un espace de noms :
 using std::cout ; // pour une fonction
spécifique
 using namespace std; // pour toutes les
fonctions
Créer un espace de noms

namespace identifiant
{ // Déclarations ici ... }

Exemple :
namespace exemple
{ int suivant(int n)
{ return n+1;
}
}

Dorra ZAIBI Cours POO C++


Utiliser un espace de noms

Exemple
1
int a = exemple : : suivant(5);

ou utiliser la déclaration using : 2


using exemple : : suivant;

int a = suivant(5);

ou encore utiliser la directive using 3


using namespace exemple;
...
int a = suivant(5);

Dorra ZAIBI Cours POO C++


C++ Standard Library

https://en.cppreference.com/w/cpp/header

Vous aimerez peut-être aussi