You are on page 1of 39

Programmation Orientée Objet

Notion d’objet
 Un objet est une entité cohérente
rassemblant des données et du code
travaillant sur ces données.
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)
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)
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
L’instanciation

Classe

Constructeur

Les objets instanciés


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.
Encapsulation

Intérieur de l’objet protégé


Complexité dissimulé
Maintenance simplifié (centralisation)
Echanges avec l’externe sont codifiés
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
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
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
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
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


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
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
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
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
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()
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.
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
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
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
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
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
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
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
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
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é.
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
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
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
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
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
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
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
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
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
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
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

You might also like