[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