[Squeak-fr] Equivalent des interfaces callback du C++

Jean-François LEFEVRE jflefevre at sqli.com
Dim 24 Aou 10:24:10 UTC 2008


Bonjour,

Comme tu le dis si bien, la notion d'interface est implicite et le 
contrat doit au mieux être exprimé dans les commentaires de méthode ou 
de classe.
Souvent le contrat est exprimé à l'aide d'une classe abstraite et les 
méthodes obligatoires sont définies de manière abstraite (self 
subclassResponsibility).
Ce n'est pas toujours possible (quand tu as besoin d'hériter d'autre 
chose) et dans ce cas on peut effectivement avoir des 
messageNotUnderstand si
on n'a pas respecté le contrat.

Cordialement,
Jean-François

Damien Cassou a écrit :
> 2008/8/24 Vicnet <oselev at yahoo.fr>:
>   
>> Bonjour,
>>
>> Damien Cassou a écrit :
>>     
>>> j'aimerai bien t'aider, mais je n'ai absolument rien compris :-).
>>> Pourrais-tu donner un exemple ?
>>>       
>> Oui voila en C++:
>>
>> class I {
>>        virtual void callback() = 0;
>> };
>>
>> class A : public virtual I
>> {
>>        virtual void callback() {
>>                std::cout << "Je suis prévenu maintenant !";
>>        }
>> };
>>
>> class B
>> {
>>        Enfant(I* i) : _i(i) { }
>>        void evennement() {
>>                _i->callback();
>>        }
>>        I* _i;
>> };
>>
>> A a;
>> B b(a);
>> b.evennement();
>>
>> a est prévenu d'un évennement par un b sans que b ne connaisse tout de a. A
>> et B sont découplés.
>>
>> Zn java, il y a directement le mot clef interface.
>>
>> Il y a un 'contrat' I entre les deux que chacun doit respecter/utiliser.
>>
>> En smalltalk, le 'contrat' semble implicite. Voici ce que je fais en squeak
>> (peut etre faudrait-il mettre les methode sous la forme Object>>methode mais
>> je ne suis pas sur de la syntaxe):
>>
>> Object subclass: #A
>>        ...
>> callback
>>        Transcript print: "Je suis prévenu maintenant !"; cr.
>>
>> Object subclass: #B
>>        instanceVariableNames: 'i'
>>        ...
>> evennement
>>        i callback.
>>
>> |a b|
>> a := A new.
>> b := B new.
>> b evennement. "a est prévenu !"
>>
>> a est prévenu mais le contrat n'est pas matérialisé par un objet.
>> Quand on implémente A, on peut oublier de déclarer callback si personne ne
>> nous le dit !
>>
>> Est-ce la bonne façon de faire ?
>>     
>
> Oui, c'est la bonne façon de faire en général je pense.
>
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Squeak-fr mailing list
> Squeak-fr at lists.squeakfoundation.org
> http://lists.squeakfoundation.org/cgi-bin/mailman/listinfo/squeak-fr
>   


-- 
*Jean-François LEFEVRE*
Architecte Senior
+33 (0)6 80 38 01 29
jflefevre at sqli.com <mailto:jflefevre at sqli.com> 	
268, avenue du Président Wilson 93210 LA PLAINE-SAINT-DENIS
Std : +33 1 55 93 26 00 - Fax : +33 1 55 93 26 01
*"SQLI Consulting, l'expert du conseil IT"*
www.sqli.com <http://www.sqli.com>

/----------------------------------------------------------------------------------
Ce message et toutes les pièces jointes (ci-après le "message") sont 
confidentiels et établis à l'intention exclusive de ses destinataires.
Toute utilisation ou diffusion non autorisée est interdite. Tout message 
électronique est susceptible d'altération.
---------------------------------------------------------------------------------- 

/




Plus d'informations sur la liste de diffusion Squeak-fr