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
Formation universitaire à .NET: Introduction à C#
Cours n° 2 Les entrées-sorties Biliothèque C++ (iostream) –
Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
GEF 243B Programmation informatique appliquée Flot de contrôle et énoncés de sélection §
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
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
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.
Analyse lexicale Généralités Expressions rationnelles Automates finis
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.
Introduction à la programmation (Java)
Langage Oriente Objet Cours 2.
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Principes de programmation (suite)
Principes de programmation
Un langage de programmation hybride
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.
Types de données abstrait et mécanismes d'encapsulation
Partie II Sémantique.
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° 9 Interopérabilité logicielle I Entre C++
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
3 Les instructions. Cours 32 Plan du cours 3 Instruction Bloc Portée L’alternative Affectations =, +=, *=… Comment comparer –Comparer des réels –Comparer.
SIF-1053 Architecture des ordinateurs
ALGORITHMIQUE ET PROGRAMMATION C
Un survol du language C.
Cours n° 1 Présentation du langage C++
Cours n° 3 Traitements en Java
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
1 PHP 5 Notions fondamentales (niveau 1 – cours #2) Formation continue – Cégep de Sainte-Foy.
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
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
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
Transcription de la présentation:

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

Plan du cours Présentation du langage C++ Flots et gestion de fichiers Généricité Structure de données abstraites La librairie STL 1 La librairie STL 2 De C++ à Perl De Java à C++ Classes abstraites et interface Conteneurs séquentiels et associatifs Gestion de documents textuels Document XML sous Swing

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 1997 STL 3.0 1998 Normalisation de C++ 4.0 (ISO/IEC 14882-1998) 2003 Normalisation de STL (ISO/IEC 14882-2003) 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é) Très important dans l’industrie du logiciel mais difficile

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) Faible en langage C++, 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)

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 (1) CONCLUSIONS Normes de programmation (1) 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

NI1 Ne pas utiliser des identificateurs très semblables. (recommandée) CONCLUSIONS Normes de programmation (2) – 110 règles NF1 Le nom d’un fichier d’entête est construit à partir du nom de la classe dont il contient la définition auquel on ajoute le suffixe « .h ». (obligatoire) NF2 Le nom d’un fichier source est construit à partir du nom de la classe dont il contient le code source auquel on ajoute le suffixe « .cpp ». (obligatoire) NM1 Utiliser des mots prononçables pour construire les noms des différentes entités (variables, fonctions, classes, …) sauf pour les variables de boucle et les indices de tableau. (recommandée) NI1 Ne pas utiliser des identificateurs très semblables. (recommandée) NI2 Ne pas prendre comme premier lettre d’un identificateur le caractère « _ ». (obligatoire) NC1 Utiliser le préfixe « m_ » pour les attributs privés (obligatoire) NC2 Utiliser le préfixe « s_ » pour les attributs statiques (recommandée) …..