Modules, structures et classes

Organisation d'application 101 - Les bases

Femme d

Siri Stafford/Vision numérique/Getty Images





Il n'y a que trois façons d'organiser un VB.NET application.

  • Modules
  • Ouvrages
  • Des classes

Mais la plupart des articles techniques supposent que vous savez déjà tout à leur sujet. Si vous êtes l'un des nombreux qui ont encore quelques questions, vous pouvez simplement lire au-delà des éléments déroutants et essayer de le comprendre quand même. Et si vous avez un parcelle de temps, vous pouvez commencer à chercher à travers Microsoft Documentation:



  • 'Un module est un fichier exécutable portable, tel que type.dll ou application.exe, composé d'une ou plusieurs classes et interfaces.'
  • 'Une instruction Class définit un nouveau type de données.'
  • 'L'instruction Structure définit un type de valeur composite que vous pouvez personnaliser.'

Bon, alors. Des questions?

Pour être un peu plus juste envers Microsoft, ils ont des pages et des pages (et plus de pages) d'informations sur tout cela que vous pouvez parcourir. Et ils doivent être aussi précis que possible car ils établissent la norme. En d'autres termes, la documentation de Microsoft se lit parfois comme un livre de droit parce qu'elle est un livre de droit.



Mais si vous venez d'apprendre .NET, cela peut être très déroutant ! Vous devez commencer quelque part. Comprendre les trois manières fondamentales d'écrire du code dans VB.NET est un bon point de départ.

Tu peux écrire VB.NET code en utilisant l'une de ces trois formes. En d'autres termes, vous pouvez créer un Application de la console dans VB.NET Express et écrivez :

ModuleModule1
Principal sous()
MsgBox('Ceci est un module !')
Sous-titre de fin
Terminer le module
Classe Classe1
Principal sous()
MsgBox('Ceci est une classe')
Sous-titre de fin
Fin de classe
Structure Structure1
Dim myString As String
Principal sous()
MsgBox('Ceci est une Structure')
Sous-titre de fin
Structure finale

Cela ne fait pas n'importe quel sens comme un programme, bien sûr. Le fait est que vous n'obtenez pas d'erreur de syntaxe, donc c'est 'légal' Code VB.NET .



Ces trois formes sont le seul moyen de coder la racine reine des abeilles de tout .NET : l'objet. Le seul élément qui interrompt la symétrie des trois formes est l'énoncé : Dim myString As String . Cela a à voir avec une structure étant un 'type de données composite' comme l'indique Microsoft dans sa définition.

Une autre chose à noter est que les trois blocs ont un Principal sous() en eux. L'un des principes les plus fondamentaux de la POO est généralement appelé encapsulation . C'est l'effet 'boîte noire'. En d'autres termes, vous devriez être capable de traiter chaque objet indépendamment et cela inclut l'utilisation de sous-programmes portant le même nom si vous le souhaitez.



Des classes

Les cours sont le « bon » point de départ car, comme Microsoft note, 'Une classe est un bloc de construction fondamental de la programmation orientée objet (POO).' En fait, certains auteurs traitent les modules et les structures comme des types particuliers de classes. Une classe est plus orientée objet qu'un module car il est possible de instancier (faire une copie de) une classe mais pas un module.

En d'autres termes, vous pouvez coder ...



Formulaire de classe publique1
Sous-formulaire privé1_Load( _
Expéditeur ByVal As System.Object, _
ByVal e As System.EventArgs) _
Gère MyBase.Load
Dim myNewClass As Class1 = New Class1
maNouvelleClasse.ClassSub()
Sous-titre de fin
Fin de classe

(L'instanciation de la classe est soulignée.)



Peu importe que la classe elle-même, dans ce cas, ...

Classe publique Classe1
Sous ClasseSub()
MsgBox('Ceci est une classe')
Sous-titre de fin
Fin de classe

... est dans un fichier en soi ou fait partie du même fichier avec le Formulaire 1 code. Le programme fonctionne exactement de la même manière. (Remarquerez que Formulaire 1 est une classe aussi.)

Vous pouvez également écrire du code de classe qui se comporte un peu comme un module, c'est-à-dire sans l'instancier. Cela s'appelle un partagé classer. L'article 'Static' (c'est-à-dire 'Shared') versus Dynamic Types dans VB.NET explique cela de manière beaucoup plus détaillée.

Il convient également de garder à l'esprit un autre fait concernant les classes. Membres (propriétés et méthodes) de la classe n'existent que tant que l'instance de la classe existe. Le nom de ceci est délimitation . C'est le portée d'une instance d'une classe est limitée. Le code ci-dessus peut être modifié pour illustrer ce point de la manière suivante :

Formulaire de classe publique1
Sous-formulaire privé1_Load( _
Expéditeur ByVal As System.Object, _
ByVal e As System.EventArgs) _
Gère MyBase.Load
Dim myNewClass As Class1 = New Class1
maNouvelleClasse.ClassSub()
maNouvelleClasse = Rien
maNouvelleClasse.ClassSub()
Sous-titre de fin
Fin de classe

Quand la seconde maNouvelleClasse.ClassSub() instruction est exécutée, une NullReferenceException l'erreur est renvoyée car le ClassSub le membre n'existe pas.

Modules

Dans VB 6, il était courant de voir des programmes dont la majeure partie du code se trouvait dans un module (A .BAS , fichier plutôt que, par exemple, dans un Formulaire fichier tel que Form1.frm .) Dans VB.NET, les modules et les classes sont dans .VB des dossiers. La principale raison pour laquelle les modules sont inclus dans VB.NET est de donner aux programmeurs un moyen d'organiser leurs systèmes en mettant du code à différents endroits pour affiner la portée et l'accès pour leur code . (C'est-à-dire la durée d'existence des membres du module et quel autre code peut référencer et utiliser les membres.) Parfois, vous souhaiterez peut-être placer du code dans des modules séparés simplement pour faciliter l'utilisation.

Tous les modules VB.NET sont partagé car ils ne peuvent pas être instanciés (voir ci-dessus) et ils peuvent être marqués Ami ou Public afin qu'ils soient accessibles soit dans le même assembly, soit chaque fois qu'ils sont référencés.

Ouvrages

Les structures sont les moins comprises des trois formes d'objets. Si nous parlions d''animaux' au lieu d''objets', la structure serait un Aardvark .

La grande différence entre une structure et une classe est qu'une structure est un type de valeur et une classe est un Type de référence .

Qu'est-ce que cela signifie? Je suis tellement content que vous ayez demandé.

Un type valeur est un objet stocké directement en mémoire. Un Entier est un bon exemple de type valeur. Si vous avez déclaré un Entier dans votre programme comme celui-ci ...

Dim myInt comme entier = 10

... et vous avez vérifié l'emplacement de mémoire stocké dans monInt , vous trouveriez la valeur 10. Vous voyez également cela décrit comme « étant alloué sur la pile ».

La pile et le tas sont simplement des façons différentes de gérer l'utilisation de la mémoire de l'ordinateur.

Un type de référence est un objet où l'emplacement de l'objet est stocké en mémoire. Donc, trouver une valeur pour un type de référence est toujours une recherche en deux étapes. UN Chaîne de caractères est un bon exemple de type de référence. Si vous avez déclaré un Chaîne de caractères comme ça ...

Dim myString as String = 'Ceci est myString'

... et vous avez vérifié l'emplacement de mémoire stocké dans machaîne , vous trouverez un autre emplacement de mémoire (appelé aiguille - cette façon de faire est le cœur même des langages de style C). Vous devrez vous rendre à cet emplacement pour trouver la valeur 'This is myString'. C'est ce qu'on appelle souvent « être alloué sur le tas ». La pile et le tas

Certains auteurs disent que les types valeur ne sont même pas des objets et que seuls les types référence peuvent être des objets. Il est certainement vrai que les caractéristiques d'objet sophistiquées telles que l'héritage et encapsulation ne sont possibles qu'avec des types de référence. Mais nous avons commencé tout cet article en disant qu'il y avait trois formes pour les objets, donc je dois accepter que les structures sont une sorte d'objet, même s'il s'agit d'objets non standard.

Les origines de programmation des structures remontent aux langages orientés fichiers comme Cobol. Dans ces langages, les données étaient normalement traitées sous forme de fichiers plats séquentiels. Les « champs » d'un enregistrement du fichier étaient décrits par une section de « définition des données » (parfois appelée « présentation d'enregistrement » ou « cahier »). Ainsi, si un enregistrement du fichier contenait :

1234567890ABCDEF9876

La seule façon de savoir que '1234567890' était un numéro de téléphone, 'ABCDEF' était un identifiant et 9876 valait 98,76 $ était via la définition des données. Les structures vous aident à accomplir cela dans VB.NET.

Structure Structure1
Dim myPhone en tant que chaîne
Dim myID en tant que chaîne
Dim myAmount As String
Structure finale

Parce qu'un Chaîne de caractères est un type de référence, il est nécessaire de garder la même longueur avec le VBFixedString attribut pour les enregistrements de longueur fixe. Vous pouvez trouver une explication détaillée de cet attribut et des attributs en général dans l'article Attributs dans VB .NET .

Bien que les structures soient des objets non standard, elles ont de nombreuses fonctionnalités dans VB.NET. Vous pouvez coder des méthodes, des propriétés et même des événements et des gestionnaires d'événements dans des structures, mais vous pouvez également utiliser un code plus simplifié et, comme il s'agit de types valeur, le traitement peut être plus rapide. Par exemple, vous pouvez recoder la structure ci-dessus comme ceci :

Structure Structure1
Dim myPhone en tant que chaîne
Dim myID en tant que chaîne
Dim myAmount As String
Sous monSous()
MsgBox('Ceci est la valeur de monTéléphone : ' & monTéléphone)
Sous-titre de fin
Structure finale

Et utilisez-le comme ceci :

Dim myStruct As Structure1
myStruct.myPhone = '7894560123'
maStruct.monSous()

Cela vaut la peine de jouer un peu avec les structures et d'apprendre ce qu'elles peuvent faire. Ils sont l'un des coins impairs de VB.NET qui peuvent être une solution miracle lorsque vous en avez besoin.