180 likes | 338 Views
Conception de Programmes. Objectifs et organisation du cours Introduction à la P.O.O. et au C++ Un exemple de programme C++ Compilation et édition de liens Quelques éléments du langage C++. Objectifs du cours. Programmation orientée objet Qualité logicielle Structuration des programmes
E N D
Conception de Programmes • Objectifs et organisation du cours • Introduction à la P.O.O. et au C++ • Un exemple de programme C++ • Compilation et édition de liens • Quelques éléments du langage C++
Objectifs du cours • Programmation orientée objet • Qualité logicielle • Structuration des programmes • Introduction au langage C++ • Pratique de l’algorithmique
Organisation du cours • Intervenants • Yann Chevaleyre • Jean-Pierre Dupuy • Kais Klai • Denis Poitrenaud • David Serrat • Contrôle des connaissances • 1 projet tutoré (à réaliser par binôme), • 1 DST, • 1 mini-projet sous la forme d’un TD à rendre. • Matériel et logiciel • Visual C++ sous WNT, • g++ sous Linux.
Programmation Orientée Objet • Objectifs • Correction des programmes • Réutilisation des composants logiciels • Adaptabilité 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, C++, ...
Structuration par les données • Principe • Associer aux types de données, les fonctions permettant de manipuler celles-ci. • Remarque • C’est déjà le cas en C pour certains types de bases (les opérateurs arithmétiques, les fonctions de traitement des chaînes de caractères, etc …).
Appel(avec éventuellement des paramètres) type1 data1 data2 fonction1 fonction2 ... fonctionn Retour(avec éventuellement un résultat) datam Encapsulation et abstraction des données • L’accès aux données est réalisé par l’intermédiaire des fonctions • On fait abstraction de l’implantation effective des données
type1 typek data1 data1 fonction1 ... fonctionn fonction1 ... fonctionn fct1fct2 ... fctn datam datam Composition
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 1989. • 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, 2nde édition, 1996
Un premier programme C++ Définition d’un type de données et des fonctions associées class Date { public: void Init(int j, int m, int a=1999); void Inc(int = 1); int Jour() const; int Mois() const; int Annee() const; private: int jo, mo, an; };
Utilisation #include <iostream.h> void main(void) { Date d; d.Init(8, 3); d.Inc(); cout << d.Jour() << "/" << d.Mois << endl; d.Init(1, 1, 2000); cout << d.Jour() << "/" << d.Mois << endl; }
Date Init(int, int, int) Inc(int) Jour () Mois() Annee() jo mo an La classe Date
Définitions des fonctions void Date::Init(int j, int m, int a) { jo = j; mo = m; an = a; } int Date::Jour() const { return jo; // rend le jour de la date } etc...
Compilation et Edition de liens • Les fichiers sources ont l’extension .cpp • Les fichiers d’entête ont l’extension .hpp • Sous WNT: • Créer un projet de type « Console Application » • Indiquer les fichiers sources constituant le projet (par insertion ou édition) • Utiliser l’option « Build » du menu. • Sous Linux • Utiliser la commande « g++ »
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; CH20 nom; }; Personne p;
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);
Entrées/Sorties simples • iostream.h le fichier définissant les classes correspondantes • cin, cout les flux d’entrée et de sortie standards • >>, << les opérateurs de lecture et d’écriture • endl saut de ligne (‘\n’) #include <iostream.h> void main() { int i; char c; cout << "entrez un entier et un caractère" << endl; cin >> i >> c; cout << "i = " << i << "c = " << c << endl; }
Le mot réservé const • Indique qu’un identificateur doit garder une valeur constante. • Il est donc interdit d’y affecter une valeur : on peut uniquement l’initialiser. • Cette initialisation est obligatoire. const double p; // Erreur : constante non initialisée const double pi = 3.1416; // OK pi = 3.14159; // Erreur : interdit de changer de valeur double *p1 = π // Erreur : on peut modifier pi via p1 const double *p2 = π // OK double e = 2.7; p2 = &e; // OK *p2 = 2.72; // Erreur : p2 pointe sur une constante const double * const p3 = p2; // OK p3 = π // Erreur : interdit de changer de valeur
Paramètres const 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 la fonction n’a de toute façon pas d’effet de bord car on a des paramètres 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 !