Page 1 sur 1

Plus de précision sur les Modules

Publié : dim. 29/sept./2013 14:00
par Ar-S
Malgré l'exemple de la doc, je n'arrive pas à piger le but des modules. J'ai l'impression que ça ressemble aux structures (et encore) mais ça reste vague.

Si une bonne âme voulait bien montrer un exemple probant et simple et une explication je serai bien content.
En suivant l'exemple j'ai fait ceci. Je ne vois pas l’intérêt du module face à la structure, donc je me dis que son but est ailleurs, tout comme son point fort.

D'avance merci

Code : Tout sélectionner

; //// Modules //////////////////////

DeclareModule Clients
    Global ID = 0
    Global Total = 0
    Global Nom.s = ""
EndDeclareModule

Module Clients
EndModule



DeclareModule Dupont
EndDeclareModule

Module Dupont
UseModule Clients
ID+1
Total+1
Nom = "Dupont"
EndModule

Debug "// Modules //"
Debug Clients::Nom



DeclareModule Durand
EndDeclareModule

Module Durand
UseModule Clients
ID+1
Total+1
Nom = "Durand"
EndModule



Debug Clients::Nom
Debug ""


; //// Structure //////////////////////

Structure Clients
ID.i
Total.i
Nom.s
EndStructure

Dim Clients.Clients(1)

Nom.s = "Dugland"
For i = 0 To 1
    Clients(i)\ID + i
    Clients(i)\Total + 1
    Clients(i)\Nom = Nom.s
    Nom.s = "Dubras"
Next

Debug "// Structures //"
For i = 0 To 1
    Debug Clients(i)\Nom
Next

Re: Plus de précision sur les Modules

Publié : dim. 29/sept./2013 14:15
par Backup
je ne me suis pas encore interressé aux modules (sauf a l'instant ce qui concerne la syntaxe dans EPB... une vraie galere le mot "runtime" qui peut venir s'ajouter a Procedure , me mettait le cirque, pour la tabulation du code .... )

a part ça , ce que je crois en comprendre c'est :
qu'un module est une section de code , (une ou plusieurs procedure(s) par exemple )
qui peut etre appelé dans d'autre projet .... une sorte de librairie ....

donc on doit pouvoir se faire une collection de module , qu'on appel dans les codes ...
cependant, je vais etudier la chose apres avoir joué a WOT pour me detendre de mon dernier boulot sur EPB (pas encore en ligne)

:)

Re: Plus de précision sur les Modules

Publié : dim. 29/sept./2013 14:23
par comtois
Avant les modules on pouvait créer des fichiers 'pbi' qui contenaient des fonctions réutilisables pour différents codes. L'inconvénient avec ces fichiers c'est que les variables, les procédures, etc ne sont pas protégées, il peut y avoir des conflits de nom de variables ou procédures ou constantes entre les différents fichiers.

Comme dit ce matin dans un autre post, je vois les modules comme un moyen de créer des bibliothèques facilement réutilisables.
C'est aussi un moyen de travailler à plusieurs sur un projet en le découpant en modules. Chacun peut coder son module sans avoir à se soucier des noms de procédure et variables que les autres utiliseront.

J'ai commencé ce module

vector3.pbi

Code : Tout sélectionner

DeclareModule Vector3
  Structure Vector3
    x.f
    y.f
    z.f
  EndStructure  
  Declare Add(*R.Vector3, *V1.Vector3, *V2.Vector3)
  Declare Sub(*R.Vector3, *V1.Vector3, *V2.Vector3)
  Declare Mul(*R.Vector3, *V1.Vector3, *V2.Vector3)
  Declare Div(*R.Vector3, *V1.Vector3, *V2.Vector3)
  Declare Normalize(*V.Vector3)
  Declare.f DotProduct(*V1.Vector3, *V2.Vector3)
  Declare directionEquals(*V1.Vector3, *rhs.Vector3, tolerance.f)
  
EndDeclareModule

Module Vector3
  
  Procedure Add(*R.Vector3, *V1.Vector3, *V2.Vector3)
    *R\x = *V1\x + *V2\x
    *R\y = *V1\y + *V2\y
    *R\z = *V1\z + *V2\z
  EndProcedure
  
  Procedure Sub(*R.Vector3, *V1.Vector3, *V2.Vector3)
    *R\x = *V1\x - *V2\x
    *R\y = *V1\y - *V2\y
    *R\z = *V1\z - *V2\z
  EndProcedure 
  
  Procedure Mul(*R.Vector3, *V1.Vector3, *V2.Vector3)
    *R\x = *V1\x * *V2\x
    *R\y = *V1\y * *V2\y
    *R\z = *V1\z * *V2\z
  EndProcedure  
  
  Procedure Div(*R.Vector3, *V1.Vector3, *V2.Vector3)
    *R\x = *V1\x / *V2\x
    *R\y = *V1\y / *V2\y
    *R\z = *V1\z / *V2\z
  EndProcedure   
  
  Procedure.f DotProduct(*V1.Vector3, *V2.Vector3)
    ProcedureReturn *V1\x * *V2\x + *V1\y * *V2\y + *V1\z * *V2\z   
  EndProcedure  
  
  Procedure Normalize(*V.Vector3)
    Protected.f magSq, oneOverMag 
    
    magSq = *V\x * *V\x + *V\y * *V\y + *V\z * *V\z 
    If magsq > 0
      oneOverMag = 1.0 / Sqr(magSq)
      *V\x * oneOverMag
      *V\y * oneOverMag
      *V\z * oneOverMag
    EndIf  
  EndProcedure
  
  Procedure Length(*V.Vector3)
    ProcedureReturn Sqr(*V\x * *V\x + *V\y * *V\y + *V\z * *V\z) 
  EndProcedure
  
		; Returns whether this vector is within a directional tolerance of another vector.
		; @param rhs The vector To compare With
		; @param tolerance The maximum angle by which the vectors may vary And still be considered equal
		; @note Both vectors should be normalised.
		
		Procedure directionEquals(*V1.Vector3, *rhs.Vector3, tolerance.f)
		  Protected.f dot, angle
		  dot = Vector3::DotProduct(*V1, *rhs)
			angle = Degree(ACos(dot))
			ProcedureReturn Bool(Abs(angle) <= tolerance)
		EndProcedure  
EndModule

pour l'utiliser

Code : Tout sélectionner

XIncludeFile 'vector3.pbi"

Define.Vector3::Vector3 R, V1, V2

V1\x = 0
V1\y = 1
V1\z = 0
V2\x = 0.01
V2\y = 0.99
V2\z = 0

Vector3::Normalize(@V2)
Vector3::Add(@R, @V1, @V2)
Debug R\x 

Re: Plus de précision sur les Modules

Publié : dim. 29/sept./2013 14:55
par Ar-S
Je pense avoir compris.

Ai-je bon ?

Code : Tout sélectionner

; ================ INCLUDE ===============
; //// Modules //////////////////////

DeclareModule ArS
    Declare message(message.s)
EndDeclareModule

Module ArS

    Procedure Message(message.s)
        MessageRequester("Je viens du module",message.s,#PB_MessageRequester_Ok)
    EndProcedure

EndModule

; ================== PROG ===============




Procedure Message(nom.s)
    MessageRequester("je viens du programme",nom.s)
EndProcedure

message("Ai-je pigé ?")

; "Le procédure 'message()' ci-dessus n'entre pas en conflit avec celle du module importé"

Ars::message("Je le pense")
Je pige l’intérêt de pouvoir utiliser plein de modules externes sans se soucier des conflits de noms contrairement à de la Lib.
En revanche, un fichier "aide" deviendra vite nécessaire pour les packs de modules conséquents.

Re: Plus de précision sur les Modules

Publié : dim. 29/sept./2013 16:07
par Torp
Salut,


il y a un tuto sur le site du zero (maintenant OpenClassroom) qui explique super bien les Espaces de noms et la problématique des conflits de noms de variables dans les librairies:

http://fr.openclassrooms.com/informatiq ... namespaces

:wink:

Re: Plus de précision sur les Modules

Publié : dim. 29/sept./2013 20:04
par nico

Re: Plus de précision sur les Modules

Publié : jeu. 21/août/2014 12:22
par microdevweb
Perso j'utilise beaucoup les modules, car une fois développer plus besoins de se soucier de son contenu, on l'utilise simplement sans risque de conflit avec les autres variables. Vraiment pratique pour réutiliser du code

Re: Plus de précision sur les Modules

Publié : jeu. 21/août/2014 13:17
par graph100
Tiens, une pelle :

Image

j'ai devancé Dobro :lol:

Re: Plus de précision sur les Modules

Publié : jeu. 21/août/2014 14:31
par majikeyric
graph100 a écrit :j'ai devancé Dobro :lol:
Il a communiqué sur son site et explique qu'il arrête PB (et EPB!) (pour ceux qui ne le savent pas).

Re: Plus de précision sur les Modules

Publié : jeu. 21/août/2014 14:44
par graph100
mmh, ça ne change rien à mon post