Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au C++ Quelques éléments du langage C++ –Déclaration de type et de variable –Constantes –Entrées/sorties simples –Les types bool et string Appel de fonction et pile d’exécution
Conception de Programmes - IUT de Paris - 1ère année Objectifs du cours Qualité logicielle –Correction, rapidité –Extensiblité, réutilisabilité, –... Structuration des programmes –Fonction, fichier, –Module, classe,... Programmation orientée objet Introduction au langage C++
Conception de Programmes - IUT de Paris - 1ère année Organisation du cours Intervenants –Marie-José Caraty (Td et cours) –Jean-Pierre Dupuy (Td) –Denis Poitrenaud (Td et cours) –Mikal Ziane (Td) Contrôle des connaissances –2 Projets 2 * coef. 1 –DSTcoef. 3 Compilateurs –Visual C++ sous Windows NT, –g++ sous Linux.
Conception de Programmes - IUT de Paris - 1ère année Programmation Orientée Objet Objectifs –Initiation à la conception –Correction des programmes –Réutilisation des composants logiciels –Extensibilité des programmes Moyens –Structuration par les données –Encapsulation des données –Abstraction des données –Composition –Héritage, polymorphisme, ramasse-miettes,... Langages –Smalltalk, Eiffel, Ada 95, Java, C++,...
Conception de Programmes - IUT de Paris - 1ère année Le langage C++ Le C++ a été défini par Bjarne Stroustrup dans le début des années 80. Le C++ est normalisé (ANSI) depuis Presque tout le langage C fait partie du C++. Un livre de référence (disponible à la bibliothèque): –Le langage C++, Bjarne Stroustrup, International Thomson Publishing, 3 ème édition, 1999
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments de langage Commentaires a = 2 * b; // commentaire jusqu’au saut le ligne /* commentaire classique */ Déclarations de types enum Reponse {OUI, NON}; typedef char CH20[21]; struct Personne { int age; Reponse marie; CH20nom; }; Personne p;
Conception de Programmes - IUT de Paris - 1ère année Déclarations de variables void main() { int a; a = 5; int b = a; for (int i = 0; i < a; i++) b += 4; } Valeurs par défaut des paramètres void f(int, char = ‘a’, int = 10); f(1, ‘c’, 2); f(2, ‘z’); // f(2, ‘z’, 10); f(3); // f(3, ‘a’, 10);
Conception de Programmes - IUT de Paris - 1ère année Les constantes (mot réservé const ) –Déclaration de constantes syntaxe: const = exemple: const double pi = ; –Indique qu’un identificateur doit garder une valeur constante. pi = ; // Erreur : interdit de changer de valeur –Il est donc interdit d’y affecter une valeur : on peut uniquement l’initialiser et cette initialisation est obligatoire. const double pi; // Erreur : constante non initialisée –C’est le compilateur qui réalise ces vérifications –Avantage par rapport aux macros: le contrôle de type
Conception de Programmes - IUT de Paris - 1ère année Les constantes et les pointeurs –Un pointeur vers une variable ne peut pointer vers une constante const double pi = ; double* p1 = π // Erreur : on peut modifier pi via p1 –Déclaration de pointeur vers une constante const double* p2 = π // OK double e = 2.7; p2 = &e; // OK *p2 = 2.72; // Erreur : p2 pointe sur une constante –Déclaration de pointeur constant double* const p3 = &e; // OK *p3 = 2.72; // OK p3 = π // Erreur : p3 est une constante –Déclaration de pointeur constant vers une constante const double* const p4 = π // OK *p4 = ; // Erreur : p4 pointe sur une constante p4 = π // Erreur : p4 est une constante
Conception de Programmes - IUT de Paris - 1ère année Paramètres constants double puissance (const double, const double); –Le compilateur vérifie que les paramètres ne sont pas modifiés par la fonction. –const est peu utilisé dans ce cas car, de toute façon, la fonction n’a pas d’effet de bord car les paramètres sont passés par valeur. On évite juste certains bogues. void afficher (const Personne*); –Le compilateur vérifie que la personne pointée n’est pas modifiée. –On a la vitesse du passage par adresse et la sécurité du passage par valeur. En prime, on évite certains bogues !
Conception de Programmes - IUT de Paris - 1ère année Entrées/Sorties simples –iostream.h le fichier définissant les classes correspondantes –cin, cout, cerr les flux d’entrée et de sortie standards –>>, << les opérateurs de lecture et d’écriture –endl saut de ligne (‘\n’) #include void main() { int i; char c; cout << "entrez un entier et un caractère" << endl; cin >> i >> c; cout << "i = " << i << "c = " << c << endl; }
Conception de Programmes - IUT de Paris - 1ère année Le type bool –Type de base spécifique au C++ –2 valeurs possibles : true et false –Toute expression conditionnelle (comme i==0 ) renvoie un bool Le type string –Type de la bibliothèque standard du C++ (STL) –Chaînes de caractères à longueur variable –Usage simplifié (par rapport à char* ) –Nombreuses fonctions disponibles
Conception de Programmes - IUT de Paris - 1ère année #include using namespace std; void main() { string s1; // initialisée à "" (chaine vide) cin >> s1; // saisie cout << "s1 = " << s1 << endl; // affichage string s2 = "abcd"; // initialisée à "abcd" cout << "s2 = " << s2 << endl; if (s1 == s2) // comparaison cout << "s1 == s2" << endl; else if (s1 < s2)// comparaison cout << "s1 < s2" << endl; else cout s2" << endl;
Conception de Programmes - IUT de Paris - 1ère année int i; for(i=0; i<s1.length(); i++) // longueur cout << s1[i] << s1[i]; // lecture d'un caractère cout << endl; for(i=0; i<s1.length(); i++) s1[i] = 'a'; // affectation d'un caractère cout << "s1 = " << s1 << endl; s1 = s2; // affectation s1 = s1 + s2; // concaténation cout << "s1 = " << s1 << endl; char s[10]; strcpy(s, s1.c_str()); // conversion en const char* }
Conception de Programmes - IUT de Paris - 1ère année Autres fonctions disponibles empty capacity append assign insert erase replace copy swap find compare... Attention, ces fonctions (comme la fonction length ) doivent être appelées avec une syntaxe particulière: string s = "une chaine"; cout << s.length();
Conception de Programmes - IUT de Paris - 1ère année Les variables et la gestion de la mémoire Au lancement d’un programme –Le code est chargé (code segment) –L’espace mémoire nécessaire pour stocker les variables globales est alloué (data segment) –Les variables globales qui le nécessitent sont initialisées –La fonction main est appelée A chaque appel de fonction –L’espace mémoire nécessaire pour stocker les paramètres et les variables locales est alloué (stack segment) –Les paramètres sont initialisés par recopie des valeurs des paramètres effectifs –Les variables locales qui le nécessitent sont initialisées Au retour de la fonction –L’espace mémoire alloué à l’appel est désalloué
Conception de Programmes - IUT de Paris - 1ère année Pile d'exécution: fonctions sans paramètres #include void g(); void main() { double pi = 3.14; cout << "pi = " << pi << endl; g(); cout << "pi = " << pi << endl; } void g() { double pi = ; cout << "pi = " << pi; } Exécution: pi = pi = pi =
Conception de Programmes - IUT de Paris - 1ère année Evolution de la pile d'exécution L’espace mémoire accessible par les instructions d’une fonction est limité aux paramètres et variables locales de la fonction (et aux variables globales) global main pi: 3.14 entrée dans main global main pi: 3.14 g pi: entrée dans g global main pi: 3.14 après le retour de g
Conception de Programmes - IUT de Paris - 1ère année Pile d'exécution: paramètres valeurs #include void g(int); void main() { float pi = 3.14; int a; cout << "pi = " << pi << endl; cout << "entrez un entier : "; cin >> a; g(a); cout << "pi = " << pi << endl; } void g(int x) { float pi = ; cout << x << " * pi = " << x*pi << endl; } Exécution : pi= entrez un entier : 2 2 * pi= pi =
Conception de Programmes - IUT de Paris - 1ère année Evolution de la pile d'exécution global main pi:3.14 a:? entrée dans main global main pi:3.14 a:2 après la saisie de a global main pi:3.14 a:2 entrée dans g g x:2 pi: global main pi:3.14 a:2 après le retour de g
Conception de Programmes - IUT de Paris - 1ère année Pile d'exécution: paramètres pointeurs #include void saisie (float*); void main() { float pi = 3.14; cout << "pi = " << pi << endl; saisie(&pi); cout << "pi = " << pi << endl; } void saisie(float* px) { cout << "*px = " << *px << endl; cout << "entrez un nombre : "; cin >> *px; cout << "*px = " << *px << endl; } Exécution: pi = *px = entrez un nombre: *px = pi =
Conception de Programmes - IUT de Paris - 1ère année Evolution de la pile d'exécution global main pi:3.14 entrée dans main global main pi:3.14 entrée dans saisie saisie px: global main pi: après la saisie de (*px) saisie px: global main pi: après le retour de saisie px "pointe" sur pi