2010-08-18 7 views
3

Je ne suis pas un concepteur de programme mais je voudrais vraiment commencer à mieux comprendre comment le faire et mieux comprendre les langages .NET en général (VB, C#). Je lisais un livre de Wrox - Professional Visual Basic 2008. J'y croyais que les modules disparaissaient lentement. Je peux voir pourquoi la plupart des codages iraient dans un objet de classe mais je supposerais que les modules seraient toujours nécessaires pour au moins garder le code propre.Les modules sont-ils encore couramment utilisés dans les structures de programme?

Quelqu'un pourrait-il clarifier cela pour moi? En outre, j'ai été à la recherche d'une bonne source sur la conception de logiciels, mais je n'arrive pas à trouver des livres récents publiés. Je pourrais chercher dans les mauvais endroits mais j'aimerais vraiment mettre la main sur un.

Merci.

Répondre

4

Alors qu'en général, ils ne sont pas tout à fait en forme avec POO, ils sont encore utilisés et sont nécessaires dans certains cas.

En VB.Net, si vous souhaitez écrire des méthodes d'extension, vous allez devoir utiliser un module - Le compilateur ne permettra Méthodes d'extension à définir dans un.

Vous pouvez obtenir des cours rond ne pas utiliser les modules - une classe non Héritable avec un constructeur privé et rien que partagés méthodes n'atteint la même chose que d'un module.

Comme tout dans la programmation (et bien d'autres choses), ils ont leur utilité, et aussi longtemps qu'ils ne sont pas manquer utilisés il n'y a pas de problème avec eux. Bon outil pour le travail!

0

Les modules sont la chose la plus proche VB a des classes statiques, qui peuvent être très utiles, même lors de la programmation dans un environnement orienté objet.

Et puisque VB n'a pas de classes statiques, les modules sont autant que je sache, la seule façon de créer des méthodes d'extension.

0

Vous avez besoin des modules afin de définir votre propre Extension methods

+0

Nous vous remercions de votre réponse.Je n'ai même jamais entendu parler des méthodes d'extension, mais je vois qu'elles ne peuvent SE FAIRE qu'en modules, et bien que cela réponde à ma question, j'étais plus préoccupé par la structure des programmes et l'utilisation des modules. –

3

Le mot-clé Module dans VB.NET existe principalement pour la compatibilité avec VB6 et les versions antérieures. À l'époque, la plupart des codes VB étaient procéduraux et comportaient des fonctions et des sous-classes autonomes. La langue a acquis le mot-clé Class autour de VB4. Pas de vraies classes au sens de la POO, elle ne supportait pas l'héritage. Une fonctionnalité manquante dans l'architecture COM sous-jacente.

Il ne s'adapte pas très bien au modèle d'exécution fourni par le CLR. Il n'y a pas de support pour les fonctions libres, chaque méthode doit être membre d'une classe. Le compilateur VB.NET émule des modules en déclarant une classe, les procédures de module deviennent des méthodes partagées de cette classe. Vous pouvez le voir avec Ildasm.exe:

.class private auto ansi sealed ConsoleApplication1.Module1 
     extends [mscorlib]System.Object 
{ 
    .custom instance void [Microsoft.VisualBasic]Microsoft.VisualBasic.CompilerServices.StandardModuleAttribute::.ctor() = (01 00 00 00) 
} // end of class ConsoleApplication1.Module1 

Notez comment il est privé, de sorte que le code ne peut pas obtenir une référence, et scellé, de sorte qu'aucun code peut dériver une classe à partir d'un module.

Le compilateur C# ne exactement la même chose avec une « classe statique », le CLR ne dispose pas d'une notion de classes statiques non plus. Il y a beaucoup de bonnes raisons pour les classes statiques, l'idée de "Module" n'est pas obsolète. Vous pouvez accomplir la même chose en déclarant une classe NotInheritable dans le code VB.NET, n'ayant que des méthodes partagées. Le compilateur VB.NET n'applique cependant pas les méthodes à partager comme le compilateur C# et ne vous permet pas de déclarer la classe privée. En tant que tel, un module est très bien.

+0

+1 Vous donnez une très bonne explication des modules. J'ai migré à partir de 3 ans de VB6 et j'utilise VB.NET depuis plus de 5 ans mais je n'avais pas prêté beaucoup d'attention à ce détail. Merci pour l'info. –