programmation objet en langage...

35
Programmation Objet en Langage C++

Upload: others

Post on 10-Oct-2020

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Programmation Objet en

Langage C++

Page 2: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Organisation• 3 séances de Cours Magistral

• Romain Pacanowski @ institutoptique.fr

• 13 séances de TP sur machines • Bertrand Simon @ institutoptique.fr

• 7 séances sur un projet de programmation • Séances non encadrées • En binôme • Sujets assignés aux binôme aléatoirement

2

Page 3: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Page du Cours et des TP

http://manao.inria.fr/perso/~pac/cpp.php • Notes de Cours • Sujets des TP • Sujets des Projets • Bibliographie

3

Page 4: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Évaluation• Travaux Pratiques

• Remise de code en fin de • Séance 5 • Séance 13

• Examen Final • Décembre 2017 13h30 (à confirmer) • Soutenance orale sur le projet

• 10 minutes • Passage par binôme • Evaluation individuelle

• Copier/Coller de code

4

Page 5: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Rappel sur le plagiatCopier-coller de code == Plagiat

Dans tout établissement d’enseignement supérieur: • Conséquences:

• Zéro à l’examen • Absence de rattrapage • Validation de l’année déterminée par le jury final

En entreprise: • Poursuite judiciaire • Sanction: blâme jusqu’au licenciement pour faute

• Discussions et échanges sont encouragés

5

Page 6: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Travail Personnel• Programmer == Pratiquer (Beaucoup !)

• Début: activité chronophage (C’est normal !) • Minimal:

• Faire les exercices de TP en séance Ne pas être passif !

• Refaire les exemples des slides du cours • Conseillé:

• Lire d’autres cours C++ • Suivre des tutoriaux:

https://openclassrooms.com/courses/programmez-avec-le-langage-c

6

Page 7: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

L’activité de Programmer• Ecrire avec convention de codage

http://manao.inria.fr/perso/~pac/teaching/cpp/conventions-codage.pdf

• Compiler • Compilateur

• Corriger (e.g., erreur de syntaxe) • Executer • Corriger (e.g., segfault)

• Débogueur • Tester

• Automatique (e.g., Catch)

7

Page 8: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Déroulement des Cours• Cours 1

• Tour d'horizon rapide du C++ • Éléments de programmation impérative en C++ • De la Structure C à la Classe C++

• Cours 2

• Cours 3

8

Page 9: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Historique C, C++, Java et C#, Python

1963

1998

2002

1978

1967 1995

2011

2011

1973

Travaux pré. Ritchie & Thomson

@Bell LabsC Travaux de l'ANSI

GCC

C++

C99 C11

1999

Noyau Unix

C K&R C-Book

ISO C++11

1987

1983

Simula

1979

JavaPython

1994

C#

1983

Travaux pré C++

Stroustrup @Bell Labs

19851st

Release

2nd Releas

e

1989

1989/90

C89

C99

ISO C++98

2003ISO C++03

Page 10: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Standardisations/Normes du C++• C++98

• 1998 : ISO/IEC 14882:1998 • C++03

• 2003 : ISO/IEC 14882:2003 • C++TR1

• 2007 : ISO/IEC TR 19768:2007 • C++11 (avant C++0x)

• 2011 : ISO/IEC 14882:2011 • C++14 • C++17

10

Page 11: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Design du C++l Syntaxe épurée du C

→ Conserver le savoir-faire != compatibilité du code l Améliorer la productivité du programmeur

− Simplifier le langage à la place du compilateur l Portabilité et Efficacité similaire au C

− « Zero-overhead » principle l Liberté : responsabiliser le programmeur

− e.g., gestion de la mémoire

Page 12: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Design du C++

l Limitations historique du C − Assembleur de haut niveau != langage de prog. impératif

− L'absence l de typage des macros l de passage par adresse (par opposition à copie)

− La rarification des noms d'identificateurs

Page 13: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Caractéristiques générales du C++• Langage compilé • Syntaxe ala C

• Transition facilitée des développeurs • Typage statique (à la compilation) • C++

• N’est pas une extension objet du C • Un programme C ne compile pas forcément en C

++ • Même en appliquant la norme ISO.

13

6=

Page 14: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Caractéristiques générales du C++

• « Grande Comptabilité » avec le C • Conversion des librairies C pour utilisation depuis

C++

• Multiplateformes en appliquant la norme ISO • Window, Mac OS , Linux, *BSD (e.g., FreeBSD)

• Gestion des erreurs avec des exceptions

14

Page 15: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Caractéristiques générales du C++

• Paradigmes de programmation : • Impérative • Programmation par objet • Générique (templates) • Meta-templates....

→ Langage « hybride »

15

Page 16: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Objectifs du Cours et des TP• Maîtrise des Concepts clés C++

• Référence • Constness

• Concepts fondamentaux de POO • Classe, Objet, Héritage, Polymorphisme,

Composition, Agrégation

• Initiation et Utilisation • Standard Templates Library (STL)

16

Page 17: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Démo 1 sur le C++ impératif

17

Page 18: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Arbres de recherche 85

Premier exemple en C++

1: #include <iostream>

3: int main(int argc, char** argv ) { 4: std::cout << " HOWDY !!! " << std::endl; 5: return 0; }

Page 19: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Types de données en C++• Types primitifs (fondamentaux)

• Très proches du langage C • Types signés et non-signés (unsigned) • Compris intrinsèquement par le compilateur

• Types abstrait/objet • Classes créés par le programmeur • Appris à la « volée » par le compilateur

19

Page 20: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Types primitifs• Norme C++

• Ne spécifie pas le nombre de bits • Utilisation de → sizeof() • Valeurs minimales et maximales que le type

• #include <climits> • #include <cfloat> • Exemple

• std::numeric_limits<float>::min()

• 4 types de base • char, int, float, double

20

Page 21: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Types primitifs• 4 types de base

• char, int, float, double • bool

• Valeurs : true or false • Conversion du compilateur vers int • → mauvais usage (historique)

• Valeurs minimales et maximales du type #include <climits> #include <cfloat>

21

Page 22: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Modificateurs de types primitifs• 4 modificateurs

• long, short,unsigned, signed • Hiérarchie

• sur les entiers : short int, int, int, long int • sur les flottants : float, double, long double

• signed • Implicite sur tous les types sauf char

22

Page 23: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Exercice sur les types primitifs• Afficher la taille de tous les types

• en utilisant l'opérateur sizeof • avec et sans modificateurs

• Afficher la borne inf et sup • de chacun des types primitifs • utilisez

• std::numeric_limits<TYPE>::min() • std::numeric_limits<TYPE>::max()

23

Page 24: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Slides Complémentaires

Partie Programmation Impérative

24

Page 25: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Arbres de recherche 73

Inclusion des fichiers en-tête (1/2)// Header type <...> #include <iostream> // Header lib STL (C++) #include < iostream > // Ne marchera PAS

La syntaxe <...>

l Utiliser pour la librairie standard l Abstraction du système de fichier (nom, répertoire) de l'OS lLe préprocesseur se charge :

l De trouver quel fichier correspond au nom (iostream ici) l De remplacer la directive d'inclusion par le contenu du fichier

trouvé (copy & paste)

Page 26: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Arbres de recherche 74

Inclusion des fichiers en-tête (2/2)// Header type "…" #include "myvect.hpp" // Depuis dir. courant #include "math/myvect.hpp" // Chemin vers rep.

math La syntaxe "..."

l Le préprocesseur se charge :

l d'inclure le fichier spécifié à partir du répertoire courant d'appel du compilateur/pré-processeur

l De remplacer la directive d'inclusion par le contenu du fichier trouvé (copy & paste)

Page 27: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Pointeur

l Modèle de mémoire − adresses continues et croissantes

l Opérateur adresse − identique en C et C++ − Syntaxe : &

Adresses Mémoire... ...

000012 ...000008 ….000004 int b = 4000000 int a = 3

Page 28: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Pointeur : un premier exemple#include <iostream> using namespace std; int toto, tutu, titi, tata ; void f( int x ) { cout << "x vaut " << x << endl; } int main(int argc, char** argv) { int i, j, k ; cout << "f() @ " << (long) &f << endl ; cout << "toto @ " << (long) &toto << endl ; cout << "tutu @ " << (long) &tutu << endl ; cout << "titi @ " << (long) &titi << endl ; cout << "tata @ " << (long) &tata << endl ; cout << "i @ " << (long) &i << endl ; cout << "j @ " << (long) &j << endl ; cout << "k @ " << (long) &k << endl ; return 0 ; }

Page 29: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Pointeur : un premier exemple#include <iostream> using namespace std; int toto, tutu, titi, tata ; void f( int x ) { cout << "x vaut " << x << endl; } int main(int argc, char** argv) { int i, j, k ; cout << "f() @ " << (long) &f << endl ; cout << "toto @ " << (long) &toto << endl ; cout << "tutu @ " << (long) &tutu << endl ; cout << "titi @ " << (long) &titi << endl ; cout << "tata @ " << (long) &tata << endl ; cout << "i @ " << (long) &i << endl ; cout << "j @ " << (long) &j << endl ; cout << "k @ " << (long) &k << endl ; return 0 ; }

$ ./hello-ptr.exe

f() @ 4294970484

toto @ 4294971604 tutu @ 4294971608 titi @ 4294971612 tata @ 4294971616

i @ 140734799804652 j @ 140734799804648 k @ 140734799804644

Page 30: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Pointeur : opérateur de déférencement#include <iostream> using namespace std; int toto, tutu, titi, tata ; void f( int x ) { cout << "x vaut " << x << endl; } int main(int argc, char** argv) { int i = 5 ; int* p_i = &i ; cout << " @i = " << &i << endl << " p_i = " << p_i << endl << " @p_i = " << &p_i << endl; *p_i = 100 ; cout << " i = " << i << endl ;

return 0 ; }

Adresses

Mémoire... ...

000012 p_i000008 i000004 ...000000 ...

1:2:3:4:5:6:7:8:9:10:11:12:13:14:

Qu'afficherait ce programme ?

Page 31: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Introduction aux références• Références n'existent qu'en C++ • Forme plus sûre

• Passage par adresse à une fonction • Nécessité pour les classes et les objets

• Attention ! • Syntaxe identique à l'opérateur d'adressage (&)

• Définition Formelle: • Pointeur constant (sûreté) automatiquement

déférencé (facilité d’utilisation, pas de -> ) • Truc: Référence est à gauche du signe "="

31

Page 32: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Exemple d'utilisation de référence1: 2: 3: 4: 5: 6: 7: 8: 9: 10

: 11

: 12

: 13

: 14

: 15

: 16

:

#include <iostream> using namespace std;

void f( int & r ) { cout << "r vaut " << r << endl; cout << "@r vaut " << &r << endl; r = 5; cout << "r vaut " << r << endl;}int main(int argc, char** argv) { int x = 47 ; cout << " x = " << x << endl  << " @x = " << &x << endl; f(x) ; cout << " x = " << x << endl; return 0 ;}

Page 33: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Exemple d'utilisation de référence1: 2: 3: 4: 5: 6: 7: 8: 9: 10

: 11

: 12

: 13

: 14

: 15

: 16

:

#include <iostream> using namespace std;

void f( int & r ) { cout << "r vaut " << r << endl; cout << "@r vaut " << &r << endl; r = 5; cout << "r vaut " << r << endl;}int main(int argc, char** argv) { int x = 47 ; cout << " x = " << x << endl  << " @x = " << &x << endl; f(x) ; cout << " x = " << x << endl; return 0 ;}

Passage par référence de r !!!

Page 34: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Exemple d'utilisation de référence1: 2: 3: 4: 5: 6: 7: 8: 9: 10

: 11

: 12

: 13

: 14

: 15

: 16

:

#include <iostream> using namespace std;

void f( int & r ) { cout << "r vaut " << r << endl; cout << "@r vaut " << &r << endl; r = 5; cout << "r vaut " << r << endl;}int main(int argc, char** argv) { int x = 47 ; cout << " x = " << x << endl  << " @x = " << &x << endl; f(x) ; cout << " x = " << x << endl; return 0 ;}

Passage par référence de r !!!

>$ ./hello-reference.exe x = 47

@x = 0x7fff5fbff8cc r vaut 47

@r vaut 0x7fff5fbff8cc r vaut 5 x = 5

Page 35: Programmation Objet en Langage C++manao.inria.fr/perso/~pac/teaching/cpp/2017/cours_c++_part1.pdf · Design du C++ l Syntaxe épurée du C → Conserver le savoir-faire != compatibilité

Caractéristiques générales du C++

• Paradigmes de programmation : − Impérative − Programmation par objet − Générique (templates) − Meta-templates....

→ Langage « hybride »