Cours n° 1 Présentation du langage C++

Slides:



Advertisements
Présentations similaires
Cours n° 1 Introduction à la programmation
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
Introduction au Langage C,C++
A RECUPERER EN ENTRANT Le polycopié de Caml Partie 1
Programmation Orienté Objet en C++
Rappels C.
Développement logiciel sur micro-contrôleurs PIC en C
Cours n° 1 Présentation du langage C++
Formation universitaire à .NET: Introduction à C#
Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Cours n° 8 Conception et Programmation à Objets
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
C.
Programmer en JAVA par Tama
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
FLSI602 Génie Informatique et Réseaux
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Semaine #1 INF155 par Frédérick Henri.
CPI/BTS 2 Programmation Web Introduction au PHP
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Leçon 6 : Structures de données dynamiques IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier.
RESUMES Module II1 SOMMAIRE CYCLE 1 : Saisir – Afficher – Données
© 2007 P. Van Roy. All rights reserved. FSAB1402: Informatique 2 Le Langage Java et les Exceptions Peter Van Roy Département dIngénierie Informatique,
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
Standard Template Library (STL)
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Structures de données IFT-2000
Principes de programmation (suite)
Principes de programmation
Un langage de programmation hybride
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
Chapitre 9 Les sous-programmes.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Standard Template Library
CSI 1502 Principes fondamentaux de conception de logiciels
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II.
C++ : variables Déclaration de variables
Tableaux Introduction aux tableaux à une dimension. Déclaration, stockage, initialisation et accès en lecture ou en écriture aux composantes d’un tableau.
Les Opérateurs Ils régissent toutes les opérations ou transformations sur les valeurs des variables. Opérateur d'affectation Opérateurs arithmétiques Opérateurs.
Structures alternative et répétitive
Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 3 Polymorphisme I.
L’essentiel du langage C
2.1 - Historique Chapitre 2 : Introduction au langage C++
La notion de type revisitée en POO
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Un survol du language C.
Module I3 algorithmique et programmation
Cours n° 3 Traitements en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
CSI2520 Un langage de programmation impérative et concurrente.
Classe 1 CSI2572 Autres modificateurs de déclaration de variables: & volatile & register & static & auto & extern & const volatile Indique au compilateur.
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Initiation au JavaScript
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Les bases de l’algorithmique
PRO-1027 Programmation Scientifique en C
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Philippe Gandy – 10 novembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Introduction au langage C
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Informatique 2A Langage C 1 ère séance.
Transcription de la présentation:

Cours n° 1 Présentation du langage C++

Plan du cours Présentation du langage C++ Les entrées-sorties Polymorphisme I (ad-hoc, inclusion) Polymorphisme II (patrons de classe et foncteurs) Structures de données abstraites (structures linéaires et graphes) Standard Template Library I (conteneurs séquentiels et itérateurs) Algorithmique du texte Standard Template Library II (relation d’ordre et conteneurs associatifs) Standard Template Library III (algorithmes et string) Introduction à la librairie Boost (Regex, Graph) Interopérabilité logicielle (entre C++, Perl, Python et Java) Heuristiques de conception

Sommaire 1. Déclarations de variables et variables simples Structures de contrôle 3. Flots d’entrée sortie 4. Fonctions et passage de paramètres Classes et fonctions membre

1980 Développement dans les laboratoires « AT&T Bell » INTRODUCTION Historique et propriétés 1980 Développement dans les laboratoires « AT&T Bell » 1983 Premier compilateur C++ 1.0 1989 C++ 2.0 (héritage multiple) 1993 C++ 3.0 (template) 1994 Bibliothèque de patrons génériques (STL) 1.0 1998 Normalisation de C++ 4.0 (ISO/IEC 14882-1998) 2003 Normalisation de STL (ISO/IEC 14882-2003) 2005 Technical Report on C++ Library Extensions (Boost) 2011 C++11 ISO/IEC 14882-2011 Langage et bibliothèque 2014 C++11 ISO/IEC 14882-2014 (E) Révision mineure Langage compilé, orienté objet et à typage fort Bibliothèque de composants (réutilisation) Vérification des types à la compilation (diminution des erreurs syntaxique) Généricité des algorithmes (optimalité) Grande importance dans l’industrie du logiciel

Efficacité (rapidité de traitement) INTRODUCTION Comparaison avec les langages Java et Perl Efficacité (rapidité de traitement) Forte en langage C++ (proche de celle obtenue en langage assembleur), Rapport 1 à 10 avec le langage Java, Rapport 1 à 100 avec le langage Perl Abstraction (Masquage des couches physiques d’exécution) Possible en langage C++ (déconseillé en règle générale), Impossible en langage Java et Perl Expressivité (rapidité de transcription de connaissances métiers) Forte en langage C++ (algorithmique et structures de données) Forte en langage Java (pour les interfaces graphiques), Forte en langage Perl (pour les expressions régulières)

Le langage La programmation Sites Bibliographie INTRODUCTION Bibliographie Le langage Bjarne Stroustrup, «Le langage C++», Campus Press Stanley Lippman, Josée Lajoie, «L’essentiel du C++», Vuibert Informatique La programmation Claude Delannoy, «Programmer en langage C++», Eyrolles Herb Sutter, «Mieux programmer en C++», Eyrolles Jean-Bernard Boichat, «Apprendre Java et C++ en parallèle», Eyrolles Sites www.cppreference.com/ cowww.epfl.ch/infmaph/doc/coursCpp/book1.html www.fredosaurus.com/notes-cpp/

C++ est un sur-ensemble de C Avantages INTRODUCTION Différences entre le langage C++ et le langage C C++ est un sur-ensemble de C Compatibilité ascendante (quelques exceptions depuis C++ 3.0) Avantages Maintenance d’applications en C Interfaces avec des bibliothèques en C Inconvénients (mixage code C/code C++) Diminution drastique de la qualité de programmation Structures de données confuses (utilisation des pointeurs) Effets de bord imprévisibles (faible protection des données) … Solution Restriction aux spécificités du langage C++ par rapport au langage C Encapsulation des parties de code en langage C

char (caractère sur 8 bits) short (entier sur 16 bits, -32768..32767) 1. DECLARATIONS DE VARIABLES ET VARIABLES SIMPLES Types prédéfinis bool (true, false) char (caractère sur 8 bits) short (entier sur 16 bits, -32768..32767) long (entier sur 32 bits, -21474836478..21474836477) int (entier sur 16 ou 32 bits) float (réel en simple précision) double (réel en double précision)

type identificateur[=valeur][, identificateur[=valeur][...]]; 1. DECLARATIONS DE VARIABLES ET VARIABLES SIMPLES Définition et portée d’une variable simple type identificateur[=valeur][, identificateur[=valeur][...]]; Initialisation automatique à 0 int i=0, j=0; // Déclaration et initialisation de deux entiers à 0 double somme; // Déclaration d’une variable réelle Structure d’un programme Suite de blocs : instruction; ou { suite d’instructions } Un bloc peut contenir d’autres blocs Portée d’une variable Espace de visibilité de la variable Partie du bloc suivant la déclaration { int i; { int j } i = i+j } // interdit { int i; { int j; i = i+ j;} } // autorisé Pas de définition de variables globales

Modificateurs de la représentation des entiers 1. DECLARATIONS DE VARIABLES ET VARIABLES SIMPLES Modificateurs de type Modificateurs de la représentation des entiers signed (par défaut) unsigned ex : unsigned char (0..255) Modificateurs de la durée de vie (présence en mémoire) auto (création à la définition, destruction à la fin du bloc) static (création au lancement du programme, destruction à la fin du programme) Modificateurs des règles de modification const (modifications interdites après l’initialisation) volatile (modifications autorisées par des instructions extérieures au programme)

Variable contenant une adresse mémoire 1. DECLARATIONS DE VARIABLES ET VARIABLES SIMPLES Notion de pointeur et adresse-mémoire d’une variable Variable contenant une adresse mémoire Début d’une zone mémoire Adresse mémoire d’une variable Structures de données avancées (arborescence) Opérateurs & Adresse mémoire d’une variable * Valeur de la variable pointée sizeof Taille mémoire d’une variable Déclaration byte age; float total; char c; byte* page = &age; float* ptotal = &total; char* pc = &c; char a = *pc; Adresses Mémoire . . . . . . . . age @000A1267 total @000A1268 @000A1269 @000A126A @000A126B @000A126C c @000A126D @000A126E @000A126F @000A1270 @000A1271 . . . . . . . .

type identificateur[taille]([taille](...)); 1. DECLARATIONS DE VARIABLES ET VARIABLES SIMPLES Tableaux statiques et allocation dynamique type identificateur[taille]([taille](...)); float vect[100] // déclaration d’un tableau de 100 réels bool mat[100][50] // déclaration d’une matrice 100X50 booléens Réservation mémoire au moment de la compilation Pas de modification à l’exécution Identificateur = new type [nbelem]; int i; float* vect = new float[i] // déclaration d’un vecteur de réel de taille i // vect est une variable du type référence de float Réservation mémoire au moment de l’exécution Adaptation aux données Variables statiques

Opérateurs de comparaison 2. STRUCTURES DE CONTROLE Expressions logiques (Evaluation à true ou false) Opérateurs de comparaison == égalité != inégalité < infériorité > supériorité <= infériorité ou égalité >= supériorité ou égalité Opérateurs logiques && et logique || ou logique ! négation logique Exemple : ( (a < b && a > 0) || (a > b && a == 0) )

if (ExprL) bloc1 [ else bloc2 ] 2. STRUCTURES DE CONTROLE Types de structure de contrôle (1) if (ExprL) bloc1 [ else bloc2 ] Exécution conditionnelle du bloc suivant ou choix entre deux blocs If (a < b && a > 0) {i = 0;} else {j = 0;} for (instruction1; Exprl; instruction2) blocB; Exécution de l’instruction 1 (initialisation) Test (évaluation de Expr) : sortie du for si false Exécution du blocB Exécution de l’instruction2 (itération) saut à Test for (int i = 0; i < j; i = i+1) k = i;

do blocB while (ExprL); 2. STRUCTURES DE CONTROLE Types de structure de contrôle (2) while (ExprL) blocB Exécution en boucle de blocB ex: while (a < 10) {i = i + a} do blocB while (ExprL); Exécution en boucle de blocB au moins une fois ex : do {i = i + a} while (a < 10) switch (valeur) { case constante1: bloc1 break; .. default: blocd break; } Branchement conditionnel

Flot de sortie prédéfini cout 3. FLOTS D’ENTREE-SORTIE Affichage Ecran – Lecture Clavier Flot de sortie prédéfini cout Affichage de variables Ex : cout << var Affichage de suite de caractères Ex : cout << "La valeur de" Affichage de caractère de contrôle Ex : cout << endl (passage à la ligne) cout << "la valeur de var est égale à " << var << endl Flot d’entrée prédéfini cin Lecture de variables Ex : int i; float f; cin >> i >> f Déclaration des flots standard Ajout en début de programme #include <iostream> using namespace std;

typeR identificateurF(paramF) blocF 4. FONCTIONS ET PASSAGE DE PARAMETRES Définition d’une fonction typeR identificateurF(paramF) blocF TypeR est le type de la valeur renvoyée par la fonction (résultat) identificateurF est le nom de la fonction paramF définit les paramètres de la fonction BlocF correspondant aux déclarations, aux structures de contrôle et aux instructions type1 var1 [= val1] [, type2 var2 [= val2] [...]] Définition des paramètres d’une fonction, Type1 est le type de la variable val1 initialisée par défaut à la valeur val1 int main(int argc, char *argv[]) Fonction point d’entrée d’un programme

Définition d’une fonction – « exo1.h » (entête) 4. FONCTIONS ET PASSAGE DE PARAMETRES Définition d’une fonction – « exo1.h » (entête) // déclaration des flots standard #include <iostream> using namespace std; // prototype de la fonction prod // deuxième paramètre par défaut int prod(int n, int i = 1);

Définition d’une fonction – « exo1.cpp » (code) 4. FONCTIONS ET PASSAGE DE PARAMETRES Définition d’une fonction – « exo1.cpp » (code)  #include "exo1.h" // point d’entrée de l’exécutable int main (int argc, char* argv[]) { int n; cin >> n;// lecture de la variable n cout << "prod(" << n << ")=" << prod(n) << endl; cout << prod(n, 0) << endl; return(0); } int prod(int n, int i) { int res = 1; while (i <= n) {res = res * i; i++;} return(res); }

Possibilité d’avoir plusieurs fonctions de même nom 4. FONCTIONS ET PASSAGE DE PARAMETRES Surcharge de fonctions Possibilité d’avoir plusieurs fonctions de même nom Choix du compilateur en fonction des paramètres d’appel (nombre et type) Exemple : fichier d’entête exo2.h // déclaration des flots standard #include <iostream> using namespace std; // minimum de 2 entiers int min(int x, int y); // minimum de 3 entiers int min(int x, int y, int z);

Surcharge de fonctions – « exo2.cpp » 4. FONCTIONS ET PASSAGE DE PARAMETRES Surcharge de fonctions – « exo2.cpp » #include "exo2.h" // minimum de 2 entiers int min(int x, int y) { if (x < y) return x; else return y; } // minimum de 3 entiers int min(int x, int y, int z) { if (x < y) { if (x < z) return x; else return z;} else {if (y < z) return y; else return z; } } int main (int argc, char* argv[]) { int i , j, k; cin >> i >> j >> k; cout << min(i,j) << min (i,j,k); return 0; }

Passage par valeur Passage par référence 4. FONCTIONS ET PASSAGE DE PARAMETRES Passage par valeur ou par référence Passage par valeur Mode de passage par défaut Recopie de la variable (coût en mémoire et en temps calcul) Elimination des effets de bord Passage par référence Ajout du symbole & avant le nom de la variable Utilisation de la même variable dans la programme appelant et la fonction appelée Elimination des effets de bord par l’utilisation du modificateur const

Passage par valeur ou par référence – « exo3.cpp » 4. FONCTIONS ET PASSAGE DE PARAMETRES Passage par valeur ou par référence – « exo3.cpp » #include "exo3.h" int main (int argc, char* argv[]) { int n; cin >> n; cout << "la " << fact(n) << endl; return(0);} int fact(const int& n) { // protection de la variable n int res = 1, i; for (i = 1;i <= n;i++) res = res * i; return(res); }

Encapsulation des données 5. CLASSES ET FONCTIONS MEMBRES Introduction Encapsulation des données Réduction des possibilités d’accès aux variables Contrôle de l’accès aux variables Association de variables de même comportement Définition d’ensemble de variables Encapsulation des traitements Association de chaque fonction à un des ensembles de variables Buts Minimisation des erreurs de programmation Réutilisation dans d’autres programmes Aide à la conception

Définition d’une classe 5. CLASSES ET FONCTIONS MEMBRES Définition d’une classe class Ident { private : // variables et fonctions privées (visibilité réduite aux fonctions de la classe) type var; // attribut de la classe typeR identificateurF(paramF); // prototypes public : // fonctions publiques typeR identificateurF(paramF); // prototypes }; Ident::typeR identificateurF(paramF) blocF // définition des fonctions

Fonctions accesseurs Fonctions canoniques Fonctions membres usuelles 5. CLASSES ET FONCTIONS MEMBRES Fonctions membres usuelles Fonctions accesseurs Lecture et écriture des attributs de la classe (contrôle d’accès) Fonctions canoniques Ident() Constructeur de classe Ident (const Ident &) Constructeur de recopie ~ Ident () Destructeur de classe Ident & operator = (const Ident &) Affectation de classe

Opérateurs new et delete 5. CLASSES ET FONCTIONS MEMBRES Gestion dynamique de la mémoire Avantages Adaptation dynamique aux données Inconvénients Proches des couches physiques d’exécution Pas de contrôle à l’exécution (erreur d’accès mémoire) Fragmentation de la mémoire (pas de garbage collector) Opérateurs new et delete Identificateur = new type [ [nbelem] ] Création de l’objet (ou d’un tableau d’objets) de classe « type » et renvoi d’une référence sur cet objet delete Identificateur Destructeur de l’objet (ou du tableau d’objets)

Définition de la classe Etudiant - « Etudiant.h » 5. CLASSES ET FONCTIONS MEMBRES Définition de la classe Etudiant - « Etudiant.h » class Etudiant { private : int m_NombreNote;// nombre de notes const static int m_NombreNoteDef = 10; // nombre de notes par défaut int* m_Tnote;// Tableau dynamique des notes public : Etudiant(); // constructeur vide (m_NombreNoteDef notes) Etudiant(int n); // constructeur non vide ~Etudiant(); // destructeur void putnote (int e, int n); // ajouter une note int getnote(int e) const; // lire une note avec protection };

Définition des méthodes (1) - « Etudiant.cpp » 5. CLASSES ET FONCTIONS MEMBRES Définition des méthodes (1) - « Etudiant.cpp » #include "Etudiant.h" // constructeur vide (m_NombreNoteDef notes) Etudiant::Etudiant () { m_NombreNote = m_NombreNoteDef; m_Tnote = new int [m_NombreNote]; } // constructeur non vide Etudiant::Etudiant (int n) { m_NombreNote = n; // destructeur Etudiant::~Etudiant () { delete m_Tnote; }

Définition des méthodes (2) - « Etudiant.cpp » 5. CLASSES ET FONCTIONS MEMBRES Définition des méthodes (2) - « Etudiant.cpp » // ajouter une note void Etudiant::putnote (int e, int n) { if (e < m_NombreNote) m_Tnote[e] = n; } // lire une note avec protection int Etudiant::getnote (int e) const { if (e >= m_NombreNote) return -1; else return m_Tnote[e];

Utilisation de la classe Etudiant - « testEtudiant.cpp » 5. CLASSES ET FONCTIONS MEMBRES Utilisation de la classe Etudiant  - « testEtudiant.cpp » #include "testEtudiant.h" #include "Etudiant.h" int main() { // construction de deux objets de la classe etudiant etudiant Pascal, Pierre (15); // appel par l'objet Pascal à la méthode putnote Pascal.putnote(3, 15); // appel par l'objet Pascal à la méthode getnote cout << Pascal.getnote(3); return 0; }

Objectifs Exemples Site Normes de programmation CONCLUSIONS Normes de programmation Objectifs Elimination d’erreurs classiques de programmation Maintenance possible par plusieurs programmeurs Amélioration de la portabilité Facilité de lecture et de compréhension Cohérence du style de programmation Exemples Chaque fichier de code source doit contenir un entête décrivant son contenu. Les sections public, protected et private d'une classe devraient apparaître dans cet ordre. Une fonction membre d'une classe qui n'altère en rien l'état de l'objet doit être déclarée const. Une fonction ne doit jamais retourner une référence ou un pointeur sur une variable locale. Site atlas-computing.web.cern.ch/atlascomputing/projects/qa/archives/AtlasCCS1_1_2.pdf