Vous êtes sur la page 1sur 23

Introduction la Programmation Oriente Objet en VB.

NET
par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Date de publication : 10/11/2005 Dernire mise jour : 28/01/2006

Cet article a pour but de vous initier aux mcanismes de la POO utiliss par le langage VB.NET.

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Remerciements Introduction Mode d'emploi du code Leon 1 : Un peu de vocabulaire Espace de Noms Classes Objet Module Leon 2 : Portes de vos dclarations Leon 3 : Fonctions Partages Leon 4 : La Surcharge Leon 5 : L'Hritage Leon 6 : La Rdfinition Leon 7 : Le Polymorphisme d'hritage Leon 8 : Constructeurs et Destructeurs Leon 9 : Les Proprits Leon 10 : Une petite application Tlchargements

-2Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Remerciements
Ce tutoriel est une traduction provenant d'un article du site CodeProject. L'auteur de cet article est Anoop Madusudanan, je tiens le remercier chaleureusement pour m'avoir autoris traduire son article. Vous pouvez consulter son article original ici.

Merci khany et neo.51 pour leurs corrections et leurs conseils.

-3Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Introduction
Cet article traite des fonctionnalits basiques de la POO en VB.Net. En effet, une des volutions notables de VB.Net est d'tre totalement orient objet, contrairement aux versions prcdentes de VB. Cet article est dcoup en dix leons et le code source est fourni pour chacune d'entre elles, en fin d'article.

Cet article a pour but d'atteindre les objectifs suivants :

1. Aborder de manire exhaustive la POO en VB.NET, 2. Apprendre comment sont utilises les techniques de la POO en VB.NET 3. Expliquer simplement les concepts suivants : Cration et utilisation de classes et d'objets en VB.NET, Fonctions Partages, Encapsulation, Abstraction, Hritage et Polymorphisme, Surcharge et Redfinition, Constructeurs et Destructeurs.

En tudiant ce tutoriel, vous serez en mesure d'apprhender facilement la plupart des codes .NET. De mme, des programmeurs Java/C++ peuvent l'utiliser pour aborder la POO avec VB.NET.

-4Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Mode d'emploi du code


Pour chaque leon, le code source est disponible sous forme d'un simple fichier .vb (sans projet associ) : vous aurez besoin du FrameWork SDK .NET pour compiler et excuter les exercices dans cet article. Vous pouvez le tlcharger du site Web de Microsoft, ici. Le compilateur VB.NET (vbc.exe) rside normalement dans votre dossier FrameworkSDK\bin.

Pour compiler manuellement un fichier, passez par l'excuteur de ligne de commande et tapez :

vbc filename.vb /out:"filename.exe" /r:"System.Windows.Forms.dll","System.dll"

-5Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 1 : Un peu de vocabulaire Espace de Noms


En VB.NET, les classes et autres structures de donnes concernant un domaine bien dfini sont incluses dans un espace de noms (ou NameSpace). Vous pouvez utiliser les classes appartenant un espace de noms simplement en important cet espace : ceci se fait par le biais du mot-cl Imports.

Le FrameWork .NET fournit un ensemble trs fournis de classes pr-dfinies, groupes ensemble dans divers espaces de noms.

Dans cette leon, nous utiliserons le namespace System. Importons le namespace System (dj disponible dans .NET).
Imports System

Classes
Vous avez dj entendu parler des classes ? Pour faire simple, une classe (Class) est la dfinition d'un objet de tous les jours. Par exemple, il est possible de dfinir une classe Humain afin de modliser tous les tres humains, et une nomme Chien pour reprsenter les chiens. Les classes peuvent galement grer des mthodes : ce sont (en gnral) des procdures concernant le fonctionnement de l'objet modliser.

Voici l'instruction de dclaration d'un espace de noms nomm Animaux :


Namespace Animaux

Chien est une classe appartenant l'espace de noms Animaux:


Class Chien

Et Aboie est une procdure de cette classe :


Function Aboie() Console.Writeline ("Le chien aboie !") End Function End Class End Namespace

Objet
Un objet est une instance de classe. Par exemple, Jimmy est un objet de type Chien. Pour illustrer ceci, nous allons crer un objet dans la section suivante.

Module

-6Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Il est possible d'utiliser des modules pour crire des fonctions ou procdures publiques : Un Module est donc un groupe de fonctions. la diffrence d'une fonction appartenant une classe, une fonction publique d'un module peut tre appele tout endroit du code. VB implmente les fonctions (Function) et les procdures (Sub). La seule diffrence entre une fonction et une procdure est que contrairement une fonction, une procdure ne retourne pas de valeur.
Public Module modMain

L'excution va dmarrer partir de la procdure Main() :


Sub Main() 'Appelle la fonction ci-dessous : MaFonction() End sub

MaFonction : une petite fonction afin d'utiliser la classe Chien :

Function MaFonction() 'Voici comment dclarer une variable nomme Jimmy, de type chien Chien : 'Nous spcifions Animaux.Chien car la classe Chien fait partie de l'espace de Nom Animaux (cf. plus haut) Dim Jimmy as Animaux.Chien 'Cre l'objet. Contrairement VB6, le mot cl Set n'est plus utilis ! Jimmy = New Animaux.Chien() 'Voici une autre manire de crer un objet : 'Dim Jimmy as New Chien 'Appel de la fonction principale de Jimmy Jimmy.Aboie() End Function End module

-7Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 2 : Portes de vos dclarations


Les principales portes sont Public, Private, Friend et Protected. Une classe peut contenir des attributs ou des mthodes, qui peuvent tre de chacuns des 4 types pr-cits :

- Ceux qui sont Public sont accessibles suite la cration de l'objet. - Ceux qui sont Private ou Protected ne sont accessibles qu' l'intrieur mme du module de classe. - Les membres Protected sont similaires aux Private, mais ils ont une particularit en cas d'hritage. Ce point sera abord plus tard dans la leon correspondante. - Les membres Friend ne sont accessibles qu' l'intrieur du projet, et pas par des lments extrieurs au projet en cours.

Continuons sur notre exemple et importons l'espace de noms System :


Imports System

L'instruction de dbut de notre espace de noms : Animaux (Tout le code qui suit en fera partie)
Namespace Animaux

Chien est une classe appartenant l'espace de noms Animaux :


Public Class Chien 'Voici une variable public Public AgeDuChien as Integer

Aboie est une fonction publique (Public) de notre classe Chien :


Public Function Aboie() Console.Writeline ("Le chien aboie !") End Function

Et Marche en est une autre, dclare en prive (Private) :


Private Function Marche() Console.Writeline ("Le chien marche") End Function End Class End Namespace

Passons maintenant notre module :


Public Module modMain

-8Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

L'excution va dmarrer partir de la procdure Main() :


Sub Main() 'Appelle notre fonction (cf. ci-dessus) MaFonction() End sub 'MaFonction: Appele partir de la procdure Main() Function MaFonction() Dim Jimmy as Animaux.Chien Jimmy = New Animaux.Chien() 'Ce qui suit fonctionnera, car Aboie et AgeDuChien sont Public Jimmy.Aboie() Jimmy.AgeDuChien = 10 'Par contre, l'appel de la fonction Marche() chouera, car il se situe en dehors 'du module de classe Chien 'Donc le code qui suit est incorrect : dcommentez-le 'et essayez de compiler, vous obtiendrez une erreur ! 'Jimmy.Marche() End Function End Module

Vocabulaire :

L'encapsulation La gestion de donnes et des procdures associes une notion dans une classe s'appelle l'encapsulation.

Data Hiding ou Abstraction Habituellement, dans une classe, les variables grant les donnes, comme AgeDuChien, sont dclare en tant que Private. Ce sont les procdures Property qui sont utilise pour accder ces donnes. La protection des donnes d'un objet en dehors du module de classe est appele Abstraction, ou bien encore Data Hiding. Ceci sert prvenir des modifications "accidentelles" des donnes d'un objet via des fonctions externes au module de classe.

-9Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 3 : Fonctions Partages


Dans une classe, les membres partags (proprits et mthodes) peuvent tre appels directement, sans passer par l'instanciation d'un objet (comme prcdement dcrit). Le mot-cl Shared indique en effet que la proprit ou mthode ne s'appuie pas sur un objet spcifique mais bien sur la classe elle-mme, et qu'elle peut tre appele directement partir de cette classe, mme si celle-ci n'a aucune instance en cours. Une proprit Shared contient quant elle une valeur commune tous les objets d'une classe.

Notre exemple dmarre de manire habituelle, avec l'import de l'espace de noms System, l'instruction de dbut de notre espace de noms, Animaux, et une classe lui appartenant, Chien :
Imports System Namespace Animaux Class Chien

Et Aboie est maintenant une fonction Public et Shared de cette classe :


Public Shared Function Aboie() Console.Writeline ("Le chien aboie !") End Function

Marche, quant elle, est une fonction Public, mais non partage.
Public Function Marche() Console.Writeline ("Le chien marche ...") End Function End Class End Namespace

Dmarrons notre module, l'excution se fera partir de la procdure Main() :


Public Module modMain Sub Main() 'Nous pouvons faire appel la mthode Aboie() directement, 'Sans passer par la cration d'un objet de type Chien, 'puisque qu'elle est partage Animaux.Chien.Aboie() 'Par contre, nous ne pourrons utiliser la mthode Marche() 'que suite la cration d'un objet, puisque celle-ci 'n'est pas partage. Dim Jimmy as Animaux.Chien Jimmy = New Animaux.Chien() Jimmy.Marche() End sub End Module

Rflchissons un instant! La procdure WriteLine() que nous utilisons depuis le dbut est une mthode partage de la classe Console. De mme, nous pouvons dclarer la procdure Main() elle-mme comme une mthode partage dans une classe : c'est--dire Shared Sub Main().
- 10 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Essayez de dplacer cette procdure Main() du module dans la classe Chien ci-dessus et testez le rsultat !

- 11 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 4 : La Surcharge
La surcharge est une technique simple utiliser, qui permet d'utiliser le mme nom de fonction avec des paramtres de diffrents types. Voyons ce que a donne sur la classe Addition dans l'exemple qui suit.

Comme d'habitude, nous avons besoin de l'espace de noms System :


Imports System Class Addition

Ensuite, ajoutons 2 fonctions Add(). La premire additionne 2 entiers ... (Convert.ToString est l'quivalent de la fonction CStr de VB6)
Overloads Public Sub Add(A as Integer, B as Integer) Console.Writeline ("Adding Integers: " + Convert.ToString(a + b)) End Sub

... et la deuxime concatne 2 chanes de caractres :


Overloads Public Sub Add(A as String, B as String) Console.Writeline ("Adding Strings: " + a + b) End Sub

Et les 2 ont le mme noms ? Ceci est possible uniquement car nous avons utilis le mot-cl Overloads dans leur dclaration, pour justement spcifier la surcharge !

Ici, voyons ce que a donne avec la procdure Main() suivante, incluse dans le module de classe Addition (et donc dclare en tant que partage, cf paragraphe prcdent) :
Shared Sub Main() Dim monCalcul as Addition 'Cre l'objet monCalcul = New Addition 'Appel de la premire fonction ... monCalcul.Add(10, 20) ' ... et appel de la seconde : monCalcul.Add("Bonjour", " comment allez-vous ?") End Sub End Class

Complments :

Signature C'est ainsi que l'on appelle chaque squence distincte de paramtres, c'est--dire chaque manire de faire appel la mthode surcharge.

- 12 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 5 : L'Hritage
L'hritage est un mcanisme par lequel une classe drive (ou classe fille) hrite de toutes les caractristiques de sa classe de base (ou classe mre). En bref, il est possible de crer via hritage vos classes partir d'une classe existante : Il suffit pour cela d'utiliser le mot-cl Inherits.

Voici un exemple simple. Commenons par importer l'espace de noms habituel :


Imports System

Voici notre classe de base :


Class Humain 'Quelque chose que la plupart des tres humains font : Public Sub Marche() Console.Writeline ("Je marche ...") End Sub End Class

Et maintenant, crons une classe fille nomme Developpeur :


Class Developpeur Inherits Humain 'Nous avons donc dj accs la mthode Marche() dfinie ci-dessus 'Et voici une autre qui illustre ce que certains programmeurs font parfois : Public Sub PiqueDuCode() Console.Writeline ("Je pompe du code ...") End Sub End Class

Ce qui nous permet de coder la procdure MainClass() suivante :


Class MainClass 'Notre procdure principale : Shared Sub Main() Dim Tom as Developpeur Tom = New Developpeur 'Cet appel est valide puisque Developpeur a accs cette fonction 'hrite de la classe Humain : Tom.Marche() 'Celui-ci galement puisque Tom est une instance de la classe Developpeur Tom.PiqueDuCode() End Sub End Class

Complments :

MustInherit Ce mot cl indique qu'une classe ne peut tre instancie, et qu'elle ne peut donc tre utilise que comme classe de base. Par exemple, si vous dclarez la classe Humain en tant que "MustInherit Humain", alors vous ne pourrez pas crer d'objets de type Humain partir de cette classe, mais seulement partir de classes drives.

- 13 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

NotInheritable A l'inverse, ce mot-cl indique que cette classe ne peut pas tre hrite, c'est--dire servir de classe de base. Par exemple, si vous dclarez la classe Humain en tant que "NotInheritable Humain", aucune classe drive ne pourra lui tre cre.

- 14 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 6 : La Rdfinition
Par dfaut, une classe drive hrite des mthodes de sa classe de base. Mais si une proprit ou une mthode doit avoir un comportement diffrent dans la classe fille, elle doit y tre redfinie !

En fait, il suffit de dfinir une nouvelle implmentation de la mthode dans la classe drive : Le mot-cl Overridable est utilis pour prciser qu'une mthode peut tre redfinie, et le mot-cl Overrides est quant lui utilis pour indiquer quelles mthodes sont redfinies.

tudions ceci sur un exemple, partir de notre classe Humain :


Imports System Class Humain 'Parle() est redfinissable : Overridable Public Sub Parle() Console.Writeline ("Je parle") End Sub End Class

Maintenant, crons une classe drive de Humain :

Un Indien (Indien) est un humain (Humain) :


Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la mthode Parle() qui suit redfinit la mthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline ("Je parle Hindou") End Sub End Class

Important : videmment, un appel de Parle() partir d'un objet d'une classe drive va faire appel la mthode Parle() de cette mme classe. Si vous souhaitez faire rfrence la mthode Parle() de la classe de base, il vous suffit alors d'utiliser le mot-cl MyBase, comme ceci :

Mybase.Parle()

Voici une classe pour tester nos exemples :


Class MainClass 'Notre procdure principale : Shared Sub Main() 'Tom est un humain Dim Tom as Humain Tom = New Humain

- 15 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

'Tony est humain, et plus prcisement Indien Dim Tony as Indien Tony = New Indien 'Voici un appel la mthode Parle() de la classe Humain : Tom.Parle() 'Et un appel de la mthode Parle() de la classe Indien Tony.Parle() End Sub End Class

Complments :

MustOverride Ce mot cl indique qu'une mthode doit tre redfinie pour chaque classe fille. Par exemple, si dans la classe Humain, vous dclarez la mthode Parle en tant que "MustOverride Parle", chacune des classes filles devra redfinir cette mthode.

NotOverridable A l'inverse, ce mot-cl indique que cette procdure ne peut tre redfinie dans une classe fille. Par exemple, si dans la classe Humain, vous dclarez la mthode Parle en tant que "NotOverridable Parle", aucune classe fille ne pourra redfinir cette mthode.

- 16 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 7 : Le Polymorphisme d'hritage


Le polymorphisme est un mcanisme via lequel un objet peut prendre plus d'une forme. Par exemple, si vous avez une classe de base nomme Humain, un objet de type Humain peut tre utilis pour contenir un objet de n'importe laquelle de ses classes drives. Quand vous appelez une mthode partir de votre objet, le systme dterminera automatiquement le type de l'objet afin d'appeler la fonction approprie.

Imaginons par exemple une mthode nomme Parle() dans la classe de base Humain. Crons ensuite une classe fille et redfinissons-y la mthode Parle(). Puis crez un objet de la classe fille et affectez-lui la variable de la classe mre : maintenant, si vous faites appel la mthode Parle() partir de cette variable, ce sera celle dfinie dans votre classe fille qui sera appele.

Au contraire, si vous affectez cette variable un objet de la classe mre, alors ce sera la mthode Parle() de la classe mre qui sera appele.

Ceci est dtermin lors de la compilation, c'est ce qu'on appelle une liaison tardive.

Reprenons l'exemple du paragraphe prcdent : la diffrence se situe dans la procdure Shared Sub Main(), de la classe MainClass. tudions le code pour voir ce qui a chang :
Import Systems Class Humain 'Parle() peut tre redfinie : Overridable Public Sub Parle() Console.Writeline ("Je parle") End Sub End Class

Maintenant, crons une classe drive de Humain :

Un Indien (Indien) est un humain (Humain) :


Class Indien Inherits Humain 'Notre Indien parle l'Hindi, la langue nationale en Inde 'la mthode Parle() qui suit redfinit la mthode Parle() de la classe de base (Humain) Overrides Public Sub Parle() Console.Writeline ("Je parle Hindou") End Sub End Class

tudions soigneusement le code suivant :


Class MainClass 'Notre fonction principale : Shared Sub Main() 'Tom est un humain (classe de base) Dim Tom as Humain 'Affectons-lui une variable de la classe fille Indien

- 17 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Tom = New Indian 'Cette affectation est correcte, car la classe Indien 'est fille de la classe Humain. 'Puis faisons appel la mthode Parle comme ceci : Tom.Parle() End Sub End Class

Sur le dernier appel (Tom.Parle()), quelle procdure va tre excute ? Celle de la classe Indien, ou bien celle de la classe Humain ? Cette question est pertinente, car Tom a t dclar en tant qu'Humain, mais un objet de type Indien lui a t affect.

La rponse est : c'est la mthode Parle() de la classe Indien va tre appele. Ceci parce que, comme la plupart des langages orients objet, Vb.NET peut automatiquement dtecter le type de l'objet assign la variable appartenant la classe de base : c'est ce que l'on appelle le Polymorphisme.

- 18 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 8 : Constructeurs et Destructeurs


Un constructeur (Constructor) est une procdure spciale qui est automatiquement excute quand un objet est cr. Une telle procdure se nomme New(). Comme indiqu dans la leon 4, les constructeurs peuvent faire l'objet de surcharge mais contrairement aux autres mthodes, le mot cl Overloads n'est pas requis.

Par opposition, un destructeur (Destructor) est une procdure qui est automatiquement excute la mort de l'objet. Une telle procdure se nomme Finalize(). En VB6, ces procdures taient dj disponibles, elles se nommaient Class_Initialize() et Class_Terminate().

Dmarrons l'tude d'un exemple, avec la classe Chien :


Imports System Class Chien 'La variable age Private Age as integer

Voici un constructeur :
Public Sub New() Console.Writeline ("Un chien est n") Age = 0 End Sub

Et grce la surcharge, un 2 exemple de constructeur (avec paramtre cette fois-ci) :


Public Sub New(val as Integer) Console.Writeline ("Nouveau chien dont l'ge est " + Convert.ToString(val)) Age = val End Sub

Voici le code du destructeur, suivi de la procdure habituelle Main() :


Overrides Protected Sub Finalize() Console.Writeline ("Paf le chien ... (dsol)") End Sub 'La fonction principale : Shared Sub Main() Dim Jimmy, Jacky as Chien 'Cration des objets 'Ceci va appeler le contructeur n1 Jimmy = New Chien 'Et ceci le contructeur n2 Jacky = New Chien (10) End Sub End Class

La destruction intervient automatiquement en fin de porte ou de programme, grce au Garbage Collector. Il est possible de faire le mnage vous-mme en dtruisant vos objets. Ex :

- 19 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Jimmy = Nothing

- 20 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 9 : Les Proprits


Pour grer les donnes de vos objets, vous avez le choix entre des champs ou des proprits. Mais alors que les champs sont de simples variables publiques, les proprits utilisent des procdures pour encadrer la lecture et la mise jour des donnes (cf. la dfinition d'encapsulation). Ce sont les mots-cl Get (lecture) et Set (mise jour) qui sont utilises pour la dclaration de ces procdures.

tudions l'exemple suivant :


Imports System Public Class Chien 'Utilisons une variale prive pour l'ge : Private mAgeDuChien as Integer

Et voici nos procdures Property :


Public Property Age() As Integer 'Lecture de l'ge : Get Console.Writeline ("Getting Property") Return mAgeDuChien End Get 'MAJ de l'ge : Set(ByVal Value As Integer) Console.Writeline ("Setting Property") mAgeDuChien = Value End Set End Property End Class

Voyons comment utiliser ces procdures :


Class MainClass 'Dbut du programme : Shared Sub Main() 'Crons un objet : Dim Jimmy as Chien Jimmy = New Chien 'Nous ne pouvons accder directement la variable mAgeDuChien, 'nous devons utiliser la procdure Age(). 'Affectons-lui une valeur. La procdure Set Age sera mise contribution : Jimmy.Age = 30 'Rcuprons maintenant cette valeur : c'est au tour de la procdure Get Age de travailler : Dim curAge = Jimmy.Age() End Sub End Class

- 21 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Leon 10 : Une petite application


Passons maintenant l'tude d'un programme basique. Importons tout d'abord les espaces de noms requis :
Imports System Imports System.ComponentModel Imports System.Windows.Forms Imports System.Drawing 'Nous allons crer une classe drive de la classe System.Windows.Forms.Form 'En effet, Forms est un espace de noms inclus dans l'espace de noms Windows, 'lui-mme inclus dans System, et Form est une classe de Forms. Public Class SimpleForm Inherits System.Windows.Forms.Form 'Notre constructeur : Public Sub New() 'On fait appel la procdure de la classe mre : MyBase.New()

Affectons la proprit Text de cette classe. Nous avons hrit cette proprit de la classe mre :
Me.Text = "Bonjour, comment allez-vous ?" End Sub End Class Public Class MainClass Shared Sub Main() 'Crons un objet partir de cette classe SimpleForm : Dim sf as SimpleForm sf = New SimpleForm 'Et passons cet objet en argument la procdure Run() pour dmarrer : System.Windows.Forms.Application.Run(sf) End Sub End Class

Nous avons fait le tour... Maintenant, vous tes apte lire et apprhender la plupart des sources VB.Net relatives la POO, et certainement capable de faire un bon usage des mcanismes de la POO dans vos propres programmes.

- 22 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Introduction la Programmation Oriente Objet en VB.NET par Anoop Madusudanan Xavier Vlieghe (Traducteur)

Tlchargements
Les sources : OOPS_In_VBNET_src.zip (FTP) ou OOPS_In_VBNET_src.zip (HTTP) Le tutoriel au format PDF (23 pages, 80 Ko) : POO_VB_NET.pdf (FTP) ou POO_VB_NET.pdf (HTTP)

- 23 Ce document est issu de http://www.developpez.com et reste la proprit exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise l'obtention pralable de l'autorisation de l'auteur.
http://xo.developpez.com/tutoriel/vb.net/poo/

Vous aimerez peut-être aussi