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

Langages Discussion :

C'est quoi un Module et son équivalent dans les autres langages que VB


Sujet :

Langages

  1. #1
    bruce-willis
    Invité(e)
    Par défaut C'est quoi un Module et son équivalent dans les autres langages que VB
    Bonjour,

    En utilisant un code source vb.net que j'ai trouvé sur le net, j'ai trouvé ce code
    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Module ModuleGlobals
        Public gUserStatus As New UserStatus 
    End Module
    A en voir, il semble s'agir d'un fichier pour contenir des variables globales utilisables dans tout le projet.

    C'est en vb.net mais est-ce que cela existe en C# ou C++ .net? Pouvez vous me donner un exemple de syntaxe?

  2. #2
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    En C# ça correspond à une classe dites "statique" donc non instanciable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public static class ModuleGlobals
    {
        public static gUserStatus As new UserStatus(); 
    }
    EDIT : j'avais oublié de déclarer gUserStatus en static

    et tu y accèdes de cette façon dans le reste de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ModuleGlobals.gUserStatus
    Pascal

  3. #3
    Membre expérimenté
    Avatar de randriano
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 219
    Points : 1 438
    Points
    1 438
    Par défaut
    Citation Envoyé par _PascalC_ Voir le message
    En C# ça correspond à une classe dites "statique" donc non instanciable
    Ah bon! Je suis un peu novice aux langages VB, habitué des variantes de C.

    Donc il n'y a pas de Static Class en VB.NET?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    si mais microsoft a voulu perturber le moins possible les developpeur VB6

    Bon ils ont fait des progrès, ils ont mets la pluspart des "trucs vb6" dans un namespace different.

  5. #5
    Membre averti Avatar de _PascalC_
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2008
    Messages
    220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2008
    Messages : 220
    Points : 428
    Points
    428
    Par défaut
    A moins que ça est changé dans la dernière version de VB.NET tu ne peux pas déclarer une classe "static" (Shared en VB). Soit tu utilises un Module ou bien soit tu déclares une classe avec un constructeur privé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public Class ModuleGlobals
     
         Public Shared gUserStatus As New UserStatus
     
         private sub new()
         end sub 
     
    End Class
    NB : j'ai modifié mon message ce matin car il y avait une petite erreur dans e code exemple.

    Pascal

  6. #6
    bruce-willis
    Invité(e)
    Par défaut
    Merci _PascalC_ pour ces précisions, je vais rester à "Module" pour VB et "Static Class" pour C#.

    Citation Envoyé par BenoitM
    Bon ils ont fait des progrès, ils ont mets la pluspart des "trucs vb6" dans un namespace différent.
    Plus d'explications?

  7. #7
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    Avant tu pouvais appeler VbCrLf, Mid, LTrim et d'autres trucs du genre qui viennent du VB6 sans problème.
    Maintenant,tu dois importer le namespace avant de pouvoir les utiliser, je suppose que ca va forcer les programmeurs à utiliser les versions qui sont communes au .Net
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TrimString = Trim(TestString) // façon VB6 Trim sort de nulle part
    TrimString =firstName.Trim()  // façon POO Trim est une méthode de la class string
    si tu n'importes pas le namespace impossible de mettre un VbCrLf, tu dois passer par Environment.NewLine qui est compatible avec le C#

  8. #8
    bruce-willis
    Invité(e)
    Par défaut
    Voici mon test avec Static Class pour l'équivalent de Module en C#
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace Biblio
    {
        public static class ModuleGlobals
        {
            public static UserStatus gUserStatus = new UserStatus ();
        }
    }
    Mais il y a une erreur donc on ne peut pas compiler: Inconsistent accessibility: field type 'Biblio.UserStatus ' is less accessible than field 'Biblio.ModuleGlobals.gUserStatus'

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Cela dit, l'utilisation de variables "globales" dans des modules (ou classes statiques) est plutôt à proscrire: c'est pas dans l'esprit de POO.
    (Sauf cas particuliers comme par exemple la classe Math)

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Cela dit, l'utilisation de variables "globales" dans des modules (ou classes statiques) est plutôt à proscrire: c'est pas dans l'esprit de POO.
    (Sauf cas particuliers comme par exemple la classe Math)
    tu ne stocks pas le nom et la langue de l'utilisateur, la connection string dans des variables globales?

    De plus l'appconfig n'est-il pas une super variable globale?

  11. #11
    bruce-willis
    Invité(e)
    Par défaut
    Concernant l'erreur que j'avais, c'était juste un oubli de mettre "public" pour la classe UserStatus!

    Concernant le fait que l'utilisation de variables "globales" dans des modules (ou classes statiques) est à proscrire, que doit-on faire alors? Il faut bien que l'utilise pour la session utilisateur (en application Windows) qui contient l'ID de l'utilisateur connecté, sa langue préférée, etc.

  12. #12
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    tu ne stocks pas le nom et la langue de l'utilisateur, la connection string dans des variables globales?

    De plus l'appconfig n'est-il pas une super variable globale?
    Non! Pas tout à fait en fait...
    J'ai une classe qui contient ce genre de trucs en effet mais elle n'est pas statique, j'utilise toujours une instance unique (via un singleton ou un conteneur). Tout ca pour des raisons de découplage.
    Explication: Imaginons une classe UserSettings statique. Si je veux changer le comportement, c'est un peu le bazar. En plus, je n'ai pas trop le controle sur quand les champs sont initialisés (dur de controler l'appel au controleur statique).
    Ce que je prefere faire c'est une interface IUserSettings et une classe non statique qui l'implémente. Partout après, je me trimballe cette instance manipulée uniquement via mon interface. Mais ca me permet d'avoir plusieurs classes qui implémentent IUserSettings du genre IsolatedStorageUserSettings ou DatabaseUserSettings ou XmlUserSettings etc.

  13. #13
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    Oui certes c'est plus joli et c'est vrai que c'est le genre de code que tu reprends à chaque fois mais au risque de me faire tapper sur les doigts je ne suis pas sur qu'on s'amuse à ca pour des petits projets

  14. #14
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par BenoitM Voir le message
    Oui certes c'est plus joli et c'est vrai que c'est le genre de code que tu reprends à chaque fois mais au risque de me faire tapper sur les doigts je ne suis pas sur qu'on s'amuse à ca pour des petits projets
    Les bonnes pratiques restent des bonnes pratiques
    C'est une habitude à prendre qui peut tellement faire la différence (surtout en milieu pro).
    Surtout celle la qui n'est pas forcément plus lourde à coder.
    Et les petits projets finissent souvent en grosse usine à gaz (surtout si il y a eu une "économie" de bonnes pratiques parce que "pas le temps" ou "ca sert pas, c'est qu'un petit projet").
    Le gain ne se voit peut être pas au développement mais à la maintenance c'est gagnant à tous les coups!

  15. #15
    bruce-willis
    Invité(e)
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    Explication: Imaginons une classe UserSettings statique. Si je veux changer le comportement, c'est un peu le bazar. En plus, je n'ai pas trop le controle sur quand les champs sont initialisés (dur de controler l'appel au controleur statique).
    Ce que je prefere faire c'est une interface IUserSettings et une classe non statique qui l'implémente. Partout après, je me trimballe cette instance manipulée uniquement via mon interface. Mais ca me permet d'avoir plusieurs classes qui implémentent IUserSettings du genre IsolatedStorageUserSettings ou DatabaseUserSettings ou XmlUserSettings etc.
    Je suis tout à fait d'accord avec toi sur l'usage de la "bonne" pratique et j'aimerais m'initier.
    Mais est-ce que tu peux détailler un peu plus ce que j'ai cité là? Par des exemples de code.
    J'ai pas bien compris aussi que: est-ce que l'utilisation du Module de vb.net est donc pas très conseillée?

  16. #16
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Points : 8 082
    Points
    8 082
    Par défaut
    Citation Envoyé par bruce-willis Voir le message
    Je suis tout à fait d'accord avec toi sur l'usage de la "bonne" pratique et j'aimerais m'initier.
    Mais est-ce que tu peux détailler un peu plus ce que j'ai cité là? Par des exemples de code.
    J'ai pas bien compris aussi que: est-ce que l'utilisation du Module de vb.net est donc pas très conseillée?
    Il y'a une foule de choses utilisables en VB.Net qui ne sont pas du tout conseillées mais qui sont là pour ne pas brusquer les gens de VB6 (comme indiqué ci au dessus). Contrairement à VB.Net, VB6 n'est pas un language objet. Le problème c'est que pas mal de programmeur utilise toujours VB.Net pas comme un language de POO.

    Pour des exemples, y a pas grand chose à dire. Je dirais que d'une manière générale, lorsque tu as une classe statique qui contient des attributs statiques, il vaut mieux créer une instance accessible par un singleton.
    http://en.wikipedia.org/wiki/Singleton_pattern

  17. #17
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495

  18. #18
    bruce-willis
    Invité(e)
    Par défaut
    Merci BenoitM pour ces liens, je préfère suivre le tuto de webman!

    Pour conclure, vaut mieux utiliser ça (singleton) pour les variables globales?

  19. #19
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Février 2003
    Messages
    2 181
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2003
    Messages : 2 181
    Points : 4 495
    Points
    4 495
    Par défaut
    En fait c'est des liens sur l'architectures et les bonnes pratiques, un seul parle du singleton
    Le premier parle du modèle en couche (découpe d'un projet)
    Le 3eme est sur le WPF et le modèle mvvm qui est une découpe de IHM(interface homme machine)

    (Une petite recherche sur les design pattern peut-être utile pour voir les différentes bonnes pratiques et donne des idées de leurs utilisations)

    Pour répondre à ta question

    Il y a plusieurs type de variables qui sont stocker dans des modules:
    1) Les constantes
    Elles sont souvent a stocker dans des enums
    Exemple ModeAffichage : Lecture=0,Modification=1,SuperUtilisateur=2

    2) Les UserSettings
    L'utilisation d'une interface, et du classe en mode singleton apporterons d'avantage de souplesse qu'une classe définie en statique

    L'utilisation d'un Module (classe mode statique)

    L'utilisation de l'appSetting (la classe singleton et module utilisera surement l'appsetting ou (pas si tu stock les informations en BD))

    Comme la dit Nathananel la premiere approche est la plus élégante et celle qui permet la plus grande souplesse et donc celle à privilégier

    Personnellement j'utilise parfois la manière la plus bourrine dans le cadre de mes utilitaires personnels mais l'implémenter dans de petits projets permet aussi de se forger la main

    Et si tu fais de la conversion de projet, il faut faire attention qu'en général en VB6 on a tendance à créer un seul module qui contient toutes les constantes/variables globales ce qui à proscrire en POO.
    Tu dois crée une classe /enum pour chaque type

  20. #20
    bruce-willis
    Invité(e)
    Par défaut
    Non, je ne fais de conversion vb6->vb.net!

    J'ai seulement vu l'utilisation en vb.net du module pour 2) Les UserSettings

    Or je suis sous C# et j'écris une application windows.

Discussions similaires

  1. équivalent de (1..$nb) dans les autres langages que Perl
    Par zoscoy dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 11/03/2015, 15h11
  2. Réponses: 0
    Dernier message: 08/03/2010, 15h27
  3. couper un son chargé dans un autre swf ?
    Par BillTornade2b dans le forum Intégration
    Réponses: 15
    Dernier message: 04/06/2007, 16h42
  4. [JVM]C'est quoi la méthode clinit ? Son utilité ?
    Par elitost dans le forum Langage
    Réponses: 1
    Dernier message: 23/03/2006, 14h15

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