Home
Spécification et réalisation d`une classe générique
Contents
1. VERIFY p_bl_1 p_bl_2 VERIFY p_bl_1 lt p_bl_2 std pair lt const charx float gt p_sf_1 total enlightenment 433 00 std pair lt const charx float gt p_sf_2 std make_pair total enlightenment 433 00 7 http gcc gnu org svn gcc trunk libstdc v3 testsuite 20_util pair 10 Sp cification et r alisation d une classe g n rique VERIFY p_sf_1 p_sf_2 VERIFY p_sf_1 lt p_sf_2 std pair lt const charx gnu_obj gt p_sg_1 enlightenment gnu_obj 5 std pair lt const char x gnu_obj gt p_sg_2 std make_pair enlightenment gnu_obj 5 VERIFY p_sg_1 p_sg_2 VERIFY p_sg_1 lt p_sg_2 std pair lt gnu_t lt long gt gnu_obj gt p_st_1 gnu_t lt long gt false gnu_obj 5 std pair lt gnu_t lt long gt gnu_obj gt p_st_2 std make_pair gnu_t lt long gt false gnu_obj 5 VERIFY p_st_1 p_st_2 VERIFY p_st_1 lt p_st_2 Tester des classes g n riques peut s av rer d licat en raison du niveau l abs traction lev des sp cifications Des m thodologies de tests appliqu es la pro grammation g n rique sont propos es dans 2 La biblioth que Boost propose no tamment des outils facilitant les tests de programmes g n riques qui permettent de v rifier des concepts 3 7 Remarques 7 1 Rigueur des sp cifications La rigueur des sp cifications pr sent es dans ce document d passe largement celle atte
2. d une part illustrer ce qu est une sp cification sur un cas relativement simple Cet exemple reste un exemple et n est en aucun cas une forme canonique qu il faut suivre les yeux ferm s d autre part introduire des notions de programmation g n rique c est dire l utilisation de templates issues du standard C 1 et utilis es dans les sp cifications de la STL Le cas d tude choisi est une classe g n rique simple la paire C est une classe auxiliaire d finie dans le chapitre 20 2 2 du standard C ISO 14882 2003 1 2 Cahier des charges Le cahier des charges peut tre exprim en des termes confus ambigus voire contradictoires Nous consid rons pour cet exemple que le client a donn le cahier des charges lapidaire suivant Nous souhaitons un outil C permettant de g rer des paire de donn es dans le but de simplifier certains de nos d veloppements Nous voulons un type de donn es qui partir de donn es existantes cr e un doublet d l ments Nous voulons pouvoir manipuler les tuples avec simplicit comme des entiers par exemple sans toutefois proposer toutes les op rations des entiers on ne sou haite pas ajouter ou soustraire des doublets directement par exemple De plus nous souhaitons que la classe soit g n rique performante et qu un minimum de conditions soient impos es quant aux donn es du tuple Des outils facilitant la cr ation de doublet arbitrairement choisis devraient t
3. else report_error Sp cification et r alisation d une classe g n rique 45 Voir aussi Concepts assignable constructible par d faut ordonnable et comparable 4 6 Exemple d application L exemple suivant illustre l utilisation de deux paires include lt iostream gt cout include lt cstdlib gt EXIT_ SUCCESS include lt utility gt pair lt T1 T2 gt include lt string gt string using namespace std int main pair lt string int gt r Cr e une paire vide qui contient une cha ne et un entier pair lt string int gt p bye 18 Une paire initialis e cha ne entier cout lt lt La paire p contient lt lt p first lt lt et lt lt p second lt lt endl affichage La paire p contient bye et 18 cout lt lt La paire r contient lt lt r first lt lt et lt lt r second lt lt endl affichage La paire r contient et 0 r pair lt string int gt hello 17 r affectation de r cout lt lt La paire r contient lt lt r first lt lt et lt lt r second lt lt endl affichage La paire r contient hello et 17 cout lt lt p et r sont elles gales lt lt p r oui non lt lt endl affichage p et r sont elles gales non PES copie le contenu de r dans p cout lt lt p et r sont elles gales lt lt p r oui non lt lt endl affichage p et r sont elles gales ou
4. Sp cification et r alisation d une classe g n rique Romuald THION 2007 R sum Ce document est un exemple de document de sp cification et de r alisa tion d une classe g n rique simple en C partir d un cahier des charges sommaire nous d finissons les fonctionnalit s propos es par la classe Une particularit de cette classe est qu elle est param tr e selon deux types de don n es La sp cification doit donc faire abstraction des types et n utiliser que des propri t s suppos es connues pour ces types La r alisation fait appel aux tem plates C et aux concepts de la Standard Template Library STL La classe paire que nous sp cifions est disponible dans les utilitaires fournis par la STL Table des mati res 2 2 3 5 8 9 1 12 13 Cet exemple de cahier des charges est relativement artificiel C est l tape o des choix doivent tre propos s au client Sp cification et r alisation d une classe g n rique 1 Introduction V rifier la correction d un programme d un algorithme c est s assurer qu il fait bien ce que l on a pr vu qu il fasse L tape de sp cification d un programme est donc fondamentale en g nie logiciel un programme n est correct que vis vis de ses sp cifications C est donc par l qu il faut commencer pour r ussir un projet informatique c est probablement pourquoi tout le monde s en passe Ce document a deux objectifs
5. T1 et U2 en T2 pair amp operator const pair op rateur d affectation par d faut template lt class Tl class T2 gt bool relation d galit entre paires requiert que T1 operator const pair const paire et T2 soient comparables template lt class Tl class T2 gt bool relation d inf riorit entre paires requiert que operator lt const pair amp const paire T1 et T2 soient ordonnables TABLE 2 Membres de la classe paire 4 3 Param tres de type Les types T1 et T2 doivent tre assignables Les op rations suppl mentaires re qui rent des conditions suppl mentaires Le constructeur par d faut de la paire requiert que T1 et T2 soient constructibles par d faut l op rateur requiert que T1 et T2 soient comparables l op rateur lt requiert que T1 et T2 soient ordonnables 44 Exemple d utilisation Dans la STL par exemple la m thode insert const value_ types x dela classe g n rique set retourne comme type pair lt iterator bool gt Le second membre de la paire indique si l l ment a t ajout ou s il existe d j le premier membre est un it rateur qui pointe soit l o a eu lieu l insertion soit sur l l ment d j existant Il s agit d un exemple d utilisation o la paire est utilis e pour retour ner deux valeurs comme dans l exemple suivant include lt utility gt pair lt bool double gt result do_a_calculation if result first do_something_more result second
6. __y first II __y first lt __x first amp amp __x second lt __y second d finition membre membre de la relation d inf riorit requiert que T1 et T2 soient ordonnables x const pair lt T1 T2 gt amp __y Sp cification et r alisation d une classe g n rique template lt class T1 class T2 gt inline bool operator const pair lt T1 T2 gt amp __x const pair lt T1 T2 gt amp __y return __x y d finition bas e sur l op rateur template lt class T1 class T2 gt inline bool operator gt const pair lt Tl T2 gt amp return __y lt __x d finition bas e sur l op rateur lt x const pair lt Tl T2 gt amp __y template lt class T1 class T2 gt inline bool operator lt const pair lt T1 T2 gt amp __x const pair lt T1 T2 gt amp __y return __y lt __x d finition bas e sur l op rateur lt template lt class T1 class T2 gt inline bool operator gt const pair lt T1 T2 gt amp return __x lt __y d finition bas e sur l op rateur lt namespace std endif x _PAIR H x x const pair lt T1 T2 gt amp __y 5 1 Fonction outil suppl mentaire Par commodit par exemple quand on manipule des dictionnaires une fonc tion globale make_pair T1 x T2 x est propos e dans la STL Elle prend en param tre un objet constant de type T1 et un objet constant de type T2 et retourne une paire de types T1 et T2 en utilisant le cons
7. asse g n rique La justification de ce choix est l item 45 de 7 Use member function template to accept all compatible types Cette technique appel e generalized copy constructor permet de construire une paire de type pair lt T1 T2 gt partir detypespair lt _Ul _U2 gt quelconques pourvu que U1 et U2 soient convertibles en types T1 et T2 respective ment 13
8. emier membre et un autre de type T2 comme second membre Les deux membres d une paire sont accessibles publiquement Une paire est constructible gr ce au constructeur par d faut qui invoque les constructeurs par d fauts respec tifs des types T1 et T2 pour le premier et le second membre de p Contrat ce constructeur requiert que les types T1 et T2 soient constructibles par d faut au constructeur principal qui prend en param tre un objet a constant de type T1 et un objet b constant de type T2 Ce constructeur copie a dans le premier membre de p et copie b dans le second membre de p au constructeur de copie qui prend en param tre une paire constante p de types U1 et U2 Ce constructeur copie le premier membre de p dans le pre mier membre de p et copie le second membre de p dans le second membre de p Les types U1 et U2 sont implicitement convertis en type T1 et T2 Contrat le type U1 doit tre convertible en type T1 et le type U2 doit tre convertible en type T2 Relations entre paires Une paire a est gale une paire b op rateur si et seulement si le premier membre de a est gal au premier membre de b et que le second membre de a est gal au second membre de b Contrat l galit des paires requiert que les types T1 et T2 soient comparables Une paire a est inf rieure une paire b op rateur lt si et seulement si le pre mier membre de a est inf rieur au premier
9. globale make_pair Ce code ne respecte pas les conventions du guide de style C IF ifndef _PAIR H define _PAIR H 1 namespace std la paire est d finie dans le namespace standard de la stl une paire contient deux objets de types arbitraires template lt class T1 class T2 gt struct pair typedef T1 first_ type typedef T2 second_type pass s en param tres alias pour le premier type alias pour le second type T1 first T2 second le premier membre de la paire le second membre de la paire pair first second constructeur par d faut requiert que T1 et T2 soient constructibles par d faut pair const Tl amp __a const T2 amp __b first __a second __b constructeur principal requiert que T1 et T2 soient assignables template lt class _U1 class _U2 gt pair const pair lt _U1 _U2 gt amp __p first __p first second __p second constucteur de copie de la classe paire elle m me requiert que T1 et T2 soient assignables struct pair template lt class T1 class T2 gt inline bool operator const pair lt T1 T2 gt amp __x const pair lt T1 T2 gt amp __y return __x first __y first amp amp __x second __y second deux paires sont gales ssi leurs membres respectifs sont gaux requiert que T1 et T2 soient comparables template lt class T1 class T2 gt inline bool operator lt const pair lt T1 T2 gt amp return __x first lt
10. i cout lt lt p est elle inf rieure r lt lt p lt r oui non lt lt endl affichage p est elle inf rieure r non r second on modifie le second membre de r cout lt lt p est elle inf rieure r lt lt p lt r oui non lt lt endl affichage p est elle inf rieure r oui return EXIT_ SUCCESS vrai dire l auteur r tro sp cifi la classe paire et traduit des documents existants En C la seule diff rence entre une classe et une structure est la visibilit par d faut des membres En C le mot clef class utilis dans les param tres de template peut tre rempla par typename Sp cification et r alisation d une classe g n rique 5 R alisation L tape de conception en informatique est celle o sont fait les choix pour la r alisation des sp cifications c est dans cette tape qu on d termine la meilleure structure de donn es pour avoir de bonnes performances par exemple Dans cet exemple la conception est quasiment inexistante part peut tre le choix des m thodes en ligne inline pour efficacit La r alisation est extraite du header standard de la STL st1_pair h situ se lon version de gcc ici la 4 1 3 dans usr include c 4 1 3 bits Les mo difications apport es pour l exemple concernent la suppression des informations de licence la traduction des commentaires et la suppression de la fonction
11. ion ISO and International Electro technical Commission IEC International standard ISO IEC 14882 2003 Pro gramming languages C second edition Technical report ANSI American National Standards Institute Octobre 2003 2 David Vandevoorde and Nicolai M Josuttis C Templates The Complete Guide Addison Wesley 2002 3 David Abrahams and Aleksey Gurtovoy C Template Metaprogramming Concepts Tools and Techniques from Boost and Beyond Addison Wesley 2004 4 Bjarne Stroustrup The C Programming Language Third Edition Addison Wesley Longman Publishing Co Inc 1997 5 Ulrich Breymann Designing Components with the C STL Third Edition Addison Wesley 2002 6 Jeff Cogswell Christopher Diggins Ryan Stephens and Jonathan Turkanis C Cookbook O Reilly 2005 7 Scott Meyers Effective C Third Edition Addison Wesley 2005 11 http www sgi com tech stl Assignable html http www sgi com tech stl DefaultConstructible html http www sgi com tech stl EqualityComparable html http www sgi com tech stl LessThanComparable html 12 Sp cification et r alisation d une classe g n rique 9 Annexe 9 1 Pourquoi un constructeur de copie template Le constructeur de copie de la classe paire est d fini ainsi template lt class _U1 class _U2 gt pair const pair lt _U1 _U2 amp __p Il s agit d une m thode membre g n rique d finie dans une cl
12. it lt pair h gt 4 2 Description Une paire pair lt T1l T2 gt est une classe param tr e selon deux types T1 et T2 assignables donn s la d claration de la paire voir tableau 1 Une paire contient deux objets accessibles publiquement un objet de type T1 nomm premier membre et un autre de type T2 comme second membre Le tableauf2 d crit les membres de la classe paire Une paire n est pas un conteneur au sens de la STL car elle ne respecte pas les sp cifications d un conteneur entre autres la paire ne fournit pas d it rateurs sur ses l ments 5 http www sgi com tech stl pair html D aucun pr f rerait gt lt et gt Techniquement donc la r alisation de cette classe peut se r sumer un includeetun typedef Plus g n ralement tout conteneur de type Unique Associative Container dispose d une m thode insert qui retourne une paire Sp cification et r alisation d une classe g n rique Membre Description first_type alias pour le premier type second_type alias pour le second type first le premier membre public de la paire P P P second le second membre public de la paire pair constructeur par d faut requiert que T1 et T2 soient constructibles par d faut pair const T1 amp __a const 124 _b constructeur principal requiert que T1 et T2 soient assignables pair const pair lt _Ul _U2 gt amp __p constucteur de copie Convertit implicite ment U1 en
13. m thodes de la paire Les concepts que nous pr sentons ici sont issus de la STL et utilis s courament dans la d finition de classes de la biblioth que standard exemple dans les conteneurs ou les algorithmes Les d finitions propos es permettent d utiliser sans ambigu t s des notions abstraites vitant ainsi les r p titions et les risques de confusion Soit T un type de donn es Test dit assignable s il est possible 1 de copier des donn es de ce type d finition du constructeur de copie T const T amp t en C 2 et d assigner des donn se de ce type aux variables d finition de la sur charge de l op rateur d affectation T amp operator const T amp t en C Test dit constructible par d faut si le constructeur par d faut est d fini pour T T void en C Test dit comparable s il est possible de comparer deux donn es de type T avec l op rateur et si est une relation d quivalence transitive sym triquef et r flexiveP Test dit ordonnable s il est possible de comparer deux donn es de type T avec l op rateur lt et si lt est une relation d ordre strict transitive et irr flexivefi Une type T est dit convertible en un type T s il existe une application qui toute donn e de type T fasse correspondre une donn e de type T aRb bRc implique aRc aRb implique bRa aRa pour tout a aRa a pour tout a BSD Ne pas aller l encontre du cahier de
14. membre de b ou si le premier membre de b n est pas inf rieur au premier membre de a et que le second membre de a est inf rieur au second membre de b Contrat l inf riorit des paires requiert que les types T1 et T2 soient ordon nables Sp cification et r alisation d une classe g n rique Param tre Description T1 Le type du premier membre de la paire T2 Le type du second membre de la paire TABLE 1 Param tres de type de la classe paire Les autres relations op rateurs gt lt et gt entre deux paires a et b sont d finissables partir des relations d galit et d inf riorit Ces autres relations sont donc des formes syntaxiques de commodit dont les s mantiques sont d finies par al b a b a gt b b lt a a lt b b lt a a gt b a lt b La sp cification que nous proposons au client est en fait la classe pair lt T1 T2 gt f qui fait partie des outils propos s dans le header lt utility gt de la STL Dans la suite de ce document nous consid rerons que la paire est celle de la STL d finie dans le standard du C La section suivante est un exemple de manuel d utilisation de la paire nous y d crivons la classe et proposons des exemples d utilisation 4 Manuel d utilisation 4 1 D finition La classe paire de la cat gorie utilitaires de la STL est d finie dans le header standard lt utility gt et dans le header non standard maintenu pour compatibil
15. ndue dans un compte rendu de TP du d partement et m me dans l indus trie En revanche elle est souhaitable voire exig e dans les publications scienti fiques les ouvrages de r f rence ou les standards 1 7 2 Ressources en ligne La majeure partie de ce document est une traduction de la documentation de la STL originale de Silicon Graphics disponible en lignefl c est une ressource de r f rence Le tableau B donne ce propos les correspondances entre les termes que nous avons utilis dans le document et ceux de la STL La faq de la librarie stan dard GNU est galement une documentation de r f rence exhaustive Par exemple l impl mentation de l op rateur lt y est comment e http www boost org libs libraries htm Correctness ttp www sgi com tech st1l ttp gcc gnu org onlinedocs libstdc 20 _util howto html pairlt BE S 11 Sp cification et r alisation d une classe g n rique Terme du document Terme de la STL paire pair assignable Assignable constructible par d faut DefaultConstructible comparable EqualityComparablel ordonnable LessThanComparablel TABLE 3 Correspondance entre les termes du document et ceux de la STL 7 3 dition du document Ce document a t r alis avec IATEX2E avec l diteur Kile de KDE Il est sous licence GPL Les sources sont disponibles aupr s de l auteur 8 R f rences 1 International Standardization Organizat
16. re propos s Un change avec le client s av re ici in vitable la profusion et la diversit des termes employ s plus ou moins bon escient n cessite de clarifier la pens e de la ma trise d ouvrage La notion de paire semble pr valoir dans les besoins le produit que nous allons sp cifier va donc tre une paire mais de quels types de don n es Avec quelles fonctionnalit s offertes Quelles sont les conditions acceptables sur les types d entr e Nous supposons par la suite que l tape de dialogue n go ciation pr alable a t men e a bien et que le client accepte les sp cifications qui suivent Sp cification et r alisation d une classe g n rique 3 Sp cification L action de sp cifier consiste d crire avec pr cision les caract ristiques du pro duit que nous allons r aliser dans notre cas un produit logiciel et m me plus pr cisement une classe g n rique Nous allons t cher de clarifier les notions voqu s en prenant en compte les crit res demand s par le client comme la possibilit de manipuler simplement la classe et de d finir un minimum de conditions en contrat Cette section va com mencer par tablir les d finitions des concepts pr alables la sp cification de la classe g n rique paire 3 1 D finitions des concepts Les concepts sont des propri t s abstraites d finies sur des types de donn es Ces propri t s sont utilis es pour d finir les contrats sur les
17. s charges Les sp cifications pourraient tre r alis es dans un autre langage de programmation que le C pourvu qu il soit orient objet base de classes et supportant la programmation g n rique Nous trichons en utilisant la dialectique et les prototypes du C L anti sym trie forte aRb implique bRa d une relation d ordre strict est un th or me de la transitivit et de l irr flexivit Le type paire est g n rique Ne connaissant pas les types de donn es l avance nous pouvons seulement supposer des propri t s que ces types respectent par contrat On devrait galement d finir l op rateur d affectation pour les paires La relation d inf riorit ne para t pas tr s naturelle mais a pour int r t de ne pas faire intervenir la relation d galit dans sa d finition Il s agit d un ordre lexicographique Sp cification et r alisation d une classe g n rique 3 2 Sp cification de la paire partir des concepts pr c demment d finis nous allons pouvoir d finir la paire proprement dite Nous d signerons par p la paire courante sur laquelle sont invoqu es les m thodes D finition et construction Une paire est une classe param tr e selon deux types T1 et T2 donn s la d claration de la paire Contrat les deux types T1 et T2 sont assignables Une paire contient deux objets un objet de type T1 nomm pr
18. tructeur principal template lt class _T1 class _T2 gt inline pair lt _T1 _T2 gt make _pair _T1 __x return pair lt _ T1 _T2 gt __x _T2 __y y Pour des raisons techniques cette fonction prend d sormais version 2003 du stan dard C I ses param tres par valeur et non par r f rence constante En ef fet le choix initial posait des probl mes lors du passage de cha nes de caract res constantes fl 6 Tests fonctionnels La libstdc du GNU dispose d une batterie de tests pour la collection de compilateurs gcc et la STL L outillage et les options de configurations de cette bat terie sont relativement complexes et ne peuvent tre d taill s ici Les v rifications effectu es sur la paire concernent principalement les types pass s en param tres la correction des constructeurs et des deux op rations principales Le plan de tests croise les v rifications selon trois aspects 6 lhttp www open std org jtci sc22 wg21 docs lwg defects html 181 Attention donc lors de l utilisation de make pair avec de gros objets Au total la batterie comporte une trentaine de tests pour la classe paire Le header standard lt cassert gt permet d utiliser la fonction assert c qui value l expression c pass e en param tre Si c est valu e faux alors assert affiche un message sur la sortie d erreur standard et appelle abort qui arr te l ex cution du programme Si c est
19. valu e vrai l ex cution continue Sp cification et r alisation d une classe g n rique 1 le fonctionnement avec comme type en param tre int float const char x gnu_obj un type construit minimal gnu_t un type construit minimal g n rique 2 selon que les types T1 et T2 soient homog nes h t rog nes const const amp 3 pour les m thodes le constructeur principal de pair la fonction make_pair l algorithme g n rique swap qui permet d intervertir deux objets titre d exemple voici la r alisation des tests pour le cas o les types en param tres sont h t rog nes VERIFY est une macro proche de la fonction assert le test est valid si la condition en param tre est valu e vrai include lt utility gt class gnu_obj int i public gnu_obj int arg 0 i arg bool operator const gnu_obj amp rhs const return i rhs i bool operator lt const gnu_obj amp rhs const return i lt rhs i E template lt typename T gt struct gnu_t bool b public gnu_t bool arg 0 b arg bool operator const gnu_t amp rhs const return b rhs b bool operator lt const gnu_t amp rhs const return int b lt int rhs b heterogeneous void test01 std pair lt bool long gt p_bl_1 true 433 std pair lt bool long gt p_bl_2 std make_pair true 433
Download Pdf Manuals
Related Search
Related Contents
Leica ES2 Leica EZ4 Leica EZ4 W Manual do usuário Micropac USB-ECPT Shark 200/200T Meter User Manual V.1.13 eleCtriC FirePlaCe insert aPPareil de Foyer éleCtriqUe insérable Samsung LE26A41B Brugervejledning Nachrichten für Seefahrer Heft 1/2014 – Amtliche M30201T-PRB User's Manual Copyright © All rights reserved.
Failed to retrieve file