Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DE BONNES BASES POUR COMMENCER À PROGRAMMER EN OBJET AVEC VB2005 OU VB.NET


Information sur le tutorial

Catégorie :Tutoriaux Tutorial .NET ( DotNet ) Date de création : 05/07/2006 00:18:19 Vu : 17 137 fois

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (4)
Ajouter un commentaire et/ou une note


Description

C'est plus un mémento qu'un tutoriel
en tout cas cela représente de bonnes bases pour commencer à programmer en objet avec VB2005 (ou VB.NET également)

je posterai certainement le même tutoriel pour C# prochainement
A++

la mise en forme a été modifiée si vous désirez vous pouvez retrouver ce mm tuto sur mon site perso en bien plus présentable
http://membres.lycos.fr/romagny13/
puis codes/cours du site puis VB2005 > POO > les bases

Tutorial

VB2005 > POO

I classe de base et classe en héritant

II classe abstraite et classe en héritant

III interface de classe et classe l’implémentant

IV événements

V  Shared sub main

à conseils

VI classes simple et collections

I – Classe de base et classe héritée

 

Classe base

DECLARATION

è Classe base

Public Class nomclassebase

 

 

End Class

 

 

è Membre readonly

On peut affecter une valeur(et lire) à un attribut readonly depuis sa classe

Mais les instances de la classe en aucun cas ne peuvent y affecter une valeur, mais peuvent lire par contre

è Membre writeonly

On peut lire et écrire un membre readonly depuis sa classe

Mais en aucun cas les instances de la classe peuvent lire la valeur de ce membre, ma is peuvent y affecter une valeur par contre

 

 

è Shared : attributs et méthodes partagées

 

 

Format :

- attribut

Private Shared _mmembre_partage As String

 

 

Public Shared Property membre_partage() As String

Get

membre_partage = _mmembre_partage

End Get

Set(ByVal value As String)

_mmembre_partage = value

End Set

End Property

- méthodes

Public Shared Function fonction_partagee() As String

 

 

Return "oui ok. methode partagee"

End Function

ACCES :

On peut accéder depuis n’importe ou de l’application (lecture/écriture) ainsi :

o Nomclasse_comportant_membres_partagés.nomaccesseur_partage

o Nomclasse_comportant_membres_partagés.nomméthodepartagée

 

 

è Classe dont aucune autre classe ne peut hérité

 

 

Friend NotInheritable Class DepartmentOfMotorVehicles

 

 

End Class

 

 

è toString : Fonction permettant de retourner l’ensemble des valeurs des attributs de la classe

Public Overrides Function ToString() As String

Return

"accesseur1: " & accessuer1 & vbCrLf & _

"accesseur2: " & accessuer2 & vbCrLf

 

 

End Function

 

 

è sub new : utiliser Me.nomattribut pour différencier attribut de la classe visé et la variable reçue

Sub New(ByVal AccountNumber As String)

 

 

Me.AccountNumber = AccountNumber

 

 

End Sub

à passer un paramètre et l’utiliser dans un property

Public Property DefaultQuantity(ByVal Multiplier As Integer) As Integer

Get

Return custDefaultQuantity * Multiplier

End Get

Set(ByVal Value As Integer)

custDefaultQuantity = Value

End Set

End Property

è compteur d’instances

1 dans sub new on ajoute

Sub New()

Nb += 1

End Sub

2 property

Public ReadOnly Property NbInstance()

Get

 

 

NbInstance = Nb

 

 

End Get

End Property

 

 

è Destructeur

Protected Overrides Sub Finalize()

nominstance = Nothing

End Sub

Pour forcer la destruction on peut utiliser l'interface IDisposable:

Il faut mettre dans l'entête de la classe

 

 

o Implements IDisposable

 

 

et mettre dans le code de la classe

 

 

Public Sub Dispose() Implements System.IDisposable.Dispose

 

 

' Code...

 

 

End Sub

C’est une méthode Public, on peut l'appeler de l'application cliente:

M.Dispose()

M=Nothing

Classe héritée

DECLARATION

Public Class classeherite_classebase1_1

Inherits classebase_1

 

 

 

 

End Class

- Inherits nomclassebase

- Posséde des attributs et propertys associés qui sont propre à la classe dérivée (c’est la tout l’intêret de créer une classe dérivée)

 

 

INITIALISATION

- Fait appel dans son constructeur au constructeur de sa classe de base MyBase.new()

Public Sub New()

 

 

MyBase.new()

 

 

End Sub

 

 

AFFECTATION

- Une instance de la classe dérivée a accès aussi bien et facilement aux attributs (ou plutôt accesseurs) et méthodes de sa classe de base que de sa classe dérivée

- On peut accéder aux attributs (ou plutôt aux accesseurs) et aux méthodes de la classe de base directement par leur nom depuis l’intérieur de la classe dérivée :

o Nomaccesseur_classe_base

o Nommethode_classe_base

§ A la rigueur on peut ajouter MyBase (MyBase.nom_attribut_classe_base, MyBase.nom_methode_classe_base)

- Sinon un objet declaré de la classe derivee (depuis n’importe quel endroit de l’application) a accés aux attributs ainsi

o oClassederivee.nom_attribut_classe_base

o oClassederivee.nom_methode_classe_base()

 

 

Public Class classeherite_classebase1_1

Inherits classebase_1

 

 

 

 

 

 

Public Sub New()

MyBase.new()

 

 

 

 

End Sub

 

 

 

 

End Class

è CAS attributs(accesseurs) et méthodes classe base déclarés en PROTECTED

Les instances de la classe dérivée n’ont plus accès aux attributs et méthodes déclarées en protected

è Overloads : permet d’avoir :

- une méthode dans la classe de base et une méthode dans la classe héritée portant le même nom, et ayant le mçeme nombre ou non de paramêtres reçus

- Une instance de la classe de base accédera à la méthode de la classe de base

- Une instance de la classe héritée accedera à la méthode Overloads de la classe héritée

Format : dans la classe de base

Public Class classe_base_2_pour_overload

Protected attribut_classe_base_1 As String

Protected attribut_classe_base_2 As String

 

 

Public Function Register()

attribut_classe_base_1 = "depuis classe base"

 

 

Return attribut_classe_base_1

End Function

 

 

End Class

 

 

Format : dans la classe en héritant

Public Class classe_heritant_classebase_2_overload

Inherits classe_base_2_pour_overload

 

 

Public Overloads Function Register() ', ByVal p2 As String)

attribut_classe_base_1 = "depuis classe derivee"

'attribut_classe_base_2 = p2

 

 

 

 

Return attribut_classe_base_1

End Function

End Class

II – Classe abrégée et classe héritant d’une classe abrégée (méthodes à implémenter)

Classe abrégée

(contenant des méthodes abrégées)

Ce type de classe contient des méthodes abrégées que les classes devront implémentant mais cette classe abrégée peut également avoir des attributs méthodes et constructeur et pas uniquement des méthodes abrégées

DECLARATION

è Classe abrégée

 

 

Public MustInherit Class classe_abregee_1

 

 

 

 

End Class

 

 

è Méthode abrégée déclarée dans une classe abrégée

 

 

Public MustOverride Function fonction_classe_abregee() As String

Classe héritant de la classe abrégée

DECLARATION

è Classe héritant de la classe abrégée

 

 

Public Class classe_implementant_classe_abregee

Inherits classe_abregee_1

 

 

End Class

è Méthode implémentant méthode abrégée de la classe abrégée

 

 

Public Overrides Function fonction_classe_abregee() As String

 

 

End Function

- Pour accéder aux méthodes implémentées (corps rempli) de la classe héritant de la classe abrégée il suffit de créer une instance de la classe héritant de la classe abrégée pui s :

- Nominstance_classe_heritant_classe_abregee.nom_methode_abregee_implementee()

 

 

è Attribut accesseur (property) devant être implémenté par les classes héritant de la classe abrégée

Format : dans la classe abrégée

Dans la liste des attributs

 

 

Protected currentValueValue As Decimal

 

 

Puis à la place de déclaré complétement le property correspondant :

Public MustOverride Property CurrentValue() As Decimal

Format : dans la classe implémentant

Public Overrides Property CurrentValue() As Decimal

Get

Return currentValueValue

End Get

Set(ByVal Value As Decimal)

 

 

currentValueValue = Value

End Set

End Property

III – Interface de classe et classe implémentant l’interface de classe

INTERFACE DE CLASSE

L’interface de classe ne contient que des méthodes abrégées (prototype de méthodes sans le corps) que devront obligatoirement implémentant les classes implémentant cette interface de classe

Pas d’attributs, ni d’accesseurs, ni de constructeur …

DECLARATION

è interface de classe

Public Interface nom_classe_interface

 

 

 

 

End Interface

è méthodes abrégées de l’interface

 

 

- format des méthodes abstraites déclarées dans l’interface de classe

o Function fonction_classe_interface_1() As String

 

 

Classe implémentant interface de classe

Les classes implémentant (implements nominterface) ces interfaces de classes peuvent elles par contre posséder des constructeurs ,attributs,autres méthodes et peuvent également en plus hérité d’une autre classe (Inherits nomclassebase)

 

 

DECLARATION

 

 

è Classe implémentant interface

- Format ajouter : Implements nom_classe_interface

 

 

o Public Class Classe_implemantant_interface_classe

Implements classe_interface

 

 

 

 

End Class

 

 

- Automatiquement le corps des méthodes que la classe doit implémenter apparaissent

(des prototypes déclarés dans l’interface de classe) apparaissent avec :

 

 

Implements nom_classe_interface.nom_fonction_classe_interface_implémenter

 

 

( Montrant que vous implémentez bien cette fonction abrégée )

 

 

è Méthodes implémentant méthodes abrégées de l’interface de classe

 

 

 

 

Public Function fonction_classe_interface_1() As String Implements classe_interface.fonction_classe_interface_1

 

 

End Function

 

 

AFFECTATION

 

 

- Pour accéder aux méthodes de la classe implémentant les méthodes abrégées de l’interface de classe

Il suffit de créer une instance de cette classe et ensuite

o Nominstance.methode_classe_implementant_interface_classe

 

 

 

 

IV EVENEMENTS

è le mot clé handles permet d'associer un événement à une procédure au moment de la conception. (Le concepteur sait qu'une procédure doit gérer les événements).

è AddHandler permet d’associer une procédure de gestion d’évênement à un composant créé dynamiquement

 

 

1ere méthode (avec AddHandler monbouton.Click, AddressOf monbouton_clique)

 

 

 

 

1 – on déclare notre composant

Dim monbouton As New System.Windows.Forms.Button

2 - On défini les propriétés de ce composant créé dynamiquement et on l’ajoute à la form désirée

monbouton.Location = New System.Drawing.Point(165, 400)

monbouton.Size = New System.Drawing.Size(222, 23)

monbouton.Text = "mon bouton "

Me.Controls.Add(monbouton)

 

 

3– on créé l’EventHandler pour ce composant

AddHandler monbouton.Click, AddressOf monbouton_clique

4– on définit la procédure qui traitera l’évênement

Private Sub monbouton_clique(ByVal sender As System.Object, ByVal e As System.EventArgs)

 

 

MessageBox.Show("vous avez cliqué sur mon bouton")

End Sub

 

 

On peut également utiliser la même procédure pour plusieurs composants

AddHandler BT1.Click, AddressOf BoutonClique

AddHandler BT2.Click, AddressOf BoutonClique

On détermine le bouton cliquer ainsi dans la procédure de gestion d’évênement :

If sender Is BT1 Then . . .

2eme méthode (avec private WithEvents et Handles composant.évênement)

1 – déclarer en haut de MainForm

Private WithEvents monbouton As Button

2 – définir les propriétés du bouton et ajouter ce bouton à la form

 

 

monbouton = New System.Windows.Forms.Button

monbouton.Location = New System.Drawing.Point(165, 400)

monbouton.Size = New System.Drawing.Size(222, 23)

monbouton.Text = "mon bouton "

Me.Controls.Add(monbouton)

3- définir la procédure de gestion d’évênement

Le plus important c’est Handles monbouton.Click qui définit le composant et l’évênement lié

 

 

Private Sub monbouton_clique(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles monbouton.Click

 

 

MessageBox.Show("vous avez cliqué sur mon bouton")

End Sub

 

 

3eme méthode : évênements de classe

Dans cet exemple si le texte est différent de « hello » alors l’évênement est déclenché : une boite de dialogue apparait

1 – dans les déclarations de la classe

Public Event TextChange(ByVal UserName As String)

2 – dans la classe > déclenchement de l’évênement défini ci-dessus

RaiseEvent TextChange("hello")

3 – créer dans la form, deéclarer en haut + M=new class1 (dans form_load)

Private WithEvents M As Class1

4 – dans la form, ajouter la procédure

Private Sub M_TexteChange(ByVal UserName As String) Handles M.TextChange

messageBox.show("le texte a changé")

End Sub

Ø Code complet de la classe

Public Class Class1

Private _mTexte As String

 

 

' Déclare un évènement

Public Event TextChange(ByVal UserName As String)

 

 

Public Property Texte()

Get

Return _mTexte

End Get

Set(ByVal Value)

If Value <> _mTexte Then

RaiseEvent TextChange("hello") '<= déclenchement de l'évènement par RaiseEvent

End If

_mTexte = Value

End Set

End Property

 

 

End Class

V Shared sub main

 

APPROCHE OBJET

 

 

Public Class main

Public Shared Sub main()

...

End Sub

End Class

 

 

APPROCHE FONCTIONNNELLE (événementielle)

 

 

Module module1

 

 

Sub main()

....Créer une instance du formulaire de démarrage et l'ouvrir

End Sub

 

 

 

 

End Module

è Conseils

- Créer des méthodes par paire

Ex :

Activation/désactivation.

Ajout/Suppression...

- Option explicit et strict

Option Strict=On >type de données définis et ce strictement

Option Explicit=On >déclaration obligatoire avant utilisation

- Employer des constantes

Const nomconstante As Integer = 123

Ainsi on utilise la constante au lieu de la valeur, et cela permet de modifier qu’à un endroit toutes les valeurs

 

 

- Namespaces : permettent dans un Assembly d’éviter les conflits si par ex 2 classes ont une méthode de même nom

On appellera ce qui lève toute ambigüité

o nomespace.nommethode

 

 

 

 

VI – classe simple et classes collections

 

Classe simple :

- attributs private + propertys

- constructeur,destructeur

- méthodes portant sur un élément

 

 

Public Class website

Private _mname As String

Private _murl As String

 

 

Public Sub New()

 

 

End Sub

Public Property name() As String

Get

name = _mname

End Get

Set(ByVal value As String)

_mname = value

End Set

End Property

 

 

Public Property url() As String

Get

url = _murl

End Get

Set(ByVal value As String)

_murl = value

End Set

End Property

End Class

 

 

 

 

Classes collections

- inherits System.Collections.CollectionBase

- constructeur

è Add,insert,Item,removeat

o Add : écriteure à la fin de la collection

o Insert : insertion à l’emplacement spécifié

o Item : lecture

o Removeat : supprimer élément de la collection spécifié

è Méthodes portant sur la collection List

 

 

Format :

Public Class websites

Inherits System.Collections.CollectionBase

 

 

End Class

 

 

Public Sub New()

 

 

End Sub

 

 

Public Sub Add(ByVal un_website As website)

List.Add(un_website)

 

 

End Sub

Public Sub insert(ByRef index As Integer, ByVal un_website As website)

List.Insert(index, un_website)

End Sub

Public ReadOnly Property Item(ByVal index As Integer) As website

Get

Return CType(List(index), website)

End Get

End Property

Public Sub RemoveAt(ByVal index As Integer)

List.RemoveAt(index)

End Sub

05 juillet 2006 00:20:49 :
.
05 juillet 2006 00:41:48 :
.
05 juillet 2006 00:48:52 :
.
05 juillet 2006 00:50:46 :
.
09 juillet 2006 11:38:33 :
. essai d'amelioration de la mise en forme
09 juillet 2006 13:07:28 :
.
09 juillet 2006 13:11:46 :
..
signaler à un administrateur
Commentaire de romagny13 le 05/07/2006 00:43:55

la mise en forme a été modifiée si vous désirez vous pouvez retrouver ce mm tuto sur mon site perso en bien plus présentable
http://membres.lycos.fr/romagny13/
puis codes/cours du site puis VB2005 > POO > les bases

signaler à un administrateur
Commentaire de tof008 le 20/07/2006 11:28:21

Bon tuto! Il va me permettre de me mettre tout doucement à VB .net! Merci pour l'aide que tu apportes!

signaler à un administrateur
Commentaire de bilorou le 02/03/2007 20:04:40

Salut, c'est mon premier commentaire...
ben si tu n'es pas prof tu es en voie de l'être, merci pour la simplicité de ton tuto. revoie les couleurs...(la mise en forme) on s'y perd..

signaler à un administrateur
Commentaire de moghrikadda le 11/01/2008 09:37:57

merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,031 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.