03/11/2016
UNIVERSITÉ DES SCIENCES ET DE LA TECHNOLOGIE D’ORAN « USTOMB »
FACULTÉ DE GÉNIE ÉLECTRIQUE - DÉPARTEMENT D’ELN
MASTER 1: ESE / I / RT
MODULE: POO
Introduction à la Programmation
Orientée Objet :: Cours de C++
La responsable du module: Dr. Zouagui-Meddeber L.
lmeduniv@[Link]
Plan du module
Chapitre 1: Introduction à la POO
Chapitre 2 : Langage C++
– Bases du langage (1)
Types de base, variables, entrées/sorties , opérateurs, expressions
et conversions
– Bases du langage (2)
Les structures de contrôle, Fonctions
– Bases du langage (3)
Tableaux, Pointeurs et arithmétique des pointeurs, Allocation
dynamique, Énumérations et Structures
Chapitre 3: Classes et objets
Déclaration de classe, Variables et méthodes d'instance, Définition des
méthodes, Droits d'accès et encapsulation, Séparations prototypes et
définitions, Constructeur et destructeur, Les méthodes constantes,
Association des classes entre elles, Classes et pointeurs.
2
1
03/11/2016
Plan du module
Chapitre 4: Héritage et polymorphisme
Héritage, Règles d'héritage, Chaînage des constructeurs, Classes de base,
Préprocesseur et directives de compilation, Polymorphisme, Règles à suivre,
Méthodes et classes abstraites, Interfaces, Traitements uniformes, Tableaux
dynamiques, Chaînage des méthodes, Implémentation des méthodes
virtuelles, Classes imbriquées.
Chapitre 5: Les conteneurs, itérateurs et foncteurs
Les séquences et leurs adaptateurs, Les tables associatives, Choix du bon
conteneur, Itérateurs : des pointeurs boostés, La pleine puissance des list et
map, Foncteur : la version objet des fonctions, Fusion des deux concepts.
Chapitre 6: Notions avancées
La gestion des exceptions, Les exceptions standard, Les assertions, Les
fonctions templates, La spécialisation, Les classes templates.
Pourquoi ce cours ?
Place importante de la modélisation en electronique:
- validation d’une théorie
- prédiction et calculs
- évaluation des risques
Les phénomènes étudiés sont complexes
La programmation orientée-objets peut faire gagner beaucoup de temps
2
03/11/2016
Objectif du cours
- Comprendre les concepts élémentaires de programmation orientée objet (POO)
- Etre capable de lire et comprendre du code C++
- Analyser un problème et le décomposer pour mieux le traiter
- Mettre en oeuvre les concepts de POO en langage C++
Connaissance
Temps
5
Qualité d’un Programme ?
Validité Le programme fonctionne
Extensibilité Je peux le faire évoluer
Je peux utiliser des composantes du
Réutilisabilité
programme pour d’autres applications
3
03/11/2016
Comment s’y prendre ?
Séparer le programme en modules réutilisables
Unité fonctionelle autonome,
possédant une interface (header.h)
Independante de son implantation ([Link])
Par analyse fonctionnelle descendante
Par analyse ascendante
La conception par objets
Cette méthode privilégie les données, et non les fonctions
Trouver les objets (physiques)
Décrire et classer les objets
Opérations
Liens
Caractéristiques communes
Implanter ces objets
4
03/11/2016
Un langage orienté objet
Permet:
La définition d’objets, avec partie publique et privée
La lisibilité (distinction interface / implémentation)
La modularité (compilation séparée)
La réutilisation (mise en facteur des fonctionalités)
L’extension des objets (héritage)
La définition d’objets abstraits
9
Historique
Créé par B. Stroustrup (Bell Labs. ) à partir de 1979 (“C with classes”).
Devient public en 1985 sous le nom de C++.
La version normalisée (ANSI) paraît en 1998.
Vérifications de type + stricte
Surcharge de fonctions
Opérateurs
Références
C++ = C +
Gestion mémoire + facile
Entrées/sorties + facile
Classes et héritage
Programmation générique
… 10
5
03/11/2016
Un langage compilé…
Langage = protocole de communication entre le
programmeur et le processeur.
Le processus de compilation
Le C++ est un langage compilé, c'est à dire qu'il faut :
entrer un texte dans l'ordinateur (à l'aide d'un programme appelé
EDITEUR, par exemple kwrite ou le blocnotes),
le traduire en langage machine (c'est à dire en codes binaires
compréhensibles par l'ordinateur) : c'est la compilation (nous utiliserons le
compilateur g++),
l'exécuter.
11
12
6
03/11/2016
Structure d'un fichier source, définitions
13
Structure d'un fichier source, définitions
Prototypes de fonctions
// declaration in a header file. header.h
void function( int param1, int param2 = 10 );
// implementation file [Link]
void function( int param1, int param2 )
{
// print ‘param1’ and ‘param2’ to
// the standard output.
}
// main function [Link]
int main()
{
function( 5, 3 );
function( 5 );
return 0;
}
14
7
03/11/2016
Structure d'un fichier source, définitions
/* premier exemple de programme C++ */
#include <iostream>
using namespace std;
const float TVA=19.6;
void main(void)
{
float HT, TTC; //on déclare deux variables
cout<<"veuillez entrer le prix HT : ";
cin>>HT;
TTC=HT*(1+(TVA/100));
cout<<"prix TTC : "<<TTC<<endl;
}
15
Entrées/sorties: cout et cin
Entrées/sorties fournies à travers la librairie iostream
cout << expr1 << … << exprn
− Instruction affichant expr1 puis expr2, etc.
− cout : « flot de sortie » associé à la sortie standard (stdout)
− << : opérateur binaire associatif à gauche, de première opérande cout
et de 2ème l’expression à afficher, et de résultat le flot de sortie
− << : opérateur surchargé (ou sur-défini)⇒ utilisé aussi bien pour les
chaînes de caractères, que les entiers, les réels etc.
cin >> var1 >> … >> varn
− Instruction affectant aux variables var1, var2, etc. les valeurs lues
− cin : « flot d’entrée » associée à l’entrée standard (stdin)
− >> : opérateur similaire à <<
16
8
03/11/2016
Entrées/sorties: cout et cin
Possibilité de modifier la façon dont les éléments sont lus ou écrits dans le flot :
dec: lecture/écriture d'un entier en décimal
oct: lecture/écriture d'un entier en octal
hex: lecture/écriture d'un entier en hexadécimal
endl: insère un saut de ligne et vide les tampons
setw(int n): affichage de n caractères
setprecision(int n): affichage de la valeur avec n chiffres avec éventuellement un
arrondi de la valeur
setfill(char): définit le caractère de remplissage flush vide les tampons après
écriture
#include <iostream>
#include <iomanip> // attention a bien inclure cette librairie
int main()
{ int i=1234;
float p=12.3456;
std::cout << "|" << setw(8) << setfill('*‘)
<< hex << i << "|" <<std::endl << "|"
<< setw(6) << setprecision(4)
<< p <<|<< std::endl;
return0;
17
}
#include <iostream>
using namespace std;
int main()
{
cout << "Hello " << endl;
return 0;
}
18
9
03/11/2016
19
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
cout << "Hello " << endl;
printf("Hello bis\n" )
return 0;
}
20
10
03/11/2016
21
Entrées/sorties: C/C++
C #include <stdio.h>
int value = 10;
printf( “value = %d\n”, value );
printf( “New value = ??\n” );
scanf( “%d”, &value );
C++ #include <iostream>
using namespace std;
int value = 10;
cout << “Value = “ << value << endl;
cout << “New value = ?? ” << endl;
cin >> value;
Les opérateurs ‘<<‘ et ‘>>’ sont surchargeables.
22
11
03/11/2016
C : mots-clés
23
C++ : nouveaux mots-clés
24
12
03/11/2016
C++ : définition des variables
25
C++ : définition des variables
26
13
03/11/2016
C++ : définition des variables
27
C++ : variables « globales »
28
14
03/11/2016
C++ : types de base
std::cout << sizeof(int) << std::endl;
29
C : types de base
30
15
03/11/2016
C++ : types de base
31
C++ : types de base
Précisions :
En ce qui concerne le type « wchar_t », il s’agit d’une représentation des
caractères sur 16 bits ce qui permet d’utiliser le codage Unicode des caractères
à la place du codage ASCII (8 bits). Ce codage étendu est nécessaire pour
représenter des alphabets non latins et envisager ce que l’on appelle
l’internationalisation des programmes.
Note importante :
Le C et le C++ n’ont pas de type de base pour représenter les chaînes de
caractères (comme en JAVA le type « string »). Les chaînes de caractères sont
représentées par des tableaux de caractères. Il existe cependant dans la librairie
standard de C++ une classe std::string, mais il ne s’agit pas d’un type de base,
faisant partie du noyau du langage.
32
16
03/11/2016
C++ : types de base (les caractères)
33
C++ : types de base (les entiers)
34
17
03/11/2016
C++ : types de base (les réels)
35
C++ : types de base (les chaines de caractères)
36
18
03/11/2016
37
C++ : types de base (le type Pointeur)
38
19
03/11/2016
C++ : types de base (le type Pointeur)
39
40
20
03/11/2016
41
C/C++ : Conversions de types
42
21
03/11/2016
43
y=7.5
q=3
y=1.75
y=1
y=1.6
q=1
y=1.6
44
22
03/11/2016
C++ : Expressions constantes
45
C/C++ : opérateurs
Type
Précisions :
• L’opérateur :: permet de lever les ambiguïtés entre des variables de même nom
• Le choix de l’opérateur de sélection dépend de l’entité à laquelle il s’applique
• Il existe des opérateurs d’incrémentation et de décrémentation préfixés
46
23
03/11/2016
C/C++ : opérateurs
Type
Précisions :
• Les opérateurs new et delete ont une grande importance en C++
• Les opérateurs * et & sont inverses l’un de l’autre
• L’opérateur de négation unaire est différent de l’opérateur de négation binaire 47
C/C++ : opérateurs
Type
Précisions :
• L’opérateur sizeof retourne une valeur du type size_t
• L’opérateur typeid retourne une valeur du type const type_info&
• Ne pas confondre la multiplication * et l’opérateur d’indirection * 48
24
03/11/2016
C/C++ : opérateurs logiques et mathématiques
Type
49
C/C++ : opérateurs logiques et mathématiques
Type
50
25
03/11/2016
C/C++ : opérateurs logiques et mathématiques
Type
51
C/C++ : opérateurs logiques et mathématiques
Type
52
26
03/11/2016
C/C++ : opérateurs logiques et mathématiques
53
C/C++ : opérateurs logiques et mathématiques
Type
54
27
03/11/2016
C/C++ : opérateurs logiques et mathématiques
Type
55
C/C++ : opérateurs logiques et mathématiques
Type
56
28
03/11/2016
C/C++ : opérateurs logiques et mathématiques
Type
57
C/C++ : opérateurs logiques et mathématiques
Type
58
29
03/11/2016
C/C++ : les priorités des opérateurs
59
C/C++ : Opérations mathématiques de base
60
30
03/11/2016
Exercice: Evaluations d'expressions
Soient les déclarations suivantes:
int i1, i2 = 3; float f1, f2 = 3.0;
Donnez la valeur des variables modifiées par chacune des
expressions suivantes:
1) i1 = i2 + 1, i1 += i2;
2) f1 = i2 / 2 + f2;
3) i1 = i2 / 2 + f2 + .5;
4) i1 = i2 / 2 + f2 + .6;
5) i1 = (int) f2 % i2;
6) i1 = i2 >= i2 + 1;
7) i1 = (i2 = 3) + 1; 19) i1 = ~0;
8) i1 = (i2 == 3) + 1; 20) f1 = f2++;
9) i1 = i2 < 2 || f2 > 2;21) i1 = i2 == 0 ? 0 : i2 < 0 ? -1 : 1;
10) i1 = i2 && f2; 22) i1 = ++i2 == 4 ? i2++ : i2--;
11) i1 = !!!i2;
12) i1 = 5 << 3; 23) i2 += ++i2;
13) i1 = -1 >> 1;
14) i1 = -5 >> 1;
15) i1 = ((i2 + i2) * 2) >> 2;
16) i1 = i2 | 1;
17) i1 = i2 & 1;
18) i1 = i2 ^ 1;
61
C/C++ : Opérateurs de comparaison
62
31
03/11/2016
C/C++ : les structures de contrôles:
« Traitement alternatif »
63
C/C++ : les structures de contrôles
64
32
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle IF..else»
65
C/C++ : les structures de contrôles
«La structure conditionnelle alternative IF..else..»
66
33
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle alternative IF..else..»
67
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive For»
68
34
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive For»
69
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive For»
70
35
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive While»
71
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive While»
72
36
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive Do .. While»
73
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive Do .. While»
74
37
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive Do .. While»
75
C/C++ : les structures de contrôles
«La structure conditionnelle répétitive Do .. While»
Exercices:
1. Ecrire un programme C++ qui demande à l'utilisateur
d'entrer des notes. L'utilisateur indiquera qu'il veut arrêter en
entrant la valeur -1. Le programme affichera alors la moyenne
des notes.
2. Modifier le programme pour limiter le nombre de notes à
10. L'utilisateur peut toujours entrer -1 s'il souhaite arrêter.
3. Modifier le programme pour qu'il affiche la note la plus
grande.
4. Modifier le programme pour qu'il affiche le nombre de
notes supérieures à 4.
76
38
03/11/2016
77
78
39
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle alternative multiple Switch»
79
C/C++ : les structures de contrôles
«La structure conditionnelle alternative multiple Switch»
80
40
03/11/2016
C/C++ : les structures de contrôles
«La structure conditionnelle alternative multiple Switch»
Exercice:
On veut écrire un programme qui demande à l’utilisateur
d’entrer le rayon d’un cercle, puis qui lui demande s’il
souhaite en obtenir le diamètre, le périmètre ou l’aire:
• Si l’utilisateur entre 1, le diamètre sera affiché.
• Si l’utilisateur entre 2, le périmètre sera affiché.
• Si l’utilisateur entre 3, l’aire sera affichée.
81
C/C++ : les structures de contrôles
82
41
03/11/2016
C/C++ : les structures de contrôles
cout<<"i = " << i <<endl;
cout<<« Valeur de i a la sortie de la boucle = " << i <<endl;
83
C/C++ : les structures de contrôles
cout<<"i = " << i <<endl;
cout<<« Valeur de i a la sortie de la boucle = " << i <<endl;
84
42