La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

DUT2 – Conception et Programmation à Objets – Marie-José Caraty – 2004-2005 1 Cours n° 9 Conception et Programmation à Objets Réutilisation de composants.

Présentations similaires


Présentation au sujet: "DUT2 – Conception et Programmation à Objets – Marie-José Caraty – 2004-2005 1 Cours n° 9 Conception et Programmation à Objets Réutilisation de composants."— Transcription de la présentation:

1 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Cours n° 9 Conception et Programmation à Objets Réutilisation de composants de la bibliothèque standard du C++ (STL) 2/2 Equipe pédagogique Marie-José Caraty, Denis Poitrenaud et Mikal Ziane

2 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Introduction 1.Conteneurs 1.1.Séquences élémentaires Conteneurs vector, deque, list 1.2. Adaptateurs de séquence Conteneurs stack, queue, priority_queue 1.3. Conteneurs associatifs Conteneur map, set, multimap, multiset 2.Itérateurs 3.Algorithmes Manipulations - Ordonnancement Recherche - Ensemblistes Conclusion Sommaire

3 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Conteneurs indexés par une clé de type quelconque et triés suivant cette clé (généralisation des séquences) Concept de paire (clé, valeur) pour représenter un élément set Clé et valeur sont confondues, éléments tous distincts map Clé et valeur sont distinctes, clé unique par élément multiset Plusieurs occurrences possibles du même élément multimap Une même clé peut correspondre à plusieurs éléments 1.3. CONTENEURS ASSOCIATIFS Introduction Introduction

4 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS Méthodes communes des conteneurs associatifs (1/2) Méthodes communes des conteneurs associatifs (1/2) bool empty(); true si le conteneur est vide size_type size() const; Nombre d'éléments du conteneur size_type max_size() const; Contenance maximale du conteneur size_type count(const key_T& k) const; Nombre déléments de clé k iterator lower_bound(const key_T& k) const; Itérateur sur le 1 er élément dont la clé est supérieure ou égale à k iterator upper_bound(const key_T& k) const; Itérateur sur le 1 er élément dont la clé est inférieure ou égale à k

5 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – iterator find(const key_T& k); Recherche dun élément de clé k key_compare key_comp() const; Objet de type fonction binaire de comparaison de deux clés value_compare value_comp() const; Objet de type fonction binaire de comparaison de deux valeurs void erase(iterator i); Suppression de lélément référencé par l'itérateur i void erase(iterator debut, iterator fin); Suppression des valeurs de [debut fin[ void erase(const key_T& k); Suppression des valeurs de clé k 1.3. CONTENEURS ASSOCIATIFS Méthodes communes des conteneurs associatifs (2/2) Méthodes communes des conteneurs associatifs (2/2)

6 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – pair T1 : type du premier élément stocké dans la paire T2 : type du deuxième élément stocké dans la paire Membres publics et fonction générique (externe) make_pair firstmembre correspondant au premier élément stocké secondmembre correspondant au deuxième élément stocké pair make_pair (const T1& o1, const T2& o2); constitue un objet unique de type pair à partir de o1 et o2 Exemple : type pair sur le concept (clé, valeur) décrivant un objet voiture Pair v; v = make_pair("Peugeot", "207 CC Coupé Cabriolet"); Cout << "Marque :" << v.first << " Modèle :" v.second << endl; clé (marque) valeur (modèle) voiture 1.3. CONTENEURS ASSOCIATIFS Patron (template) de la classe pair Patron (template) de la classe pair

7 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur MAP Instanciation, propriétés et méthodes spécifiques Instanciation, propriétés et méthodes spécifiques map > m; Déclaration dun ensemble m de couples (clés de type key_T, valeurs associées de type value_T) pair make_pair(const key_T& k, const value_T& v) Regroupement de la clé et de la valeur dans un seul élément Insertion réussie si absence délément de même clé Méthods spécifiques pair insert(const T& e); Tentative dinsertion dun élément e pair insert(iterator i, const T& e); Tentative dinsertion dun élément e à l'emplacement spécifié par l'itérateur i (améloration du temps de recherche de lemplacement) void insert(iterator debut, iterator, fin) Tentative dinsertion des éléments de [debut fin[ dune autre séquence

8 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur MAP Exemple Exemple #include using namespace std; int main() { map > prixFruit; prixFruit.insert(make_pair("poire", 1.5)); prixFruit.insert(make_pair("pêche", 2.7)); prixFruit.insert(make_pair("orange", 1.2)); map >::iterator it; if ((it = prixFruit.find("poire")) == prixFruit.end()) cout << "fruit non référencé"; else cout second; } Résultat dexécution : 1.5

9 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur SET Instanciation et propriétés Instanciation et propriétés set > s; Déclaration dun ensemble s de clés de type key_T Mêmes méthodes que pour le conteneur map Clés et valeurs confondues

10 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur MULTIMAP Instanciation, propriétés et méthodes spécifiques Instanciation, propriétés et méthodes spécifiques multimap > mm; Déclaration dun ensemble mm de couples (clés de type key_T, valeurs associées de type value_T) Pas déchec dinsertion Méthodes spécifiques iterator lower_bound(const T& e); Recherche du premier élément de clé k iterator upper_bound(const T& e); Recherche du dernier élément de clé k

11 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur MULTIMAP Exemple Exemple #include using namespace std; int main() { multimap > conjug; conjug.insert(make_pair(1, "parler")); conjug.insert(make_pair(2, "choisir")); conjug.insert(make_pair(3, "prendre")); conjug.insert(make_pair(2, "finir")); conjug.insert(make_pair(1, "manger")); multimap >::iterator it1, it2, it; it1 = conjug.lower_bound(2); it2 = conjug.upper_bound(2); cout << "Verbes du deuxième groupe : "; for (it = it1; it != it2; it++) cout second << ", "; } Résultat dexécution : Verbes du deuxième groupe : choisir, finir

12 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – CONTENEURS ASSOCIATIFS - Conteneur MULTISET Instanciation et propriétés Instanciation et propriétés multiset > ms; Déclaration dun ensemble ms de clés de type key_ T Mêmes opérations que pour le conteneur multimap Clés et valeurs confondues

13 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ITERATEURS Rôles des itérateurs Rôles des itérateurs Variable qui repère la position d'un élément dans un conteneur Utilisés pour accéder/balayer les éléments d'un conteneur Accès (lecture/écriture) des éléments du conteneur Balayage séquentiel de tous les éléments du conteneur Méthodes membres des conteneurs (sauf adaptateurs) begin(), end() // Balayage du début du conteneur à sa fin rbegin(), rend() // Balayage de la fin du conteneur à son début

14 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ITERATEURS Opérateurs associés Opérateurs associés Généralisation et amélioration de la sûreté des pointeurs Soit litérateur It Déréférencement Accès au conteneur dont l'itérateur pointe l'élément *It Déplacement En avant, en arrière ou aléatoire Exemples : ++It; It++; // balayage séquentiel avant --It; It--; // balayage séquentiel arrière It+=5; It-=3; // accès direct

15 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ITERATEURS Hiérarchie des itérateurs Hiérarchie des itérateurs Itérateur accès aléatoire Lecture et écriture Accès aléatoire Itérateur bidirectionnel Lecture et écriture Déplacement avant/arrière Itérateur unidirectionnel Lecture et écriture Déplacement avant Itérateur d'entrée Lecture Déplacement avant Itérateur de sortie Ecriture Déplacement avant InputIteratorOutputIterator RandomAccessIterator BidirectionalIterator ForwardIterator, >= +, +=, -, -= [] *, i++, ++i Constructeur copie Opérateur d'assignation ==, != i--, --i *, i++, ++i Constructeur copie Opérateur d'assignation

16 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ITERATEURS Déclaration des itérateurs Déclaration des itérateurs A chaque conteneur son type d'itérateur Itérateur à accès aléatoire (vector et deque) Itérateur bidirectionnel (list, map, set) Types membres des classes conteneurs const_iterator (version constante) iterator (version non constante) Déclaration ditérateur Instanciation du conteneur, opérateur de visibilité, type ditérateur Exemples de déclaration : Déclaration d'un itérateur Itv sur un vecteur d'entiers vector ::iterator Itv; Déclaration d'un itérateur Itl sur une liste d'entiers list ::iterator Itl;

17 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ITERATEURS Balayage/accès par itérateur Balayage/accès par itérateur Affichage d'un conteneur vecteur d'entiers par balayage d'itérateur typedef vector vectInt; vectInt V; // Première version for (vectInt::iterator It=V.begin(); It

18 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ALGORITHMES Classification Classification Manipulations Algorithmes Recherche Ordonnancement Ensemblistes Comparaisons InclusionIntersectionUnion et fusionDifférence Partitionnement Copie Echange Remplacement Réorganisation Transformation Tri Gestion de tas Recherche binaire Motif Elément Remplissage

19 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ALGORITHMES Manipulation (Extraits) Manipulation (Extraits) OutputIterator copy(InputIterator first, InputIterator last, OutputIterator result); Copie de la séquence [first last[ à lemplacement result OutputIterator copy_backward(InputIterator first, InputIterator last, OutputIterator result); Copie de la séquence ]last first] à lemplacement result ForwardIterator2 swap_ranges (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2); Echange des éléments des deux séquences [first1 last1[ et [first2 last2[ void generate(ForwardIterator first, ForwardIterator last, Generator gen); Initialisation de [first last[ par une fonction génératrice void rotate (ForwardIterator first, ForwardIterator middle, ForwardIterator last); Echange des éléments des deux séquences [first middle[ et [middle last[

20 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ALGORITHMES Tris (Extraits) Tris (Extraits) void sort (RandomAccessIterator first, RandomAccessIterator last [,Compare comp]); Tri de la séquence [first last[ avec lopérateur de comparaison Comp void stable_sort (RandomAccessIterator first, RandomAccessIterator last [,Compare comp]); Tri stable de la séquence [first last[ avec lopérateur de comparaison Comp, Ordre initial en cas dégalité

21 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ALGORITHMES Recherches (Extraits) Recherches (Extraits) InputIterator find(InputIterator first, InputIterator last, const T& v); Recherche de la valeur v dans la séquence [first last[ InputIterator find_if(InputIterator first, InputIterator last, Predicate pred); Recherche dune valeur de la séquence [first last[ satisfaisant pred ForwardIterator1 find_first_of (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2); Recherche dune valeur de la séquence [first2 last2[ présente dans la séquence [first1 last1[ ForwardIterator1 search (ForwardIterator1 first1, ForwardIterator1 last1, ForwardIterator2 first2, ForwardIterator2 last2 [, BinaryPredicate binary_pred]); Recherche de la séquence [first2 last2[ dans la séquence [first1 last1[

22 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Prérequis : l'opérateur == est défini pour T template InputIterator find(InputIterator debut, InputIterator fin, const T& valeur); Recherche dans la séquence définie par l'intervalle [debut fin[ d'un item égal à valeur Retourne le premier itérateur i dans l'intervalle tel que *i == valeur Retourne end() si la valeur n'est pas trouvée 3. ALGORITHMES Opération de recherches find Opération de recherches find

23 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Prérequis : un prédicat pred est défini template InputIterator find_if(InputIterator debut, InputIterator fin, Predicate pred); Recherche dans la séquence définie par l'intervalle [debut fin[ d'un item égal à valeur Retourne le premier itérateur i dans l'intervalle tel que pred(*i) ==true Retourne end() si le prédicat n'est pas satisfait 3. ALGORITHMES Opération de recherche find_if Opération de recherche find_if

24 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – template class PremierPlusGrand { // Objet fonction : classe avec private:// surcharge de l'opérateur () T x_; public: PremierPlusGrand () : x_ (0) {} PremierPlusGrand (const T& x) : x_ (x) {} int operator () (const T& v) {return v > x_;} }; vector v;...// Vecteur initialisé à vector ::iterator i = find_if(v.begin(), v.end(), PremierPlusGrand (3)); (i!=v.end()) ? cout<<*i : cout<<"element introuvable"; Résultat d'exécution : 4 (premier élément du conteneur >3) 3. ALGORITHMES Exemple dobjet fonction Exemple dobjet fonction

25 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – ALGORITHMES Ensemblistes (Extraits) Ensemblistes (Extraits) set_union (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result [,Compare comp]); Union des deux ensembles [first1 last1[ et [first2 last2[ Résultat dans un troisième ensemble set_intersection (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); Intersection des deux ensembles [first1 last1[ et [first2 last2[ Résultat dans un troisième ensemble set_difference (InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp); Différences entrel les deux ensembles [first1 last1[ et [first2 last2[ Résultat dans un troisième ensemble

26 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – Efficacité : objectif même des concepteurs (code efficace) Complexité maximale spécifiée pour les méthodes/algorithmes Algorithmes choisis pour l'implémentation des fonctionnalités sont les plus efficaces qui soient (les meilleurs connus à ce jour) Gain en production de logiciel dû à la réutilisation Nombre impressionnant d'algorithmes disponibles Couverture de tous les besoins courants des programmeurs Fiabilité : gain de fiabilité par réutilisation de composants Plus un composant est réutilisé, plus il est sûr Réutilisation et maintenabilité : facilitée par la standardisation Portabilité : a priori grâce à la norme ISO Applicabilité des algorithmes aux structures de données utilisateur 3. ALGORITHMES Avantages à utiliser STL Avantages à utiliser STL

27 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – #include using namespace std; class Carnet { private: map MCarnet; //map(clé=nom, valeur=téléphone) map ::iterator it; //iterateur it pour accès //et balayage de la map public: Carnet() {} void ajoute(string nom, string tel); //ajoute un enregistrement string getTel(string nom); //accesseur du numéro de téléphone string listeNom(string tel); //liste du/des nom(s) string listeCarnet(); //liste du carnet complet }; ANNEXE Exemple – Carnet téléphonique (Carnet.hpp) Exemple – Carnet téléphonique (Carnet.hpp)

28 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – #include "Carnet.h" using namespace std; void Carnet::ajoute(string nom, string tel) { MCarnet[nom] = tel; //ajoute/remplace l'enregistrement //correspondant à nom } string Carnet::getTel(string nom) { it = MCarnet.find(nom); //fin de conteneur si aucune clé //ne correspond à nom if (it == MCarnet.end()) return ""; return (*it).second; //retourne le numéro de téléphone } ANNEXE Exemple – Carnet téléphonique (Carnet.cpp) Exemple – Carnet téléphonique (Carnet.cpp)

29 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – string Carnet::listeNom(string tel) { string resultat = ""; for (it = MCarnet.begin(); it != MCarnet.end(); it++) if ((*it).second == tel) resultat += (*it).first + '\n'; return resultat; } string Carnet::listeCarnet() { string resultat; for (it = MCarnet.begin(); it != MCarnet.end(); it++) resultat += (*it).first + " : " + (*it).second + "\n"; return resultat; } ANNEXE Exemple – Carnet téléphonique (Carnet.cpp) Exemple – Carnet téléphonique (Carnet.cpp)

30 DUT2 – Conception et Programmation à Objets – Marie-José Caraty – #include "Carnet.h" #include using namespace std; void main() { Carnet C; string dupond = "Dupond Georges"; string telDupond = " "; C.ajoute("Martin Pierre", " "); C.ajoute(dupond, telDupond); C.ajoute("Dupond Jean", telDupond); C.ajoute("Durand Jacques", " "); C.ajoute("Durand Jacques", " "); cout << C.listeCarnet() << endl; cout << "Le numero de " << dupond << " est :"; string numTel = C.getTel(dupond); if (numTel.length() == 0) cout << "inconnu" << endl; else cout << numTel << endl << endl; cout << "Entree(s) du no " << telDupond << " :\n" << endl; string liste = C.listeNom(telDupond); if (liste.length() == 0) cout << "aucune entree"; else cout << liste << endl; } ANNEXE Exemple – Carnet téléphonique (main.cpp) Exemple – Carnet téléphonique (main.cpp)


Télécharger ppt "DUT2 – Conception et Programmation à Objets – Marie-José Caraty – 2004-2005 1 Cours n° 9 Conception et Programmation à Objets Réutilisation de composants."

Présentations similaires


Annonces Google