Exercice(1/2)
(cid:1) L’interface suivante permet de
calculer le poids idéal d’une
personne basé sur sa taille et son
sexe, le formulaire contient :
(cid:1) Un champ de texte pour entrer la
taille : txtTaille,
(cid:1) Deux boutons d’option : optH et
optF,
optF,
(cid:1) Un bouton de commande pour
calculer le poids idéal,
(cid:1) Un champ de texte en lecture
seule pour afficher le poids idéal :
txtPoids,
(cid:1) Un ErrorProvider pour contrôler
le champ txtTaille : errP, ce champ
doit être non vide et de type
numérique.
89
Exercice(2/2)
(cid:1) Les formules de calcul du poids idéal sont comme suit :
(cid:1) Poids idéal Masculin (en Kg) = Taille (en cm) - 100 - ((Taille (en
cm) - 150) /4).
(cid:1) Poids idéal Féminin (en Kg) = Taille (en cm) - 100 - ((Taille (en
1.
1.
2.
cm) - 150) /2,5).
Ecrire le code de la procédure du clic sur le bouton
Ecrire le code de la procédure du clic sur le bouton
Calculer.
Ecrire le code de la procédure Validating et Validated du
champ de texte txtTaille.
90
Chapitre 4
Chapitre 4
Concepts de base de la P.O.O.
sous Visual basic.Net
91
VB.Net O.O.
(cid:1) VB.Net est un langage de programmation
Orientée Objet
(cid:1) Programmation O.O. :
(cid:1) Encapsulation
(cid:1) Héritage
(cid:1) Polymorphisme
(cid:1) Création d’une classe :
(cid:1) Champs
(cid:1) Constructeurs et destructeur
(cid:1) Méthodes
(cid:1) Accesseurs
92
Notion d’objet
(cid:1) Un objet est une entité cohérente rassemblant des
données et du code travaillant sur ces données.
93
Définition d’une classe
(cid:1) Une classe est une description abstraite d’un objet. Elle
peut être considérée en quelque sorte comme un
modèle…
94
Définition d’une classe
(cid:1) Définition d’une classe :
Classe abstraite : non instanciable
Classe finale : ne peut pas être classe mère
[ Public | Private | Protected | Friend | Protected Friend ]
[ MustInherit | NotInheritable | Interface]
Class nom_classe
Class
[ Inherits nom_classe_base]
[ Implements nom_classe_interface]
'propriétés, méthodes ...
End Class
Classe interface
Classe interface
95
Exemple
Public Class Personne
public nom As String
Publicité
public prenom As String
public date_naiss As Date
End Class
96
Public Class Test
Public Shared Sub main( )
Dim p1 as Personne
p1 = new Personne
' ou bien dim p1 as new
Personne
Personne
' initialisation
With p1
.nom="AAA"
.prenom="BBB"
End with
End sub
End Class
Constructeur/Destructeur d’une classe
(cid:1) Constructeur :
(cid:1) Méthode particulière qui servira a créer des instances (sert aussi pour
initialiser les champs d’un objet)
Son nom est toujours : public sub New ([paramètres])
(cid:1)
(cid:1) Avec ou sans paramètres (constructeur par défaut)
Public Sub New()
nom = ""
nom = ""
prenom = ""
date_naiss = Nothing
End Sub
Public Sub New(n As String, p As String, d As Date)
nom = n
prenom = p
date_naiss = d
End Sub
97
Constructeur/Destructeur d’une classe
(cid:1) Destructeur :
(cid:1) Méthode particulière qui servira à détruire une instance
(cid:1) Pas vraiment nécessaire (faite automatiquement)
(cid:1) Sa signature :
Protected Overrides Sub finalize()
'quelque code comme la fermeture d‘une connexion
'quelque code comme la fermeture d‘une connexion
End Sub
98
Accesseurs d’une classe
(cid:1) Getters / Setters :
(cid:1) Méthodes qui servent à récupérer / modifier les valeurs des
champs (private) d’un objet.
Public Class Personne
Private nom As String
Private prenom As String
Private date_naiss As Date
Private date_naiss As Date
Public Property Name( ) As
String
Get
return nom
End Get
Set (Value As String)
nom = Value
End Set
End Property
'...
End Class
99
Utilisation
Public Class Test
Public Shared Sub main( )
Dim p1 as new Personne
p1.Name = "AAA"
p1.Name = "AAA"
Dim n As String
n= p1.Name
Console.WriteLine(n)
‘affiche AAA
End sub
End Class
Publicité
(cid:1)Shared ≡ membre statique
(partagé par toutes les
instances d‘une classe)
Accesseurs d’une classe
(cid:1) Utilisez le spécificateur ReadOnly dans la déclaration de
la propriété pour ne créer que la propriété Get.
(cid:1) Utilisez le spécificateur WriteOnly dans la déclaration
de la propriété pour ne créer que la propriété Set.
(cid:1) Exemple :
(cid:1) Public ReadOnly Property Name( ) As String
Get
return nom
End Get
End Property
100
Méthodes d’une classe
(cid:1) Les méthodes : procédures ou fonctions à l’intérieur d’une classe
qui servent à manipuler les attributs de la classe.
(cid:1)Généralement, les méthodes sont déclarées "Public"
(cid:1) Surcharge de méthodes : création au sein d’une classe de
méthodes ayant le même nom mais avec des paramètres différents
(en nombre et/ou en type)
(cid:1)Modificateur overloads
(cid:1)Modificateur overloads
(cid:1) Les points suivants ne sont pas pris en compte pour distinguer
deux méthodes surchargées :
(cid:1) Le nom des paramètres
(cid:1) Le type de retour d’une fonction
(cid:1) Les modificateurs ByVal ou ByRef appliqués aux paramètres de la
(cid:1) méthode.
(cid:1)Dans ces cas, il faut utiliser un autre nom de fonction ou procédure
101
Surcharge de méthodes (exemple)
Public Class Personne
'les attributs de la classe personne...
Public overloads Sub affichage()
Console.Write(“Mr {0} {1} né le {2}”, nom, prenom, date_naiss)
End Sub
Public overloads Sub affichage(ByVal langue As String)
Public overloads Sub affichage(ByVal langue As String)
Select Case langue
Case "fr","FR"
Console.Write("Mr {0} {1} né le {2}", nom, prenom, date_naiss)
Case "en","En"
Console.Write("Mr {0} {1} was born the {2}", nom, prenom, date_naiss)
End Select
End Sub
End class
102
Héritage et redéfinition de méthodes
(cid:1) Héritage : relation entre 2 classes A et B "A est un B".
Public Class A
Inherits B
'Les attributs additionnels de B ...
'Les attributs additionnels de B ...
'Les méthodes additionnelles de B ...
End Class
103
Exemple
Public Class Client
Inherits Personne
Private code As Integer
Public Sub New (n as String, p as String, d as Date, co as integer)
MyBase.New(n,p,d)
code=co
code=co
End sub
Public Overrides Sub affichage( )
MyBase.affichage()
Console.Write(" Code Client : {0}",code)
End Sub
End Class
MyBase : fait référence à
la classe de base de
la classe de base de
l'instance actuelle d'une
classe
Overrides : redéfinition
de méthode
104
Publicité
Exemple
(cid:1)Utilisation :
Public Class Test
Public Shared Sub main( )
Dim c as Client
c=new Client("AAA","BB",#12/12/1990#,1123);
c.affichage()
' Affiche : Mr AAA BB né le12/12/1990 Code Client : 1123
End sub
End Class
105
Complément héritage(Modificateur)
(cid:1) NotInheritable : ce mot-clé indique que cette classe ne
peut pas être héritée, et peut être instancier.
(cid:1) NotOverridable : ce mot-clé indique que cette méthode
ne peut pas être redéfinie dans une classe dérivé.
(cid:1) Shadows : Spécifie qu'un élément de classe déclaré
redéclare et masque un élément de classe de base de
même nom.
106
Polymorphisme
(cid:1) Le polymorphisme est un mécanisme via lequel un objet peut
prendre plus d'une forme. Par exemple, si vous avez une classe
de base nommée Client, une référence de type Client peut
être utilisé pour contenir un objet de n'importe laquelle de
ses classes dérivées. Quand vous appelez une méthode à partir
de votre objet, le système déterminera automatiquement le
type de l'objet afin d'appeler la méthode appropriée.
type de l'objet afin d'appeler la méthode appropriée.
Dim x As Client
Dim cl As New Client("Ali", 1000)
Dim clg As New Grossiste("Ahmed", 7000, 0.2)
x = cl
Console.WriteLine(x.ToString)
x = clg
Console.WriteLine(x.ToString)
Grossiste
Client
107
Classes abstraites
(cid:1) Une classe abstraite est une classe qui n’implémente pas
forcement toutes ses méthodes (cid:1)n‘est pas instanciable.
(cid:1) C‘est une classe qui ne peut être utilisée qu‘en tant que classe
mère.
(cid:1) Sert à factoriser du code pour les classes dérivées (filles).
(cid:1) Une classe qui hérite d’une classe abstraite doit implémenter
(cid:1) Une classe qui hérite d’une classe abstraite doit implémenter
les méthodes qui restent.
Public MustInherit Class classAbs
'... Contient au moins une méthode avec le modificateur
MustOverride
End Class
108
Classes abstraites
(cid:1) 3 types de méthodes possibles dans la classe abstraite :
(cid:1) Public Overridable Sub X( ) ... End Sub : X( ) peut être
redéfinie
(cid:1) Public sub Y( ) ... End Sub : Y ( ) ne peut pas être redéfinie
(cid:1) Public MustOverride Sub Z ( ) : Z () doit être redéfinie
(public overrides Sub Z ( ) ... End sub)
(public overrides Sub Z ( ) ... End sub)
109
Classes interfaces
(cid:1) Une classe interface est une classe qui n’implémente
aucune de ses méthodes, les méthodes sont seulement
déclarées.
(cid:1) C’est une classe qui décrit les services qu’elle offre
(cid:1) Une classe qui implémente une interface doit
obligatoirement implémenter chacune des méthodes
obligatoirement implémenter chacune des méthodes
déclarées dans l’interface.
(cid:1) Une classe peut implémenter une ou plusieurs classes
interfaces
110
Classes interfaces
(cid:1) Exemple :
Public Interface interf1
' public Sub X( )
'...
End Interface
Publicité
End Interface
Public class c1 Implements interf1
Public Sub X( ) Implements interf1.X
...
End Sub
End class
111
Exercice(1/4)
(cid:1) Créer la classe Salarie. Cette classe aura 5 propriétés de type
public:
(cid:1) matricule Matricule
(cid:1) catégorie Categorie
(cid:1) service
(cid:1) nom
(cid:1) salaire
salaire
Service Integer
Nom String
Salaire Double
Salaire Double
Integer
Integer
(cid:1) 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.
(cid:1) Implanter une classe application, avec une méthode Main dans
laquelle la classe Salarie sera instanciée pour tester ses
propriétés et ses méthodes.
112
Exercice(2/4)
(cid:1) Protéger les propriétés et en interdire l'accès de
l'extérieur de l'objet (l'accès aux fonctions membres doit
toujours être possible), créer les méthodes d'accès aux
propriétés Get et Set.
(cid:1) Modifier la fonction Main de la classe Application pour
tester.
tester.
(cid:1) Implémenter les constructeurs et le destructeur de la
classe Salarie.
(cid:1) Afin de mettre en évidence les rôles respectifs des
constructeurs et du destructeur, implémenter ceux-ci
pour qu'ils affichent un message à chaque fois qu'ils sont
exécutés.
113
Exercice(3/4)
(cid:1) Implémenter un compteur d'instances pour la classe
Salarie.
(cid:1) Ajouter une méthode de classe permettant de mettre le
compteur à zéro ou à une valeur prédéfinie.
(cid:1) Modifier le jeu d'essai de l'application Main pour tester
ces fonctions.
ces fonctions.
(cid:1) 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.
114
Exercice(4/4)
(cid:1) Créer une classe Commercial en dérivant la classe Salarie.
Cette classe aura 2 propriétés supplémentaires pour calculer
la commission :
chiffreAffaire Double
(cid:1) chiffre d'affaire
(cid:1) commission en % commission Integer
(cid:1) Créer les deux constructeurs standards de la classe Commercial.
(cid:1) Créer les deux constructeurs standards de la classe Commercial.
Ne pas oublier d'appeler les constructeurs équivalents de la classe de
base.
(cid:1) Créer les méthodes d'accès aux propriétés supplémentaires.
(cid:1) Surcharger la méthode CalculerSalaire pour calculer le salaire réel
(fixe + commission).
(cid:1) Surcharger les autres méthodes de la classe de base pour lesquelles
on jugera nécessaire de faire ainsi.
(cid:1) Tester les classes Salarie et Commercial
115