Вы находитесь на странице: 1из 6

1

Programmation Oriente Objet : TP 00

TP N00 Objectifs :
Notion de classe d'objet Dfinition d'une nouvelle classe d'objet en VB.Net Encapsulation des proprits et des mthodes de cet objet. Instanciation de l'objet. Dclaration et protection des proprits (donnes membres). Fonctions accesseurs, de type Get et Set : Lecture et Modification des proprits. Constructeurs et destructeur des objets Surcharge de constructeurs Proprits et mthodes de classe

Rappel :
Crer une classe consiste en la dfinition dun nouveau type de donnes. Il sagit de modliser de la manire la plus juste un objet, partir des possibilits offertes par un langage de programmation. Il faut donc numrer toutes les proprits de cet objet et toutes les fonctions qui vont permettre de dfinir son comportement. Ces dernires peuvent tre classes de la faon suivante : proprits : Les proprits de l'objet seront implantes sous la forme de donnes membres de la classe. mthodes : Les diffrentes fonctions ou mthodes seront implmentes sous la forme de fonctions membres de la classe. Lencapsulation nautorise pas laccs aux lments internes lobjet qui peuvent constituer une grande complexit mais quaux lments exposs au travers de son interface. Lencapsulation permet ainsi de protger lintgrit de lobjet et de nous masquer toute la complexit des calculs effectus en interne. Pour qu'un objet ait une existence, il faut qu'il soit instanci. Une mme classe peut tre instancie plusieurs fois, chaque instance ayant des proprits porteuses de valeurs spcifiques. Il n'existe qu'une seule manire de crer une instance d'une classe. Cette cration d'instance peut se faire en deux temps : Dclaration d'une variable du type de la classe de l'objet, Instanciation de cette variable par l'instruction New.
Dim var As ClassA var = New ClassA

La dclaration d'une variable var de classe ClassA n'est pas suffisante. En effet, lors de sa dclaration var ne contient pas une donne de type ClassA. Par dfaut, la valeur de cette rfrence est null, mot cl Nothing en Vb signifiant que la variable n'est pas rfrence. La rfrence d'un objet doit tre affecte cette variable. Cette rfrence est ralise par l'instruction New au moment de l'instanciation. Ces deux tapes peuvent tre rduites une seule instruction en instanciant lobjet dans le mme temps que sa dclaration :
Dim var As New ClassA

Afin dimplanter correctement le concept d'encapsulation, il convient de verrouiller l'accs aux proprits et de les dclarer private ou protected tout en permettant leur accs via les mthodes de type Accesseur en dclarant ces dernires public
Public Class Stagiaire Private _num As Integer Private _nom As String Private _note As Double End Class

Programmation Oriente Objet : TP 00

Si les proprits sont verrouilles, on ne peut plus y avoir accs de l'extrieur de la classe. Il faut donc crer des mthodes ddies l'accs aux proprits pour chacune d'elles. Ces mthodes doivent permettre un accs dans les deux sens (Lecture/Ecriture). Accs pour lecture : pour connatre la valeur de la proprit. Ces mthodes sont appeles mthodes type Get . Accs pour modification : pour modifier la valeur d'une proprit. Ces mthodes sont appeles mthodes type Set . Il est prfrable de dfinir les accs aux attributs d'une classe par des proprits Property qui regroupe les mthodes Get et Set.
Public Property Nom() As String Get Return _nom End Get Set(ByVal value As String) _nom = value End Set End Property

Utilisation des "properties"


Dim stg As New Stagiaire stg.Nom = "simo" Console.WriteLine("le nom du stagiaire est: " & stg.Nom)

On peut restreindre lutilisation des proprits la lecture ou lcriture en utilisant les mots cls ReadOnly ou WriteOnly (plus rare).
Public ReadOnly Property Numero() As Integer Get Return _num End Get End Property

Constructeurs Quand une instance d'une classe d'objet est cre au moment de l'instanciation d'une variable avec new, une fonction particulire est excute. Cette fonction s'appelle le constructeur. Elle permet, entre autres choses, d'initialiser chaque instance pour que ses proprits aient un contenu cohrent Un constructeur est dclar comme les autres fonctions membres deux diffrences prs : Le nom de l'identificateur du constructeur est New. Un constructeur ne renvoie pas de rsultat. On utilisera donc des mthodes de type Sub pour les constructeurs Il peut y avoir plusieurs constructeurs pour une mme classe, chacun d'eux correspondant une initialisation particulire. Tous les constructeurs ont le mme nom mais se distinguent par le nombre et/ou le type des paramtres passs. 1. Constructeur d'initialisation : Ce constructeur permet de procder une instanciation en initialisant les proprits, la valeur de celles-ci tant passe dans les paramtres ou dfinie sous forme de constante dans la classe. Il peut exister plusieurs constructeurs dinitialisation avec plus ou moins darguments :
Public Sub New(ByVal nomStg As String, ByVal noteStg As Double) Me.Nom = nomStg Me.Note = noteStg End Sub

Cela va permettre d'instancier la classe Client de la faon suivante :


Dim stg As New Stagiaire("Alami karim", 13)

2. Constructeur par dfaut :

Programmation Oriente Objet : TP 00 Sans paramtres.


Public Sub New() End Sub Dim stg As New Stagiaire

3. Constructeur de recopie : Le constructeur de recopie permet de recopier les proprits d'un objet existant vers une nouvelle instance de mme type.
Public Sub New(ByVal unStagiaire As Stagiaire) Me.Numero = unStagiaire.Numero Me.Nom = unStagiaire.Nom Me.Note = unStagiaire.Note End Sub

On peut utiliser ce constructeur pour crer une copie du stagiaire Alami karim dj cre dans lexemple prcdant.
Dim stg2 As New Stagiaire(stg) stg2 est un objet diffrent de stg mais les proprits des deux objets ont les mmes valeurs.

Proprits de classe Jusqu' prsent, les proprits dclares taient des proprits d'instance. C'est dire que les proprits de chaque objet, instanci partir de la mme classe, peuvent avoir des valeurs diffrentes ( numero, nom, etc ). Supposons maintenant, que dans la classe Stagiaire, il soit ncessaire de disposer d'un compteur d'instance, dont la valeur serait le nombre d'instances en cours un instant donn. En VB.NET il est possible de crer des proprits de classe. Leur valeur est la mme pour toutes les instances d'une mme classe. Pour dclarer une telle proprit, on utilise le mot-cl Shared.
Private Shared _compteur As Integer = 0

La proprit de classe compteur, initialise 0 lors de sa dclaration, sera incrmente de 1 dans tous les constructeurs dvelopps pour la classe Client. Sa valeur sera le nombre d'instances valides un instant donn.
Public Sub New() _compteur = _compteur + 1 Me._num = _compteur End Sub Public Sub New(ByVal nomStg As String, ByVal noteStg As Double) _compteur = _compteur + 1 Me._num = _compteur Me.Nom = nomStg Me.Note = nomStg End Sub Public Sub New(ByVal unStagiaire As Stagiaire) _compteur = _compteur + 1 Me._num = _compteur Me.Nom = unStagiaire.Nom Me.Note = unStagiaire.Note End Sub

Mthodes de classe Comme pour les autres proprits dclares private, il est ncessaire de crer les mthodes d'accs associes. Pour ce compteur, seule la mthode Get est ncessaire. Une mthode de classe est dclare avec le mot-cl Shared. Pour la mthode Get d'accs au compteur d'instances on dclarerait :

Programmation Oriente Objet : TP 00


Public Shared Function Compteur() As Integer Return _compteur End Function

ou
Public Shared ReadOnly Property Compteur() As Integer Get Return _compteur End Get End Property

Exemple complet (Stagiaire.vb):


Public Class Stagiaire 'Attributs Private _num As Integer Private _nom As String Private _note As Double Private Shared _compteur As Integer = 0 'Accesseurs (proprits) Public Property Nom() As String Get Return _nom End Get Set(ByVal value As String) _nom = value End Set End Property Public Property Note() As Double Get Return _note End Get Set(ByVal value As Double) _note = value End Set End Property Public ReadOnly Property Numero() As Integer Get Return _num End Get End Property Public Shared ReadOnly Property Compteur() As Integer Get Return _compteur End Get End Property 'constructeur par defaut Public Sub New() _compteur = _compteur + 1 Me._num = Compteur End Sub 'constructeur d'initialisation Public Sub New(ByVal nomStg As String, ByVal noteStg As Double) _compteur = _compteur + 1 Me._num = _compteur Me.Nom = nomStg Me.Note = nomStg End Sub 'constructeur de recopie Public Sub New(ByVal unStagiaire As Stagiaire) _compteur = _compteur + 1 Me._num = _compteur Me.Nom = unStagiaire.Nom Me.Note = unStagiaire.Note End Sub End Class

Programmation Oriente Objet : TP 00 Exemple dutilisation (Module1.vb):


Sub Main() Dim nm As String Dim nt As Double Dim stg1, stg2, stg3 As Stagiaire 'mothode 1 pour crer un stagiaire Console.WriteLine("Veuillez saisir les informations du 1er stagiaires!") Console.WriteLine("Enter le nom du 1er stagiaire") nm = Console.ReadLine Console.WriteLine("Entrer la note du 1er stagiaire") nt = Console.ReadLine stg1 = New Stagiaire(nm, nt) 'mothode 2 pour crer un stagiaire stg2 = New Stagiaire Console.WriteLine("Veuillez saisir les informations du 2 stagiaires!") Console.WriteLine("Enter le nom du 2 stagiaire") stg2.Nom = Console.ReadLine Console.WriteLine("Entrer la note du 2 stagiaire") stg2.Note = Console.ReadLine 'mothode 2 pour crer un stagiaire (crer une copie du 1er stagiaire) stg3 = New Stagiaire(stg1) 'affichage des informations Console.WriteLine("stagiaire N1") Console.WriteLine("Numero: " & stg1.Numero) Console.WriteLine("Nom: " & stg1.Nom) Console.WriteLine("Note: " & stg1.Note) Console.WriteLine("stagiaire N2") Console.WriteLine("Numero: " & stg2.Numero) Console.WriteLine("Nom: " & stg2.Nom) Console.WriteLine("Note: " & stg2.Note) Console.WriteLine("stagiaire N3") Console.WriteLine("Numero: " & stg3.Numero) Console.WriteLine("Nom: " & stg3.Nom) Console.WriteLine("Note: " & stg3.Note) Console.ReadKey() End Sub

Exemple excution:

Programmation Oriente Objet : TP 00 Exercice 0_1 Exemple : soit la classe Article: Article -_ID : Integer (Numero Auto) -_Libelle : String -_PU : Double +Property ID +Property Libelle +Property PU +Property PUTTC +Sub new() +Sub new(unLibelle,unPu) +Sub new(unArticle :Article) +function Remise():Double

1. Crer la classe article avec tous ces membres : a. ID : le numro de larticle cre b. PUTTC = PU + PU x 20% c. Remise = 0% si PU 500 Remise = 1% si 500 < PU 1000 Remise = 2% si PU > 1000 2. Crer un module de teste pour crer 3 articles et afficher leurs donnes.

Вам также может понравиться