Vous êtes sur la page 1sur 6

1

Programmation Orientée Objet : TP 00

Objectifs :

TP N°00

Notion de classe d'objet

Définition d'une nouvelle classe d'objet en VB.Net

Encapsulation des propriétés et des méthodes de cet objet.

Instanciation de l'objet.

Déclaration et protection des propriétés (données membres).

Fonctions accesseurs, de type Get et Set : Lecture et Modification des propriétés.

Constructeurs et destructeur des objets

Surcharge de constructeurs

Propriétés et méthodes de classe

Rappel :

Créer une classe consiste en la définition d’un nouveau type de données. Il s’agit de modéliser de la manière la plus juste un objet, à partir des possibilités offertes par un langage de programmation. Il faut donc énumérer toutes les propriétés de cet objet et toutes les fonctions qui vont permettre de définir son comportement. Ces dernières peuvent être classées de la façon suivante :

propriétés : Les propriétés de l'objet seront implantées sous la forme de données membres de la : Les propriétés de l'objet seront implantées sous la forme de données membres de la classe.

méthodes : Les différentes fonctions ou méthodes seront implémentées sous la forme de fonctions membres de : Les différentes fonctions ou méthodes seront implémentées sous la forme de fonctions membres de la classe. L’encapsulation n’autorise pas l’accès aux éléments internes à l’objet qui peuvent constituer une grande complexité mais qu’aux éléments exposés au travers de son interface. L’encapsulation permet ainsi de protéger l’intégrité de l’objet et de nous masquer toute la complexité des calculs effectués en interne.

Pour qu'un objet ait une existence, il faut qu'il soit instancié. Une même classe peut être instanciée plusieurs fois, chaque instance ayant des propriétés porteuses de valeurs spécifiques.

Il n'existe qu'une seule manière de créer une instance d'une classe. Cette création d'instance peut se faire en deux temps :

Déclaration 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 déclaration d'une variable var de classe ClassA n'est pas suffisante. En effet, lors de sa déclaration var ne contient pas une donnée de type ClassA.

Par défaut, la valeur de cette référence est null, mot clé Nothing en Vb signifiant que la variable n'est pas référencée. La référence d'un objet doit être affectée à cette variable. Cette référence est réalisée par l'instruction New au moment de l'instanciation.

Ces deux étapes peuvent être réduites à une seule instruction en instanciant l’objet dans le même temps que sa déclaration :

Dim var As New ClassA

Afin d’implanter correctement le concept d'encapsulation, il convient de verrouiller l'accès aux propriétés et de les déclarer private ou protected tout en permettant leur accès via les méthodes de type Accesseur en déclarant ces dernières public

Public Class Stagiaire Private _num As Integer Private _nom As String Private _note As Double End Class

2

Programmation Orientée Objet : TP 00

Si les propriétés sont verrouillées, on ne peut plus y avoir accès de l'extérieur de la classe. Il faut donc créer des méthodes dédiées à l'accès aux propriétés pour chacune d'elles. Ces méthodes doivent permettre un accès dans les deux sens (Lecture/Ecriture).

Accès pour lecture : pour connaître la valeur de la propriété. Ces méthodes sont appelées méthodes type « Get ». Accès pour modification : pour modifier la valeur d'une propriété. Ces méthodes sont appelées méthodes type « Set ». Il est préférable de définir les accès aux attributs d'une classe par des propriétés Property qui regroupe les méthodes 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 l’utilisation des propriétés à la lecture ou à l’écriture en utilisant les mots clés 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 créée au moment de l'instanciation d'une variable avec new, une fonction particulière est exécutée. Cette fonction s'appelle le constructeur. Elle permet,

entre autres choses, d'initialiser chaque instance pour que ses propriétés aient un contenu cohérent Un constructeur est déclaré comme les autres fonctions membres à deux différences près :

Le nom de l'identificateur du constructeur est New. Un constructeur ne renvoie pas de résultat. On utilisera donc des méthodes de type Sub pour les constructeurs Il peut y avoir plusieurs constructeurs pour une même classe, chacun d'eux correspondant à une

initialisation particulière. Tous les constructeurs ont le même nom mais se distinguent par le nombre et/ou le type des paramètres passés.

1. Constructeur d'initialisation :

Ce constructeur permet de procéder à une instanciation en initialisant les propriétés, la valeur de celles-ci étant passée dans les paramètres ou définie sous forme de constante dans la classe. Il peut exister plusieurs constructeurs d’initialisation avec plus ou moins d’arguments :

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 façon suivante :

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

3

Programmation Orientée Objet : TP 00

Sans paramètres.

Public Sub New()

End Sub Dim stg As New Stagiaire

3. Constructeur de recopie :

Le constructeur de recopie permet de recopier les propriétés d'un objet existant vers une nouvelle

instance de même 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 créer une copie du stagiaire « Alami karim » déjà crée dans l’exemple précédant.

Dim stg2 As New Stagiaire(stg)

stg2 est un objet différent de stg mais les propriétés des deux objets ont les mêmes valeurs. Propriétés de classe Jusqu'à présent, les propriétés déclarées étaient des propriétés d'instance. C'est à dire que les propriétés de chaque objet, instancié à partir de la même classe, peuvent avoir des valeurs différentes ( numero, nom, etc ). Supposons maintenant, que dans la classe Stagiaire, il soit nécessaire 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 créer des propriétés de classe. Leur valeur est la même pour toutes les instances d'une même classe. Pour déclarer une telle propriété, on utilise le mot-clé Shared.

Private Shared _compteur As Integer = 0

La propriété de classe compteur, initialisée à 0 lors de sa déclaration, sera incrémentée de 1 dans tous les constructeurs développés 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

Méthodes de classe Comme pour les autres propriétés déclarées private, il est nécessaire de créer les méthodes d'accès associées. Pour ce compteur, seule la méthode Get est nécessaire. Une méthode de classe est déclarée avec le mot-clé Shared. Pour la méthode Get d'accès au compteur d'instances on déclarerait :

4

Programmation Orientée 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 (propriétés) 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

5

Programmation Orientée Objet : TP 00

Exemple d’utilisation (Module1.vb):

Sub Main() Dim nm As String Dim nt As Double Dim stg1, stg2, stg3 As Stagiaire

'mothode 1 pour créer 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 créer 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 créer un stagiaire (créer une copie du 1er stagiaire) stg3 = New Stagiaire(stg1)

'affichage des informations Console.WriteLine("stagiaire N°1") Console.WriteLine("Numero: " & stg1.Numero) Console.WriteLine("Nom: " & stg1.Nom) Console.WriteLine("Note: " & stg1.Note)

Console.WriteLine("stagiaire N°2") Console.WriteLine("Numero: " & stg2.Numero) Console.WriteLine("Nom: " & stg2.Nom) Console.WriteLine("Note: " & stg2.Note)

Console.WriteLine("stagiaire N°3") Console.WriteLine("Numero: " & stg3.Numero) Console.WriteLine("Nom: " & stg3.Nom) Console.WriteLine("Note: " & stg3.Note)

Console.ReadKey() End Sub

Exemple exécution:

& stg3.Nom) Console.WriteLine( "Note: " & stg3.Note) Console.ReadKey() End Sub Exemple exécution:

6

Programmation Orientée 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. Créer la classe article avec tous ces membres :

a. ID : le numéro de l’article crée

b. PUTTC = PU + PU x 20%

c. Remise = 0% si Remise = 1% si Remise = 2% si

PU ≤ 500 500 < PU ≤ 1000 PU > 1000

2. Créer un module de teste pour créer 3 articles et afficher leurs données.