2. Notion d’objet
Un objet est une entité cohérente
rassemblant des données et du code
travaillant sur ces données.
3. Une classe
Une classe est une description abstraite
d’un objet. Elle peut être considérée en
quelque sorte comme un moule…
Véhicule Nom de la classe
+Marque : string(idl)
+Puissance fiscale : int
+Vitesse maximale : int
Description des attributs
+Vitesse courante : int ou données membres
+Creer un véhicule()
+Détruire un véhicule() Description des méthodes
+Démarrer() = code associé
+Accélérer(entrée Taux : int)
4. L’instanciation
Chaque objet correspond à une instance
de la classe à laquelle il fait référence.
Marque = Peugeot
Véhicule Puissance = 7
+Marque : string(idl) Vitesse maximale = 197
+Puissance fiscale : int Vitesse courante = 98
+Vitesse maximale : int
+Vitesse courante : int Marque = Renault
+Creer un véhicule() Puissance = 5
+Détruire un véhicule() Vitesse maximale = 176
+Démarrer() Vitesse courante = 65
+Accélérer(entrée Taux : int)
5. L’instanciation
La création d’un objet est constituée de deux
phases :
• Une phase du ressort de la classe : allouer de la
mémoire et un contexte d’exécution minimaliste.
Méthode de classe
• Une phase du ressort de l’objet : initialiser ses
attributs d’instance. Méthode d’instance
Dans les langages tels que Java, C++, VB ou
C#, ces deux phases ne sont pas différenciées.
Appel à une méthode spéciale : le constructeur
7. Le principe d’encapsulation
Abstraction de données :
La structure d’un objet n’est pas visible de l’extérieur.
Seule son interface est accessible par le biais de messages
invocables par le client.
Abstraction procédurale :
L’invocation d’un message est une opération atomique.
Aucun élément d’information sur les traitements internes
mis en œuvre n’est nécessaire.
Cette notion est déjà mise en œuvre dans
l’établissement des routines (fonctions ou
procédures) dans les langages classiques.
8. Encapsulation
Intérieur de l’objet protégé
Complexité dissimulé
Maintenance simplifié (centralisation)
Echanges avec l’externe sont codifiés
9. Classification : Hiérarchie d’héritage
Véhicule
Classes abstraites
VéhiculeTerrestre Véhicule Aérien
Voiture Camion Avion Hélicoptère
Permet de gérer la complexité en ordonnant les classes au
sein d’arborescences de classes d’abstraction croissante
10. Exemple de hiérarchie d’héritage
Image
Classes abstraites
Bitmap MetaFile
La classe image ne peut être instanciée
MustInherit Public Class Image
Instanciation d’une image bitmap ou metafile
Public Class Bitmap
Inherits Image
11. Principe de généralisation
Consiste à factoriser les éléments communs
d’un ensemble de classe dans une classe
plus générale
On parle alors de super-classe ou sur-classe
• la propriété Height
• la méthode Save
appartiennent à la classe image
12. Principe de spécialisation
Permet de définir les particularités d’un
ensemble d’objets non prises en compte par
les classes déjà identifiées.
• la méthode SetPixel est une méthode
spécifique de la classe BitMap
• la méthode PlayRecord est une méthode
spécifique de la classe MetaFile
d’où la nécessité d’avoir des sous-classes
spécialisées
13. La classification
Généralisation Spécialisation
Véhicule
Classes abstraites
VéhiculeTerrestre Véhicule Aérien
Voiture Camion Avion Hélicoptère
Détermination des sur-classes et sous-classes
14. Classification
Les classes de plus bas niveau (terminales)
sont des classes concrètes
Les classes non terminales sont souvent
abstraites
Eviter une trop grande profondeur de
décomposition
La décomposition doit être stable
15. Héritage : Exprime une relation EST
Compte
+Crédit : double
+Débit : double
Compte Epargne
+déposer()
+retirer() +Crédit : double
+calculerSolder() : long +Débit : double
+Taux Intérêts : long
+déposer()
Compte Epargne +retirer()
+calculerSolder() : long
+Taux Intérêts : long
+calculerIntérêts() : long
+CalculerIntérêts() : long
Une sous classe hérite des propriétés et
méthodes de la sur-classe
16. Association : Exprime une dépendance
Client -Passe -Appartient Commande
* 0..*
Association Multiplicité
Une classe dépend d’une autre classe
pour accomplir une fonction spécifique
La multiplicité détermine le nombre
d’objets pouvant participer à une relation
17. Agrégation : Une relation Tout-Partie
Commande -Comporte -partie de Ligne de Commande
1 *
Agrégation
Classe complexe comprenant d’autres
classes
La ligne commande est une partie de la
commande
18. Polymorphisme via héritage d’interface
Employé La même
opération se
«utilise» +Creer()
+Supprimer() comporte
«interface»
différemment
IPersonne quand elle
+Creer()
+Supprimer()
s’applique à des
«utilise»
Client
objets basés sur
des classes
+Creer() différentes
+Supprimer()
19. Autres formes de polymorphisme
Par substitution de méthodes :
La méthode dans la classe dérivée se substitue à
celle définie dans la classe de base
Par liaison tardive Late Binding :
On n’indique pas au compilateur la classe spécifique
utilisée. On déclare un objet générique.
On utilise lors de l’instanciation une classe
spécifique.
A éviter pour des problèmes de performances et une
mise en oeuvre délicate.
20. Définition d’une classe
1. Ajouter une classe au projet
2. Attribuer un nom à la classe (nom du fichier)
3. Créer le ou les constructeurs
4. Créer un destructeur si nécessaire
5. Déclarer les propriétés
6. Déclarer les méthodes
7. Déclarer les évènements
21. Création d’un constructeur
Public Sub New() ' Constructeur simple
intValeur = 1
End Sub
Public Sub New(ByVal i As Integer) ' S 1
intValeur = i
End Sub
Public Sub New(ByVal i As Integer, ByVal s As String) ' S 2
intValeur = i
strValeur = s
End Sub
22. Définition des méthodes
Public Sub MaMethode(ByVal i As Integer)
'...
End Sub
Public Function MaFonction(ByVal i As Integer) As Boolean
'...
End Function
Public Function MaFonction(ByVal s As String) As Boolean
'...
End Function
23. Définition des propriétés
Public Property Nom() As String
Get
Return sNom ' Retourne valeur variable locale
End Get
Set(ByVal Value As String)
sNom = Value ' Affecte valeur à variable locale
End Set
End Property
24. Restriction sur usage des propriétés
Public ReadOnly Property Age() As String
Get
Return iAge.ToString
End Get Lecture seule
End Property
Public WriteOnly Property Lecture() As String
Set(ByVal Value As String)
strValeur = Value
Ecriture seule
End Set
End Property
25. Définition des évènements
Public Event Evenement(ByVal message As String)
Public Property Nom() As String
Set(ByVal Value As String)
sNom = Value ' Affecte valeur à variable locale
RaiseEvent Evenement("Le nom a été renseigné")
End Set
End Property
26. Les modificateurs d’accessibilité
Mot clé Définition
Public Accessible partout
Private Accès dans la classe uniquement
Friend Accès Classe - Espace de nom
Assemblage
Protected Accès classe et classes dérivées
27. Utilisation de destructeurs
Sub finalize utilisée pour nettoyer des ressources
Code exécuté par le garbage collector
La destruction peut ne pas être immédiate
Peut être utilisé pour nettoyer d’autres ressources
ouvertes
Protected Overrides Sub finalize()
oCon.Close() ' ferme la connexion
End Sub
28. Garbage collection
Processus en tâche de fond qui nettoie les
références inutilisées
varObjet = Nothing permet d’indiquer que l’objet peut
être supprimé
Les objets ou autre mémoire qui sont hors d’atteinte
(hors de portée) sont nettoyés
La destruction de l’objet est autorisée mais …
– Aucune garantie quant au moment où elle aura lieu
– La collecte des objets inaccessibles peut être forcée par le
recours directe à la classe système GC : GC.Collect(). Ce
processus n’est toutefois pas recommandé.
29. L’héritage
Une classe dérivée hérite d’une classe de base
Les propriétés, méthodes, évènements pourront être
hérités
Mots clés précisant les conditions d’héritage
– Inherits : dans la classe dérivée à partir d’une
classe de base
– NotInheritable : Impossible d’hériter
– MustInherit : Impossible de créer des instances de
cette classe
30. Substitution et surcharge
Une classe dérivée peut remplacer une
méthode ou une propriété héritée
– Overridable : rend la substitution possible
– MustOverride : substitution obligatoire
– Overrides : remplacement de méthodes
– NotOverridable : substitution impossible
Utiliser
Overloads pour surcharger une
méthode dans une classe héritée avec une
signature différente
31. Exemples d’héritage
Public MustInherit Class ClasseBase
Private sNom As String
Public Property Nom() As String
Get
Return sNom ' Retourne valeur variable locale
End Get
….
End Property
Public overridable sub Methode()
End Sub
End Class
32. Exemples d’héritage
Public Class ClasseDerivee
Inherits ClasseBase
Private sPrenom As String
Public Sub New()
End Sub
Public Overrides Sub Methode()
' Méthode substituée
End Sub
End Class
33. Exemples d’héritage
Mot clé MyBase fait référence à la classe de base
immédiate dans la hiérarchie
– Souvent utilisé pour créer une instance de la classe de base
– Permet aussi d’accéder à une méthode de la classe de base
Public Class ClasseDerivee2
Inherits ClasseBase2
Public Sub New(ByVal nom As String)
MyBase.New(nom)
….
End Sub
End Class
34. Mise en œuvre du polymorphisme
Trois approches possibles
– La liaison tardive. A la compilation, on ne spécifie pas la
nature de la classe mais on travaille avec un objet
indéterminé. Pose de nombreux soucis
– la substitution de membres d’une classe de base dans une
classe dérivée
– Les interfaces
Interface
– Les signatures des méthodes et propriétés sont définies
dans l’interface
– L’implémentation du code se fait dans la classe qui
implémente les méthodes
35. Liaison tardive
Dim oMaClasse As Object
Sub Instancier(ByVal typeObjet As String)
If typeObjet = "Chat" Then
oMaClasse = New ClasseDerivee
Else
oMaClasse = New ClasseDerivee2
End If
oMaClasse.Mordre() ' Doit être implémentée dans les 2 classes
End Sub
36. Définition d’une interface
Les interfaces définissent des signatures de
méthodes, d’évènements et de propriétés
Définie au sein d’un module avec les mots clés
Interface – End Interface
Surchage possible des membres
Peut hériter d’une autre interface : Inherits
Interface MonInterface
Function TraiterNom(ByVal Nom As String) As String
Sub MethodeX(ByVal I As Integer)
Sub MethodeX(ByVal S As String)
End Interface
37. Implémentation d’une interface
Si une classe implémente une interface, elle doit
implémenter l’ensemble des membres de l’interface
Public Class ClasseImplementation
Implements MonInterface
Public Sub MethodeX(ByVal I As Integer) Implements MonInterface.MethodeX
'... code implémentation
End Sub
Public Sub MethodeX1(ByVal S As String) Implements MonInterface.MethodeX
End Sub
Public Function TraiterNom(ByVal Nom As String) As String Implements MonInterface.TraiterNom
End Function
End Class
38. Données membres partagées
Permettre
à plusieurs instances de partager
une même variable de classe
Public Class CompeEpargne
Private dMontant As Double
Public Shared TauxInteret As Double
Public Function CalculInterets() As Double
Return dMontant * TauxInteret
End Function
End Class
39. La persistance La sérialisation
Un objet doit vivre au-delà de la portée
de l’instance de ce dernier
Permettre de stocker nos objets dans
une mémoire non volatile…
Plusieurs mécanismes peuvent être mis
en œuvre
Recours fréquent à XML aujourd’hui