IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Programmation par contrat en C++


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut Programmation par contrat en C++
    Bonjour,

    Petite question sur la mise en oeuvre de la programmation par contrat en C++. Dans la mesure o� l'on n'a pas de syntaxe sp�cifique pour sp�cifier les contrats (comme des clauses requires en ensures par exemple), comment peut-on les sp�cifier autrement que par des commentaires ?

    Les asserts en d�but de m�thodes pour v�rifier les pr�conditions sont pour moi une forme d�guis�e de test sur les pr�conditions, chose que l'on n'est pas sens� faire.

    Les ruptures de contrat sont sens�es lever des exceptions, comment le faire si on ne v�rifie pas les conditions ?

    Merci d'avance.

  2. #2
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    J'ai entendu parler de techniques de ce genre:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    class Test
    {
    public:
        void DoSomething();
    private:
        virtual void DoSomethingImpl() = 0;
    };
     
    void Test::DoSomething()
    {
        // verification des preconditions
        this->DoSomethingImpl();
        // verification des post conditions
    }
    Les impl�mentations h�ritent de Test, et le client utilise uniquement les fonctions publiques non virtuelles de Test.

    On peut imaginer des solution a base de template wrapper...

  3. #3
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Oui mais il y a dans ce code les v�rifications des conditions, chose qu'on est sens� �viter de faire.

    Le fait d'utiliser de wrapper les m�thodes virtuelles par des non virtuelles permet juste d'isoler proprement l'interface de l'impl�mentation (on pourrait carr�ment aller plus loin en appliquand l'idiome Pimpl).

    Rajouter les v�rifications des conditions dans les m�thodes virtuelles contredit la r�gle selon laquelle une m�thode n'est pas sens� tester sa pr�condition. A moins que cette r�gle soit bas�e sur la possibilit� du langage de sp�cifier et v�rifier les pr� et post conditions de mani�re transparente. Dans ce cas on a pas d'autres choix en C++ que de tester ces conditions, mais je ne sais pas si on peut toujours parler de programmation par contrat du coup

  4. #4
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    Oui mais il y a dans ce code les v�rifications des conditions, chose qu'on est sens� �viter de faire.
    Je ne comprend pas ce que tu veux dire, le C++ ne supportant pas nativement la programmation par contrat, il faut forcement faire les v�rifications "� la main" . Que ce soit les pr�-conditions, les post-conditions ou les invariants, on les indiques par des commentaires dans le .h et on les v�rifie avec des assert() ou �quivalent dans l'impl�mentation.

    � noter que les exceptions ne sont pas une bonne fa�on de g�rer les erreurs de contrat.

  5. #5
    Membre chevronn�
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Mai 2006
    Messages
    366
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 42
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 366
    Par d�faut
    Citation Envoy� par Sylvain Togni Voir le message
    Je ne comprend pas ce que tu veux dire, le C++ ne supportant pas nativement la programmation par contrat, il faut forcement faire les v�rifications "� la main" . Que ce soit les pr�-conditions, les post-conditions ou les invariants, on les indiques par des commentaires dans le .h et on les v�rifie avec des assert() ou �quivalent dans l'impl�mentation.
    Disons que les v�rifications � la main me paraissent plut�t orient�es programmation d�fensive, donc � l'oppos� de ce que propose la programmation par contrat.

    � noter que les exceptions ne sont pas une bonne fa�on de g�rer les erreurs de contrat.
    A cause de la perte de contexte ? Dans le cas d'une version DEBUG, l'assert passe, dans le cas d'une release comment signaler � l'appelant que le contrat est rompu autrement que par une exception ? Un arr�t complet de l'ex�cution n'est aps forc�ment acceptable.

  6. #6
    Membre �m�rite

    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    717
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 717
    Par d�faut
    Disons que les v�rifications � la main me paraissent plut�t orient�es programmation d�fensive, donc � l'oppos� de ce que propose la programmation par contrat.
    La programmation par contrat est un type de programmation d�fensive. Elles ne sont pas oppos�es.

    Dans le cas d'une version DEBUG, l'assert passe
    Une version DEBUG, comme le nom l'indique, c'est pour debugger. La programmation par contrat, c'est pour trouver plus facilement les bugs. Il me semble donc normal que les deux soient li�s.

    dans le cas d'une release comment signaler � l'appelant que le contrat est rompu autrement que par une exception ?
    L'appelant n'a pas � savoir si le contrat est rompu, il doit respecter le contrat. S'il ne le respecte pas, c'est un bug, et un arr�t complet est une solution.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. programmation par contrat
    Par Choupinou dans le forum G�n�ral JavaScript
    R�ponses: 3
    Dernier message: 18/03/2009, 01h46
  2. [Language]Programmation par contrat
    Par manube dans le forum Langage
    R�ponses: 3
    Dernier message: 20/12/2005, 10h16
  3. [Eiffel] Programmation par contrats
    Par SkIllz2k dans le forum Autres langages
    R�ponses: 1
    Dernier message: 02/05/2005, 20h05
  4. [Tests]La programmation par contrats
    Par fabien.raynaud dans le forum Test
    R�ponses: 6
    Dernier message: 26/07/2004, 11h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo