A l'aide : Interface comment on fait ???

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

A l'aide : Interface comment on fait ???

Message par lionel_om »

Bonjour
je voulais voir comment marchée les interfaces (classes en C++).
Mais je n'ai pas d'exemple et je n'arrive pas a voir comment on associe qqchose aux méthodes créées.

Est-ce que qq pourrai me faire une conversion de ce petit code, c'ets juste pour voir comment on les utilisent, je me débrouillerai tt seul après :

Code : Tout sélectionner

class Carre {
   int _x;
   Carre(int a) { _x = a; }
   ~Carre() {;}

    void reSize(int a) { _x = a; }
    int getSize() {return _x; }
}
Merci bien !!! :)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Je n'ai que des exemples compliqués sous la main : utilisation de WMI.

C'est plutôt ça qui doit t'intéresser : code de Flype (démo d'implémentation d'interfaces)

Code : Tout sélectionner

;/--------------------------------------------------- 
;- DECLARATION DES METHODES DE L'OBJET 
;/--------------------------------------------------- 

Interface Poule 
  Picorer() 
  Pondre ( Nom.s ) 
  Chanter( Message.s ) 
EndInterface 

Structure Poule_TableVirtuelle 
  Picorer.l 
  Pondre.l 
  Chanter.l 
EndStructure 

;/--------------------------------------------------- 
;- DECLARATION DES ATTRIBUTS DE L'OBJET 
;/--------------------------------------------------- 

Structure Poule_Structure 
  *TableVirtuelle.Poule_TableVirtuelle ; Indispensable 
  Nom.s 
  Couleur.s 
  NombreOeufs.l 
EndStructure 

;/--------------------------------------------------- 
;- DECLARATION DES PROCEDURES DE L'OBJET 
;/--------------------------------------------------- 

Declare CreerPoule( Parametres.s ) 
Declare Picorer   ( *Self.Poule_Structure ) 
Declare Pondre    ( *Self.Poule_Structure, Parametre.s ) 
Declare Chanter   ( *Self.Poule_Structure, Message.s ) 

;/--------------------------------------------------- 
;- DEFINITION DES METHODES DE L'OBJET 
;/--------------------------------------------------- 

Procedure Picorer( *Self.Poule_Structure ) 
  Debug *Self\Nom + " vient de picorer" 
EndProcedure 

Procedure Pondre( *Self.Poule_Structure, Parametres.s ) 
  *Self\NombreOeufs + 1 
  Debug *Self\Nom + " vient de pondre" 
  ProcedureReturn CreerPoule( Parametres ) 
EndProcedure 

Procedure Chanter( *Self.Poule_Structure, Message.s ) 
  Debug PeekS(*Self\Nom) + " chante " + Message 
EndProcedure 

;/--------------------------------------------------- 
;- ATTACHEMENT DES METHODES A L'OBJET 
;/--------------------------------------------------- 

Global Poule_Global.Poule_TableVirtuelle 

Poule_Global\Picorer = @Picorer() 
Poule_Global\Pondre  = @Pondre() 
Poule_Global\Chanter = @Chanter() 

;/--------------------------------------------------- 
;- CREATION D UNE LISTE CONTENANT LES OBJETS 
;/--------------------------------------------------- 

NewList Instances.Poule_Structure() 

;/--------------------------------------------------- 
;- DEFINITION DU CONSTRUCTEUR : CREATION D'UN OBJET 
;/--------------------------------------------------- 

Procedure.l CreerPoule( Parametres.s ) 
  Nom.s     = StringField( Parametres, 1, ";" ) 
  Couleur.s = StringField( Parametres, 2, ";" ) 
  AddElement(Instances()) 
  Instances()\TableVirtuelle = Poule_Global 
  Instances()\Nom         = Nom 
  Instances()\Couleur     = Couleur 
  Instances()\NombreOeufs = 0 
  Debug Nom + " vient de naitre. Ho ! elle est " + Couleur 
  ProcedureReturn @Instances() 
EndProcedure 

;/--------------------------------------------------- 
;- PROGRAMME PRINCIPAL 
;/--------------------------------------------------- 

Poule1.Poule = CreerPoule("Poule De Basse Cours;Marron") 
Poule2.Poule = CreerPoule( "Poule De Luxe;Jaune" ) 
Debug "---" 
Poule1\Picorer() 
Poule1\Picorer() 
Poule1\Picorer() 
Poule3.Poule = Poule1\Pondre( "Poulette;Noire" ) 
Poule4.Poule = Poule1\Pondre( "Poussin;Bleu" ) 
Debug "---" 
Poule2\Picorer() 
Poule2\Chanter("Cocoricooo") 
Poule2\Picorer() 
Poule2\Chanter("Cocorico") 
Debug "---" 
Poule3\Picorer() 
Poule3\Chanter("CuiCui") 
Debug "---" 
ForEach Instances() 
  Debug Instances()\Nom + " a donc pondu "+Str(Instances()\NombreOeufs) + " oeufs" 
Next 
Debug "---" 
ForEach Instances() 
  x.Poule=Instances() 
  x\Chanter("Au revoir") 
Next 
Debug "---" 
Debug "Fin" 
End 
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

@Hardy
S'il y a des poules qui chantent "coccorico", c'est pas des poules mais des coqs :lol:
Ps Exposé très clair 8)
Est beau ce qui plaît sans concept :)
Speedy Galerie
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

Il y a aussi le code que j'ai posté dans Trucs & Astuces. http://purebasic.hmt-forum.com/viewtopic.php?t=2089
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

oki ca m'éclaire pas mal.
Mais en fait les procédure sont justes déclarées dans l'interface, mais il faut les coder plus bas dans le programme.

Donc on ne peut pas avoir une méthode 'getSize()' appartenant à certaine interface et une méthode 'getSize()' que l'on utilise pour une autre interface ???

:? C'est pas cool ca !!!

Et on peut importer nos classes faites en C++ ???
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
hardy
Messages : 333
Inscription : mer. 02/juin/2004 13:19
Localisation : Tours

Message par hardy »

Si, tu peux avoir des méthodes de même nom pour des interfaces différentes.
Mais tu utilises des noms différents pour les définir.
Par exemple, si tu as déclaré deux interfaces avec une méthode picorer, disons poule1 et poule2, tu fais Poule_Global\Picorer = @Picorer1() dans la construction de la première interface, et Poule_Global\Picorer = @Picorer2() pour la seconde.

En ce qui me concerne, je ne fais pas de prog orientée objet pour le plaisir, mais utilise des interfaces pour accéder à divers outils Microsoft, notamment WMI.
La plupart sont déjà déclarée en PB, donc pas à les construire.
Y'a juste à les initialiser avec les fonctions windows adéquates.
lionel_om
Messages : 1500
Inscription : jeu. 25/mars/2004 11:23
Localisation : Sophia Antipolis (Nice)
Contact :

Message par lionel_om »

Daccord et j'imagine qu'il faut rechercher dans l'API pour retrouver tout ce qu'il y a dans PB ??? (on peut la consulter où dailleurs ???)
Webmestre de Basic-univers
Participez à son extension: ajouter vos programmes et partagez vos codes !
Répondre