BOFIP-RHO-15-0550 du 26/03/2015

Download Report

Transcript BOFIP-RHO-15-0550 du 26/03/2015

2ème année IAG
Chapitre 2: La programmation
orientée objet avec VB.Net
Cours réalisé par:
Mr Chaouki Bayoudhi
2013-2014
Mme Meriem Ennigrou
Support de cours VB.NET
Notion de classe
• Au cœur de la programmation orientée objet: la notion de classe
• Une classe permet de décrire des objets du monde réel
• Une classe comporte toujours:
• Des données représentent les caractéristiques (propriétés,
données, descriptions, ..). Ce sont les membres de la classe
• Les traitements (procédures et fonctions) associés à cette
structure de données. Ce sont les méthodes de la classe.
• Un Objet est une instanciation d’une classe
• En VB.Net, tout est objet :
• Objets ‘visuels’ tels que les formulaires (instances de la classe
Form), les boutons (instances de la classe Button), etc.
• Objets comme les variables, les collections (chaines de
caractères, tableaux), des objets mathématiques
C.Bayoudhi, M.Ennigrou
2
Support de cours VB.NET
Notion de classe
Lors de la création d’un formulaire le code suivant est
automatiquement généré :
En effet, une nouvelle classe portant le nom du
formulaire sera créée. En plus, tout ajout d’éléments au
formulaire (Variables, procédures, contrôles) seront
ensuite perçus comme membres de la classe Form1.
C.Bayoudhi, M.Ennigrou
3
Support de cours VB.NET
Création d’une classe
• Pour créer une classe il faut tout d’abord entrer
dans le menu Ajouter une classe
Menu Projet puis Ajouter une Classe
C.Bayoudhi, M.Ennigrou
4
Support de cours VB.NET
Déclaration d’une classe
Pour déclarer une classe en VB.net, la syntaxe générale est :
[Public | Friend | Private | Protected]
[MustInherit | NotInheritable]
Class nom_classe
[Inherits nom_classe_de_base]
[Implements nom_interface] NotInheritable indique que la classe ne peut
pas être
une jouer
relation
d’héritage.
DéclarationMustInherits
des champs
indique
que utilisée
la classedans
ne peut
que
Nom_classe
hériteCette
de nom_classe_de_base
Définition le
des
méthodes
rôle
de
classe de base.
classe est qualifiée de
End Class
classe abstraite. Par conséquent, pas d’instances
Nom_classe implémente nom_interface.
pour ce genre de classe.
Une interface est un ensemble d’entêtes de
méthodes sans aucun code
C.Bayoudhi, M.Ennigrou
5
Support de cours VB.NET
Déclaration d’une classe
• La portée d’une classe peut être modifiée par
plusieurs attributs :
1. Public : la classe peut être instanciable dans tous les projets
2. Friend : la classe ne peut être instanciable que dans le projet
où elle est définie
3. Private :la classe peut être instanciable dans le module où elle
est définie
4. Protected : la classe ne peut être instanciable que dans une
sous-classe de celle où elle est définie
C.Bayoudhi, M.Ennigrou
6
Support de cours VB.NET
Exemple 1
Public class Personne
‘membres ou attributs de la classe
Private lenom As String
Private leprenom As String
Private ladate_Naissance as Date
Les propriétés sont privées
‘methodes de la classe
Function calcul_age() As donc
long non visibles de l’extérieur
Calcul_age=DateDiff(DateInterval.Year,
ou elles peuvent être publiques
ladate_nais, Now())
donc visibles de l’extérieur
End Function
End class
C.Bayoudhi, M.Ennigrou
7
Support de cours VB.NET
Mot clé – Shared
• Les variables et méthodes sont accessibles via une instance. Il est possible
de créer des variables et des méthodes partagées sans avoir à créer des
instances.
• Pour cela, il faut utiliser le mot clé Shared avant le nom de la variable.
Public Class Personne
Private leNom As String
Private lePrenom As String
Private laDate As Date
Public Shared nbInstances
Sub New()
leNom=″″
lePrenom=″″
laDate=#1/1/1901#
nbInstances=nbInstances+1
End Sub
....
End Class
C.Bayoudhi, M.Ennigrou
8
Support de cours VB.NET
Mot clé – Shared
• Nous pouvons ensuite utiliser la variable partagée sans faire
référence à un objet particulier mais en utilisant le nom de la
classe.
Exemple
Console.WriteLine(Personne.nbInstances)
Autre méthode
Dim unePersonne as Personne
unePersonne = new Personne(″Jean″,″Dupont″,
#25/12/1978#)
Console.WriteLine(Personne.nbInstances)
C.Bayoudhi, M.Ennigrou
9
Support de cours VB.NET
Mot clé – Shared
Exemple 2
Public Class Medicament
Public Laboratoire As String 'variable d'instance
Public Shared Societe as String 'variable de classe Shared
End Class
Lors de l’instanciation de la classe Medicament
Dim M1 As New Medicament
Dim M2 As New Medicament
M1.Laboratoire= "MVV"
M2.Laboratoire= "VV"
M1.Société = « ooo"
Ceci implique également que
M2.societe est aussi égal à "ooo"
C.Bayoudhi, M.Ennigrou
10
Support de cours VB.NET
Procédures de Propriété
• Les procédures de propriétés servent à lire ou à définir la valeur
de la propriété .
•La syntaxe générale est la suivante:
Public Property nomPropriété () As type
Get
Le bloc Get sert à consulter la
codeGet
La propriété doit êtrevaleur
publique
de la propriété
End Get
Set (ByVal
codeSet
End set
End Property
pour que cette propriété soit
Value)
As Type
accessible
hors de lelabloc
classe
Set sera appelé lors de la
modification de la propriété
•Plus tard, si l’utilisateur tape :
nomObjet.nomPropriété = val
C’est le code de Set qui sera exécuté
Dim s as sting = nomObjet.nomPropriété
C’est le code de Get qui sera exécuté
C.Bayoudhi, M.Ennigrou
11
Support de cours VB.NET
Exemple 2
Property nom() As String
Get
Return leNom
End Get
Set(ByVal Value As String)
leNom = Ucase(Value)
End Set
End Property
Property prenom() As String
Get
Return lePrenom
End Get
Set (ByVal Value As String)
lePrenom = Lcase(Value)
End Set
End Property
C.Bayoudhi, M.Ennigrou
12
Support de cours VB.NET
Exemple 2
Property date_nais() As Date
Get
Return laDate_naissance
End Get
Set (ByVal Value As Date)
If Value.year >=1900 Then
laDate_naissance = Value
Else
MsgBox(“Trop vieux”)
End If
End Set
End Property
C.Bayoudhi, M.Ennigrou
13
Support de cours VB.NET
L’opérateur New
• Pour utiliser une classe, il faut l’instancier (créer une
instance) pour obtenir un objet
• On utilise le nom de classe et l’opérateur new pour créer une
instance d’une classe
Exemple
Dim unePersonne as New personne ()
C.Bayoudhi, M.Ennigrou
14
Support de cours VB.NET
Notion de Constructeur
• Le constructeur d’une classe est une méthode spéciale qui sera
appelée automatiquement lors de la création d’une instance
• Si aucun constructeur n’est défini par le programmeur, il en
existe un par défaut sans paramètres
• Les attributs d’une classe sont alors initialisés par leurs valeurs
par défaut
• Une classe peut comporter plusieurs constructeurs New avec un
nombre de paramètres différents (plusieurs signatures) : c’est la
surcharge
C.Bayoudhi, M.Ennigrou
15
Support de cours VB.NET
Notion de Constructeur
• Reprenons notre exemple, on utilise les méthodes déjà écrites
‘constructeur
Public Sub New (ByVal prenomchoisi as string,
ByVal nomchoisi as string,
ByVal datechoisie as date)
Me.leprenom = prenomchoisi
Me.lenom = nomchoisi
Me.ladate_naissance = datechoisie
End Sub
• Pour créer une instance, on écrit :
Dim unePersonne as New Personne("Béji", "Ali",
#20/01/1990#)
C.Bayoudhi, M.Ennigrou
16
Support de cours VB.NET
Notion de Constructeur
• Une autre manière de faire est d’utiliser une méthode Initialise
Exemple
Class Homme
Private _Nom As String
Private _Prenom As String
Public Sub initialise(ByVal N As String, ByVal P As
String)
Me._nom = N
Me._prenom = P
End Sub
End Class
•Pour instancier cette classe
dim p as New Homme
p.initialise(« Béji", "Ali")
C.Bayoudhi, M.Ennigrou
17
Support de cours VB.NET
Surcharge
• Il est possible en VB.Net de créer plusieurs méthodes de
même nom, chacune d’elles ayant un ensemble de paramètres
différents ou un type de paramètre différent
• Il faut pour cela spécifier le mot clé Overloads dans la déclaration
de la méthode.
Exemple
Overloads Function calcul_age () As Long
Calcul_age = DateDiff(DateInterval.Year,
date_naiss, Now())
End Function
Overloads Function calcul_age(ByVal jour As Date)
As Long
C.Bayoudhi, M.Ennigrou
18
Calcul_age = DateDiff(DateInteval.Year,
date_naiss, jour)
Surcharge
• Il est également possible en VB.Net de surcharger une
propriété, pour cela il faut rajouter des procédures propriété
ayant le même nom
• On peut ajouter Overlods mais c’est facultatif
C.Bayoudhi, M.Ennigrou
19
Héritage (1/3)
•
L’héritage permet de réutiliser du code déjà écrit tout en ayant la possibilité de
modifier le fonctionnement de certaines procédures. Le mot clé Inherits indique
la relation d’héritage entre la classe de base et la classe descendante.
Public Class Employe
Inherits Personne
Private leSalaire As Decimal
Private leService As String
Private leStatut As Boolean
Sub New(ByVal N As String, ByVal P As String, ByVal D As Date,_
ByVal S As Decimal, BDecimal, ByVal Se As String, ByVal St As Boolean)
Nom=N
Prenom=P
Date_naiss=D
leSalaire=S
leService=Se
leStatut=St
End Sub
Public ReadOnly Property Salary()
Property Statut() As Boolean
As Decimal
Get
Get
Return leStatut
Return LeSalaire
End Get
End Get
Set(ByVal value As Boolean)
End Property
leStatut = value
...
End Set
End Property
...
C.Bayoudhi, M.Ennigrou
End Class
20
Héritage (2/3)
• Dans le constructeur de la classe Employe, nous avons repris
du code existant dans le constructeur de la superclasse
Personne. Afin de ne pas réécrire ce code, il suffit d’utiliser le
mot clé MyBase.
Sub New(ByVal N As String, ByVal P As String, ByVal D As Date,_
ByVal S As Decimal, BDecimal, ByVal Se As String,_
ByVal St As Boolean)
MyBase.new(N,P,D)
leSalaire=S
leService=Se
leStatut=St
End Sub
C.Bayoudhi, M.Ennigrou
21
Héritage (3/3)
• Dans le cas où la classe fille doit contenir une méthode ayant la
même signature qu’une méthode de la classe de base, il faut
utiliser le remplacement de méthode au lieu de la surcharge.
Pour cela, on utilise les mots clés suivant
– Le mot réservé overrides devant le nom de la méthode dans la
classe fille,
– Il faut autoriser explicitement la surcharge de la méthode dans la classe
de base via le mot clé overridable.
C.Bayoudhi, M.Ennigrou
22
Héritage (3/3)
• Méthode calcul_age dans la classe Employe :
Overrides Function calcul_age(ByVal jour As Date) As long
Calcul_age=DateDiff(DateInterval.Quarter, date_nais,
jour)
End Function
•Méthode calcul_age dans la classe Personne :
Overridable Overloads Function calcul_age(ByVal jour As
Date) As long
Calcul_age=DateDiff(DateInterval.year, date_nais, jour)
End Function
C.Bayoudhi, M.Ennigrou
23
Remarque sur l’héritage
• Il est possible d’interdire la spécialisation d’une classe en
utilisant le mot clé NotInheritable.
C.Bayoudhi, M.Ennigrou
24
Interfaces
• Une interface est un ensemble de déclarations de méthodes ne
contenant aucune implémentation. Pour déclarer une interface, on
utilise les mots clé Interface et End Interface.
Public Interface Comparable
Function compare (ByVal o1 As Object) As Integer
End Interface
• Cette interface nous oblige à créer dans les classes qui l’implémenteront
une fonction «compare” qui compare l’objet courant à l’objet passé en
paramètre. Pour dire qu’une classe implémente une interface on utilise le
mot clé implements.
C.Bayoudhi, M.Ennigrou
25
Exercice1 POO
Créer la classe Livre permettant de gérer des livres
Les membres sont les suivants :
•Titre
•Auteur (nom et prénom séparés)
•Année de parution
•Editeur (nom, ville, et pays, séparés)
•Nombre de pages
•Prix
•Fournisseur (nom, ville, et pays, séparés)
Créer également les getters et setters pour tous les membres
Créer un constructeur permettant d’initialiser tous les membres
Créer un constructeur par copie
Créer une méthode permettant de savoir si deux livres sont
identiques
C.Bayoudhi, M.Ennigrou
26
Créer la classe Salarie. Cette classe aura 5 propriétés de type public:
• matricule
MatriculeInteger
• catégorie
CategorieInteger
• service Service Integer
• nom
Nom
String
• salaire Salaire Double
Exercice2 POO
Créer une méthode en tant que fonction CalculerSalaire() pour afficher la mention "Le salaire
de " suivie du nom du salarié, suivi de " est de ", suivi de la valeur du salaire.
Ajouter à la classe Salarie les méthodes Equals et ToString. La règle d'égalité pour la classe
Salarie peut s'énoncer de la façon suivante : deux salariés sont égaux s'ils ont le même numéro
de matricule et le même nom. ToString doit renvoyer toutes les propriétés séparées par des
virgules.
Créer une classe Commercial en dérivant la classe Salarie. Cette classe aura 2 propriétés
supplémentaires pour calculer la commission :
chiffre d'affaire
chiffreAffaire Double
commission en % commission Integer
Créer les deux constructeurs standards de la classe Commercial.
Créer les méthodes d'accès aux propriétés supplémentaires.
Surcharger la méthode CalculerSalaire pour calculer le salaire réel (fixe + commission).
Surcharger les autres méthodes de la classe de base pour lesquelles on jugera nécessaire de
faire ainsi.
Tester les classes Salarie et CommercialC.Bayoudhi, M.Ennigrou
27
Evènement
•Il est possible de définir un évènement pour la classe
•Deux étapes sont alors nécessaires
1. Déclarer l’évènement avec le mot clé Event
2. Utiliser l’instruction RaiseEvent pour le déclencher lorsqu’une condition le
nécessite
Exemple
Public Class Class1
Private _mTexte As String
Public Event TextChange(ByVal UserName As String)
Public Property Texte()
Get
Déclare l’évènement
Return _mTexte
End Get
Set(ByVal Value)
If Value <> _mTexte Then
RaiseEvent TextChange("hello« ) _mTexte = Value
End Set
End Property
Déclenche l’évènement
End Class
C.Bayoudhi, M.Ennigrou
28