Masters IIGLI et IGLII – Programmation générique et conception objet – 2005-2006 – Claude Montacié 1 Cours n° 4 Polymorphisme II.

Slides:



Advertisements
Présentations similaires
Cours n° 4 Objets, classes, interfaces et héritage
Advertisements

Les fonctions A quoi ça sert ?
Erratum C Surcharge For(int x=0; … 2.
Cours n° 1 Présentation du langage 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.
Introduction au langage C++
C++ 6ème cours Patrick Reuter maître de conférences
Spécialisation/généralisation Héritage Polymorphisme.
Cours n° 8 Conception et Programmation à Objets
C.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Bibliothèque standard du C++
C++ : classes Introduction aux Langages Orientés Objets
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)
Structures de données IFT-2000
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT-2000 Abder Alikacem La librairie STL du C++ Département dinformatique et de génie logiciel Édition Septembre 2009.
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 7 : Classes et fonctions paramétrables Département.
Conteneurs STL.
Introduction au paradigme orienté-objet (suite)
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é.
Design Patterns Factory Method – Pattern de construction [DANT] Génie Logiciel 1.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
8PRO107 Éléments de programmation
Chapitre 9 Les sous-programmes.
Types de données abstrait et mécanismes d'encapsulation
Standard Template Library
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Une introduction à Java
Structures de données IFT-2000
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° 10 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.
Faculté Polytechnique de Mons
2.1 - Historique Chapitre 2 : Introduction au langage C++
Programmer en langage c
Programmation Système et Réseau (sous Linux)
La notion de type revisitée en POO
Argc et argv Utilisation des paramètres de la ligne de commande.
Concepts intermédiaires de VHDL
Cours n° 1 Présentation du langage C++
Introduction à la programmation objet en C++
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Les surcharges d'opérateurs
IFT 785 Approches Orientée Objets Plan de cours. Information générale Professeur : – Sylvain Giroux –
CSI2520 Un langage de programmation impérative et concurrente.
Héritage H. Batatia. plan Notion (que signifie l’héritage) Ecriture en java Héritage multiple (interdit) Instanciation (partie propre et partie héritée)
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Les classes Introduction aux Langages Orientés Objets
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Conception de Programmes - IUT de Paris - 1ère année Quelques éléments du langage C++ Les références La surcharge de fonctions Les fonctions «
Structures de données IFT-2000 Abder Alikacem Laboratoire #1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Exception Handling "Unfortunately, it's almost accepted practice to ignore error conditions, as if we're in a state of denial about errors." Bruce Eckel.
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
BlueJ_III 1 Java, les objets : tout de suite ! Interaction entre objets Notes de cours associées au chapitre 3 tutorial BlueJ
Introduction à l'orienté objet. Définition Le terme orienté objet siginifie que l'on organise le logiciel comme une collection d'objets organisée en graphe.
Transcription de la présentation:

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 1 Cours n° 4 Polymorphisme II

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 2 1.Patron de classes et de fonctions (template) 1.1 Patron de fonction 1.2 Patron de classes 2.Abstraction de fonctions (foncteur) Bibliographie Andrei Alexander, Modern C++ Design: Generic Programming and Design Patterns Applied, Springer-Verlag London, 2001 James O. Coplien, James Rigney, Multi-Paradigm Design for C++, Addison-Wesley Professional, 1998 Sommaire

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié 3 1. PATRON DE FONCTIONS ET DE CLASSES (TEMPLATE) Principes Méthodes de conception et de programmation Définition dun « concept » -> Utilisation du « concept » définition dune fonction + paramètres - > Appel de la fonction, définition dune classe + nom de variable -> Instanciation de la classe Mécanisme de généricité Niveau supérieur dabstraction Définition dun « concept de concept » -> Définition dun concept Définition dun patron de fonctions + {type} -> Définition dune fonction Définition dun patron de classes + {type} -> Définition dune classe Utilisation de bibliothèques de patrons optimisés Standard Template Library (STL), Matrix Template Library (MTL), Graph Template Library (GTL), Iterative Template Library (ITL), Histogram Template Library (HTL), Bioinformatics Template Library (BTL), Geostatistics Template Library, …

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE FONCTIONS Définition Famille de fonctions paramétrée par un ou plusieurs types template // déclaration du nom du type abstrait [avec un type par défaut] typeTR identificateurF(paramTF) {// déclaration de la fonction blocTF }// code de la fonction Exemple : template T triple {return 3*T}; Déclaration dans un fichier de prototypes (.h) Pas de compilation sans choix du ou des types (instanciation) Instanciation implicite Pas de déclaration spécifique float i = triple(1.5); Choix par le compilateur du type choisi Instanciation explicite Déclaration à lutilisation du ou des types choisis float i = triple (1.5); Instanciation par défaut int i = triple<>(2);

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE FONCTIONS Minimum de 2 et 3 items (1/2) /** Calcul du minimum de 2 items 2 items minimum */ template T Minimum(T x, T y){ return x < y ? x : y; } /** Calcul du minimum de 3 items 3 items minimum */ template T Minimum(T x, T y, T z){ return Minimum(Minimum(x, y), z); } Minimum.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE FONCTIONS Minimum de 2 et 3 items (2/2) #include "Minimum.h" #include using namespace std; int main (int argc, char *argv[]) { float x, y; cout > x >> y; cout << Minimum(x, y) << endl; int i, j; cout > i >> j; cout (i, j) << endl; float z; cout > x >> y >> z; cout (x, y, z) << endl; int k; cout > i >> j >> k; cout (i, j, k) << endl; return 0; } testMinimum.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Définition Famille de classes paramétrée par un ou plusieurs types template // déclaration des noms du type abstrait [avec un type par défaut] class identificateurC {// déclaration de la classe }; Exemple : template class Point { private: T abscisse, ordonnée; public: Point(T a, T b); };

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Patrons de fonctions membres Déclaration dans le fichier contenant le patron de classes Pas de déclaration de type par défaut type par défaut du patron de classes Exemple : template Point::Point(T a, T b) { abscisse = a; ordonnée = b } Pas de compilation sans choix du ou des types (instanciation) Instanciation explicite Déclaration à lutilisation du ou des types choisis Point p(1, 2); Instanciation par défaut Point<> p(1.5, 2.1);

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Patron de classes dun tableau dynamique Patron de classes dun tableau dynamique #include // déclaration des flots standard #include using namespace std; // classe générique de tableau dynamique template class TableauDyn { private : unsigned int capacite; // capacité du tableau tab unsigned int pasExtension; // pas d'extension du tableau T* tab; // tableau alloué en mémoire dynamique void agrandir(); public : TableauDyn(unsigned int c, int p); ~TableauDyn(); T lire(unsigned int i) const; void ecrire(unsigned int i, T it); int getCapacite(); }; TableauDyn.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Patrons de méthodes dun tableau dynamique (1/3) Patrons de méthodes dun tableau dynamique (1/3) constructeur du tableau d'items dynamique * caractérisé par un pas d'extension (p) * Allocation en mémoire dynamique du tableau d'items * de capacité (c) caractérisé par un pas d'extension (p) [in] c : capacité du tableau [in] p : capacité du tableau */ template TableauDyn ::TableauDyn(unsigned int c, int p) { assert((c>=0) && (p>0)); capacite = c; pasExtension = p; // arrêt du programme en cas d'erreur d'allocation tab = new T[capacite]; } destructeur du tableau d'items en mémoire dynamique */ template TableauDyn ::~TableauDyn() { delete [] tab; tab = NULL; } TableauDyn.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Patrons de méthodes dun tableau dynamique (2/3) Patrons de méthodes dun tableau dynamique (2/3) Lecture d'un item d'un tableau d'items t : le tableau d'items i : l'indice de l'item dans le tableau l'item au poste i i < nbItems */ template T TableauDyn ::lire(unsigned int i) const { assert(i < capacite); return tab[i]; } Ecrire un item dans un tableau d'items i : l'indice où écrire l'item item : l'item à écrire i <= capacite */ template void TableauDyn ::ecrire(unsigned int i, T it) { assert(i>=0); while (i >= capacite) agrandir(); tab[i] = it; } TableauDyn.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Patrons de méthodes dun tableau dynamique (3/3) Patrons de méthodes dun tableau dynamique (3/3) /** Agrandir un tableau d'items de son pas d'extension */ template void TableauDyn ::agrandir() { /* Allocation d'un tableau de (capacite + pasExtension) items */ T* newT = new T[capacite + pasExtension]; /* Recopie des (capacite) éléments du tableau dans le nouveau tableau */ for (unsigned int i = 0; i < capacite; ++i) newT[i] = tab[i]; /* Désallocation de l'ancien tableau d'items */ delete [] tab; /* Mise à jour de tab et de la capacité du nouveau tableau * résultant de l'extension de capacité */ tab = newT; capacite += pasExtension; } TableauDyn.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Test du tableau dynamique générique Test du tableau dynamique générique #include "TableauDyn.h" #include "../Cours 01/Etudiant.h" #include "Complexe.h" int main() { TableauDyn t1(0,1); Etudiant Pascal; Pascal.putnote(3, 15); t1.ecrire(0, Pascal); Etudiant e = t1.lire(0); cout << e.getnote(3) << endl; TableauDyn t2(1,2); Complexe c1(-0.8,0.7), c2; c2 = c1 * c1; t2.ecrire(1, c2); c1 = t2.lire(1); cout << c1 << endl; return 0;} A la compilation : instanciation du patron de classes A lexécution : instanciation de la classe testTableauDyn.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Héritage (1/2) Classe dérivée dun patron de classes class B public A #include "TableauDyn.h" #include "../Cours 03/Chat.h" class TableauDyn2Chat : public TableauDyn { public: TableauDyn2Chat(unsigned int c, int p) : TableauDyn (c, p) {} void presente() {for (int i= 0;i < capacite;i++) tab[i].presente();} }; int main() { TableauDyn2Chat t(0,1); Chat c1("Felix"); t.ecrire(0, c1); Chat c2("Potam"); t.ecrire(1, c2); t.presente(); } je m'appelle Felix je m'appelle Potam testTableauDyn2Chat.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Héritage (2/3) Patron de classes dérivée dune classe template class B: public A #include "../Cours 03/Animal.h" template class Sofstream : public ofstream { public: void serialiser(T d) {write((char*) &d, sizeof(T));} }; int main() { Sofstream fc; fc.open("FileAnimal.bin", ofstream::out|ofstream::binary); Animal a("Blaireau", 4); fc.serialiser(a); fc.close(); } testSofstream.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié PATRON DE CLASSES Héritage (3/3) Patron de classes dérivée dun patron de classes template class B : public A #include "TableauDyn.h" #include "../tp01/Date.h" #include "../Cours 01/Etudiant.h" template class TableauDynQ : public TableauDyn { protected: U quality; public: TableauDynQ (unsigned int c, int p, U q) : TableauDyn (c, p) { quality = q;} U getQuality() {return quality;} }; int main() { Etudiant Pascal; Pascal.putnote(3, 15); Date d(30,4,2006); TableauDynQ tq(0,1, Pascal); tq.ecrire(0, d); tq.getQuality(); } testTableauDynQ.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié ABSTRACTION DE FONCTIONS Principes Principes Extension de la notion de fonction Patron de fonction avec mémorisation base de la programmation fonctionnelle Redéfinition de lopérateur () Foncteur unaire (un paramètre) Foncteur binaire (deux paramètres) Foncteur logique (prédicat) retourne un booléen // Définition du foncteur binaire de comparaison avec mémorisation template class compareTo { private: int res; // mémorisation du résultat public: int operator () (const T& x, const T& y) { res = x.compareTo(y); return res; } }; CompareTo.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié ABSTRACTION DE FONCTIONS Utilisation du foncteur Utilisation du foncteur Méthode générique de recherche de lélément maximum dun conteneur dItem // Fonction template prenant en paramètre un tableau d'Item et sa taille et un foncteur binaire : template int MaximumTableau(T t, int taille, F foncteurCmp) { int max = 0; for (int i = 1;i < taille;i++) { if (foncteurCmp(t.lire(max), t.lire(i)) < 0) max = i; } return max; } MaximumTableau.h

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié ABSTRACTION DE FONCTIONS Instanciation pour une classe donnée Instanciation pour une classe donnée Opérateur de comparaison pour Complexe int Complexe::compareTo(const Complexe & y) const { float a = reel*reel + imag*imag; float b = y.reel*y.reel + y.imag*y.imag; if (a < b) return -1; if (a > b) return 1; return 0; } Complexe.cpp

Masters IIGLI et IGLII – Programmation générique et conception objet – – Claude Montacié ABSTRACTION DE FONCTIONS Exemple dutilisation Exemple dutilisation #include "MaximumTableau.h" #include "compareTo.h" #include "TableauDyn.h" #include "../Cours 03/Complexe.h" int main() { compareTo cmpComplexe; TableauDyn t(0,1); Complexe c1(-0.8,0.7); t.ecrire(0, c1); Complexe c2(0.8,0.6); t.ecrire(1, c2); Complexe c3(1.8,0.6); t.ecrire(2, c3); int j = MaximumTableau(t, t.getCapacite(), cmpComplexe); cout << j << endl; return 0; } testMaximumTableauComplexe.cpp