Programmation Objet en Langage C++ - Inria
←
→
Transcription du contenu de la page
Si votre navigateur ne rend pas la page correctement, lisez s'il vous plaît le contenu de la page ci-dessous
Programmation Objet en Langage C++
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 du Cours et des TP http://manao.inria.fr/perso/~pac/cpp.php • Notes de Cours • Sujets des TP • Sujets des Projets • Bibliographie 3
É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
Rappel sur le plagiat Copier-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
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
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
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
Historique C, C++, Java et C#, Python C+ 1979 1983 1985 1989 1998 2003 2011 + Travaux 1st 2nd ISO ISO ISO pré Releas Releas C+ C+ C++11 C++ e e +98 +03 Stroustrup @Bell Labs Simula GCC Python Java C# 1967 1987 1994 1995 2002 Noyau Unix C K&R C89 Travaux pré. Ritchie & C-Book Thomson C99 C11 C @Bell Labs Travaux de l'ANSI 1963 1973 1978 1983 1989/90 1999 2011
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
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
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
Caractéristiques générales du C++ • Langage compilé • Syntaxe ala C • Transition facilitée des développeurs • Typage statique (à la compilation) • C++ • 6= 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
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
Caractéristiques générales du C++ • Paradigmes de programmation : • Impérative • Programmation par objet • Générique (templates) • Meta-templates.... → Langage « hybride » 15
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
Démo 1 sur le C++ impératif 17
Premier exemple en C++ 1: #include 3: int main(int argc, char** argv ) { 4: std::cout
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
Types primitifs • Norme C++ • Ne spécifie pas le nombre de bits • Utilisation de → sizeof() • Valeurs minimales et maximales que le type • #include • #include • Exemple • std::numeric_limits::min() • 4 types de base • char, int, float, double 20
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 #include 21
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
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::min() • std::numeric_limits::max() 23
Slides Complémentaires Partie Programmation Impérative 24
Inclusion des fichiers en-tête (1/2) // Header type #include // 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 Le préprocesseur se charge : l 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) Arbres de recherche 73
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) Arbres de recherche 74
Pointeur l Modèle de mémoire Adresses Mémoire ... ... − adresses continues et croissantes 000012 ... 000008 …. l Opérateur adresse 000004 int b = 4 000000 int a = 3 − identique en C et C++ − Syntaxe : &
Pointeur : un premier exemple #include using namespace std; int toto, tutu, titi, tata ; void f( int x ) { cout
Pointeur : un premier exemple #include using namespace std; int toto, tutu, titi, tata ; void f( int x ) { cout
Pointeur : opérateur de déférencement 1: #include using namespace std; 2: int toto, tutu, titi, tata ; 3: void f( int x ) { cout
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
Exemple d'utilisation de référence 1: #include 2: using namespace std; 3: 4: 5: void f( int & r ) { 6: cout
Exemple d'utilisation de référence 1: #include 2: using namespace std; 3: 4: 5: void f( int & r ) { Passage par référence de r !!! 6: cout
Exemple d'utilisation de référence 1: #include 2: using namespace std; 3: 4: 5: void f( int & r ) { Passage par référence de r !!! 6: cout
Caractéristiques générales du C++ • Paradigmes de programmation : − Impérative − Programmation par objet − Générique (templates) − Meta-templates.... → Langage « hybride »
Vous pouvez aussi lire