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

VB 6 et antérieur Discussion :

Classe ou Module quelle est la difference?


Sujet :

VB 6 et antérieur

  1. #1
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut Classe ou Module quelle est la difference?
    Bonjour, voila j'ai besoin de savoir quelle est la différence en un module et une classe?

    Qu'est ce qu'on declare dans un module?
    Qu'est ce qu'on declare dans une classe?

    Et plus généralement avez vous de la doc sur l'organisation des OCX.

    Comment ce doit etre structurer.

    En attendant je vais aller sur http://activex.developpez.com

    Cordialement

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 730
    Points : 876
    Points
    876
    Par défaut
    Bonjour,

    pour vulgariser, je dirais :

    - un module est un espèce de form non graphique dans lequel tu définis tes variables, procédures et fonctions récurrentes, c'est à dire publiques à priori. Tu n'as pas besoin de faire référence au nom du module pour que ces variables/procédures etc. soient trouvées. Le fait de charger un élément d'un module chargera l'intégralité du module, d'où l'intérêt dans certains cas d'avoir plusieurs modules distincts.

    - un module de classe permet quant à lui de déclarer des "objets" comportant des propriétés, des méthodes et des événements. Tu trouveras beaucoup d'exemples sur la POO. Tu utilises déjà des classes sans le savoir en intégrant des références dans ton projet. Les déclarations sont alors obligatoires.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Exemple si tu as une classe ClsMaclass
    
    Dim MaClass as ClsMaclass
    
    Set MaClass = New ClsMaclass
    
    'puis en utilisant ton objet défini, tu accèdes aux propriétés, méthodes etc.
    
    MaClass.propriété
    Maclass.méthode
    MaClass.événement
    
    Set MaClass = Nothing
    Je suis sûr que tu auras encore beaucoup d'avis/d'exemples
    A vous messieurs

  3. #3
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Merci a toi! Je fais encore quelques recherches.

  4. #4
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Bon voila! J'ai encore besoin de précisions!

    Je developpe un controle ActiveX, jusqu'ici a la barbare.. C'est a dire : Toutes mes fonctions et procédures dans un module

    Les fonctions et procédure où je donne acces au client dans le code de l'usercontrol.

    Ma question est la suivante.

    Comment organiser mes classes et modules?

    Dans mes classes je mets toutes les fonctions et procédures de haut niveau.??
    Dans mes modules je mets toutes les fonctions et procédure de bas niveau, qui en générale sont utilisé dans les classes.??

    Je mets un peu de code de mon OCX Barbare:

    Le module
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    public volume as vtkVolume
    public plein d'autre variable comme Boolean...
     
     
    Public Function ouverture(path As String) As vtkImageShiftScale
     
    Dim image As New vtkImageReader
     
    '--------Ouverture des données
     
    image.SetFilePrefix path
    image.SetDataByteOrderToLittleEndian
    image.SetNumberOfScalarComponents 1
    image.SetFileDimensionality 2
    image.SetDataExtent 0, nbColumn - 1, 0, nbRaw - 1, 1, nbSlice
     
    Zsize = resz
    Ysize = resy
    Xsize = resx
     
    image.SetDataSpacing resx / nbColumn, resy / nbRaw, resz / nbSlice
    image.SetDataOrigin -resx / 2, -resy / 2, -resz / 2
     
    Dim shifter As New vtkImageShiftScale
     
    shifter.SetInput image.GetOutput
    shifter.SetOutputScalarTypeToUnsignedShort
     
    Set ouverture = shifter
     
    End Function
     
     
    Public Function voluming(data As vtkImageShiftScale) As vtkVolume
     
    '-----Definition du volume
     
    Dim volume As New vtkVolume
    Dim volumemapper As New vtkVolumeRayCastMapper
    Dim fonction As New vtkVolumeRayCastCompositeFunction
    volumemapper.SetVolumeRayCastFunction fonction
    volumemapper.SetInput data.GetOutput
    volume.SetMapper volumemapper
     
    Set voluming = volume
     
    End Function

    Dans mon usercontrol1 j'avais mis ca.

    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
    Public Function opening(path As String, nbColumn As Integer, nbRaw As Integer, nbSlice As Integer, FOVX As Integer, FOVY As Integer, FOVZ As Integer)
     
    Dim donnee As New vtkImageShiftScale
    Set donnee = ouverture(path)
    Dim vol As New vtkVolume
    Set vol = voluming(donnee)
    vol.SetProperty propertyF()
    Urender.AddActor vol
    Set volume = vol
    Urender.ResetCamera
    Urenwin.render
     
    Check1.Enabled = True
     
    End Function
    Voila, je sais c'est un peu le souk! C'est pour ca que je suis la...

    Est ce que dans mon module je dois declarer mes variables public comme des property? Mais il faut savoir la dedans que j'ai des objets public afin que lon puisse charger un flow de données de n'importe ou ... j'espere que l'on peut charger une property facilement et la lire aussi.


    Ensuite est ce que je declare les fonctions dont le client aura acces dans une CLASSE?

    Merci de votre attention. Cordialement.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Salut,

    Un module en VB6, c'est un espace de stockage de méthodes, fonctions et variables qui peuvent (c'est le but) être accédées depuis tout le projet (respectivement le module seulement) si elles sont déclarées en public (respectivement en privé).

    Tout ce que tu sens pouvoir factoriser, ça va dans un module.

    Les classes, c'est différent.

    1) Classe multi-use :
    => Nécessite une instanciation pour pouvoir être utilisée (new ...)
    => Représentation objet conventionnelle.

    2) Classe global multiuse :
    => Ne nécessite pas d'instanciation pour pouvoir être utilisée depuis un autre projet, tout ce qui y est présent et déclaré en "public" est visible depuis le reste du monde ayant référencé le composant activex (le projet).
    => Est inaccessible depuis le projet lui-même
    => Peut s'auto accéder.

    S'il manque quelque chose n'hésite pas.
    a+

  6. #6
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par parp1
    Bonjour, voila j'ai besoin de savoir quelle est la différence en un module et une classe?

    Qu'est ce qu'on declare dans un module?
    Qu'est ce qu'on declare dans une classe?

    Et plus généralement avez vous de la doc sur l'organisation des OCX.

    Comment ce doit etre structurer.

    En attendant je vais aller sur http://activex.developpez.com

    Cordialement
    Bonjour,

    Tiens un rédacteur qui ne regarde pas la FAQ ...

    Pour info la différence entre les 2 est expliquer ici

    Théo

  7. #7
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Autrement dit, si tu veux faire de la vraie (ou presque) POO avec VB, tu crée des classes d'objets utilisable dans tout ton projet. Si tu veux juste rendre des procédures et fonctions visible dans tout le projet sans nécessairement en faire des objets comme en vraie POO, tu utilises des modules. La notion de modules de code (fichiers .bas) est issue de vielles pratiques de programmation en Basic. C'est plus vieux que la POO.

    Note : POO pour Programmation Orientée Objet, t'avais deviné!

  8. #8
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Citation Envoyé par Theocourant
    Bonjour,

    Tiens un rédacteur qui ne regarde pas la FAQ ...

    Pour info la différence entre les 2 est expliquer ici

    Théo
    JE sais je mérite qu'on .. ...

    Juste une dernière affirmation ... si je déclare ca dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Bool As Boolean
    Bool sera accessible partout dans le module...que ca soit des procédure ou fonction... mais pas ailleurs c'est bien ca (je parle des classes et usercontrol..)

    Dites moi Oui s'il vous plait.....

  9. #9
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Oui, si tu déclares ta variable dans la section Declaration, bien sur.

  10. #10
    Membre éclairé
    Avatar de Theocourant
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 618
    Points : 739
    Points
    739
    Par défaut
    Citation Envoyé par parp1
    Juste une dernière affirmation ... si je déclare ca dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Private Bool As Boolean
    Bool sera accessible partout dans le module...que ca soit des procédure ou fonction... mais pas ailleurs c'est bien ca (je parle des classes et usercontrol..)

    Dites moi Oui s'il vous plait.....
    Oui il sera disponible uniquement dans le module.

  11. #11
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    EH Bien merci a vous tous, maintenant j'y voie plus claire.

  12. #12
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Scope en fonction du déclarateur et du contexte :

    Private :
    => Module : seulement dans le module
    => Classe : seulement dans la classe
    => Controle utilisateur (ctl) : seulement dans le contrôle

    Public :
    => Module : Dans tout le projet hébergeant le module
    => Classe multi use : depuis tout objet instanciant la classe
    => Classe global multi use : depuis la classe ou tout autre projet référençant le projet en cours
    => Controle utilisateur (ctl) : depuis toute instance du contrôle, dans ou hors du projet si celui-ci est un contrôle activex.

  13. #13
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Bon, si je puis me permettre

    L'utilisation de variables globales dans un module est dangereuse dans le cas de l'ecriture d'un composant activeX. Je sais , elle ne devrait pas

    Quand on place plusieurs fois le même composant activeX sur un feuille, les données du module sont communes a tous les composants! ce qui va à l'encontre de la POO.
    Mieux vaut garder l'utilisation des module pour n'y mettre que des sub et des fonctions.
    Bien sur , ce n'est qu'un avis personnel

  14. #14
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    je ne suis pas sur de comprendre, je vais essayer avec un exemple.

    Soit un projet composant activex :

    module1.bas => compteur : public intCount as integer
    controle.ctl => A chaque initialisation intCount = intCount + 1

    Binaire = composant.ocx

    Soit un projet quelconque, utilisant le composant.
    Si j'ajoute deux instances du composant.ocx dans ma feuille, et que j'interroge l'un des deux, le count sera égal à 2 ???

  15. #15
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Fais l'essai, tu comprendras vite que oui

  16. #16
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    c'est étrange parceque pour les DLL activex c'est exactement le contraire, si tu stockes une variable dans la classe global multi use elle est partagée par contre si tu la mets dans un module du projet elle est privée à chaque appelant ...

  17. #17
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Et moi, il me semble bien que le module et ses varibles globales est part&=agé entre les diférentes instances du composant. mais là, je suis empli de doute, je vérifie.

  18. #18
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    lol, je ne retrouvais plus le post
    J'ai vérifié, je persiste et signe, les variables publiques, dans un module incorporé dans un composant, sont partagées entre toutes les occurences de ce composant:
    Démonstration:
    1°) creer un nouveau projet standard
    2°) ajouter à ce projet un nouveau projet de composant
    3°) mettre ce code dans le composant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'm_Caption sera defini comme Public dans un module du composant
    'Dim m_Caption As Variant
    Public Property Get Caption() As Variant
      Caption = m_Caption
    End Property
    Public Property Let Caption(ByVal New_Caption As Variant)
      m_Caption = New_Caption
    End Property
    Private Sub UserControl_InitProperties()
      m_Caption = ""
    End Sub
    4°) ajouter un module à ce composant et y mettre ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public m_Caption As Variant
    5°) revenir sur le projet standard et y ajouter 2 composants (avec celui qu'on vient de créer bien evidemment)
    6°) ajouter ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Command1_Click()
      UserControl11.Caption = "test"
      MsgBox "Contenu du 2eme UserControl : " & UserControl12.Caption
    End Sub


    J'ajouterais que le même phénomène se produit avec des forms ajoutées aux composants, ce qui explique le dernier problème d'avigielpro (que je salues au passage) avec son handle de fenetre dans ce post

  19. #19
    Membre éclairé
    Avatar de parp1
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    829
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Mai 2005
    Messages : 829
    Points : 872
    Points
    872
    Par défaut
    Merci encore, je commence a vraiment bien cerné tout ca...

  20. #20
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    Quand tu dis
    2°) ajouter à ce projet un nouveau projet de composant
    Tu veux dire "référencer" un projet de composant dans le projet principal ? Autrement dit ajouter un composant par l'intermédiaire du menu des composants du projet c'est ça ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/02/2008, 09h40
  2. Réponses: 2
    Dernier message: 19/05/2007, 21h51
  3. Quelle est la difference entre MBUnit et NUnit?
    Par wrida dans le forum Framework .NET
    Réponses: 2
    Dernier message: 21/02/2007, 12h09
  4. Réponses: 5
    Dernier message: 24/05/2006, 22h14
  5. Réponses: 1
    Dernier message: 27/04/2006, 20h49

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