100% ont trouvé ce document utile (1 vote)
467 vues30 pages

Cours POO

Ce document présente un support de formation sur l'apprentissage d'un langage de programmation orienté objet VB.NET. Il contient plusieurs exercices pratiques sur des concepts clés comme les classes d'objets, l'encapsulation, l'héritage, etc.

Transféré par

hamza2016
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd
100% ont trouvé ce document utile (1 vote)
467 vues30 pages

Cours POO

Ce document présente un support de formation sur l'apprentissage d'un langage de programmation orienté objet VB.NET. Il contient plusieurs exercices pratiques sur des concepts clés comme les classes d'objets, l'encapsulation, l'héritage, etc.

Transféré par

hamza2016
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats DOC, PDF, TXT ou lisez en ligne sur Scribd

Support de Formation :

Apprentissage d'un langage de Programmation


Oriente Objet : [Link]

[Link] et la programmation objet

afpa

auteur

centre

JPP

Caen

formation

module

sq/item

type doc

millsime

page 1

sup. form. 08/10 - v2.0

[Link]

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

SOMMAIRE

2/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

SOMMAIRE.............................................................................................................
INTRODUCTION.....................................................................................................
T.P. N1 - CLASSE DOBJET - ENCAPSULATION..............................................
1.1

OBJECTIFS........................................................................................................

1.2

CE QUIL FAUT SAVOIR.....................................................................................

1.3

1.2.1

Notion de classe.....................................................................................

1.2.2

Encapsulation.........................................................................................

1.2.3

Dclaration des proprits d'un objet.....................................................

1.2.4

Implantation des mthodes....................................................................

1.2.5

Instanciation...........................................................................................

1.2.6

Accs aux proprits et aux mthodes..................................................

1.2.7

Conventions d'criture............................................................................

TRAVAIL RALISER........................................................................................

T.P. N 2 - ENCAPSULATION PROTECTION ET ACCS AUX DONNES


MEMBRES.........................................................................................10
2.1

OBJECTIFS...................................................................................................... 10

2.2

CE QU'IL FAUT SAVOIR...................................................................................10


2.2.1

Protection des proprits......................................................................10

2.2.2

Fonctions d'accs aux proprits..........................................................11

Remarque :........................................................................................................ 11
2.2.3 Accs aux attributs membres par les Property de classe.........................12
2.3

TRAVAIL RALISER......................................................................................12

T.P. N 3 - CONSTRUCTION ET DESTRUCTION................................................13


3.1

OBJECTIFS...................................................................................................... 13

3.2

CE QU'IL FAUT SAVOIR...................................................................................13

3.3

3.2.1

Constructeurs.......................................................................................13

3.2.2

Surcharge des constructeurs................................................................14

3.2.3

Proprits de classe.............................................................................15

3.2.4

Mthodes de classe..............................................................................15

3.2.5

Destructeur........................................................................................... 16

TRAVAIL RALISER......................................................................................17

T.P. N4 - L'HRITAGE.........................................................................................18
4.1

OBJECTIFS...................................................................................................... 18

4.3

CE QUIL FAUT SAVOIR...................................................................................18


4.2.1

L'hritage.............................................................................................. 18

4.2.2

Protection des proprits et des mthodes..........................................19

4.2.3

Mode de reprsentation........................................................................19

4.2.5

Insertion d'une classe dans une hirarchie...........................................20

4.2.6

Insertion d'une nouvelle classe partir de Object................................21

4.2.7

Constructeur et hritage.......................................................................22

4.2.8

Appel aux mthodes de la classe de base...........................................23


3/30

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

INTRODUCTION
Ce support traite des concepts de Programmation Oriente Objet en langage
[Link]. Il est constitu dune liste dexercices permettant de construire pas pas
une classe dobjet . Les corrigs types de chaque tape sont prsents dans des
rpertoires spars, il s'agit en fait du mme cas qui va voluer, tape par tape, pour
aboutir un fonctionnement correct de la classe dans l'univers C#.
Chaque exercice est structur de la faon suivante :

Description des objectifs viss.


Explications des techniques utiliser (Ce quil faut savoir).
Enonc du problme rsoudre (Travail raliser).
Renvois bibliographiques ventuels dans les ouvrages traitant de ces techniques
(Lectures).
Tous ces exercices sont corrigs et comments dans le document intitul :

Proposition de corrig C#_BPC.


Apprentissage dun langage de programmation Oriente Objet

Dans ce support, les programmes produits fonctionneront en mode Console


Pour pouvoir utiliser ce support, les bases de la programmation en langage C# doivent
tre acquises.

4/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

T.P. N1 - CLASSE DOBJET - ENCAPSULATION


1.1 OBJECTIFS

Notion de classe d'objet

Dfinition d'une nouvelle classe d'objet en C#.

Encapsulation des proprits et des mthodes de cet objet.

Instanciation de l'objet.
1.2 CE QUIL FAUT SAVOIR
1.2.1 Notion de classe
Crer un nouveau type de donnes, c'est modliser de la manire la plus juste un
objet, partir des possibilits offertes par un langage de programmation.
Il faudra donc numrer toutes les proprits de cet objet et toutes les fonctions qui
vont permettre de dfinir son comportement. Ces dernires peuvent tre classes de la
faon suivante :

Les fonctions dentre/sortie. Comme les donnes de base du langage C#,


ces fonctions devront permettre de lire et dcrire les nouvelles donnes sur les
priphriques (clavier, cran, fichier, etc.).

Les oprateurs de calcul. Sil est possible de calculer sur ces donnes, il
faudra crer les fonctions de calcul.

Les oprateurs relationnels. Il faut au moins pouvoir tester si deux donnes


sont gales. Sil existe une relation dordre pour le nouveau type de donne, il faut
pouvoir aussi tester si une donne est infrieure une autre.

Les fonctions de conversion. Si des conversions vers les autres types de


donnes sont ncessaires, il faudra implmenter galement les fonctions
correspondantes.

Intgrit de l'objet. La manire dont est modlis le nouveau type de


donnes nest probablement pas suffisant pour reprsenter l'objet de faon exacte.
Par exemple, si lon reprsente une fraction par un couple de deux entiers, il faut
galement vrifier que le dnominateur dune fraction nest pas nul et que la
reprsentation dune fraction est unique (simplification).
La dclaration dun nouveau type de donnes et les fonctions qui permettent de grer
les objets associs constituent une [Link] lobjet.
Les proprits de l'objet seront implantes sous la forme de donnes membres de la
classe.
Les diffrentes fonctions ou mthodes seront implmentes sous la forme de
fonctions membres de la classe.
De faon courante, dans le patois de la programmation oriente objet, donnes
membres et fonctions membres de la classe sont considres respectivement comme
synonymes de proprits et mthodes de l'objet.

5/30
/

Support de Formation

1.2.2

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Encapsulation
L'encapsulation est un concept important de la Programmation Oriente Objet.
L'encapsulation permet de rassembler les proprits composant un objet et les
mthodes pour les manipuler dans une seule entit appele classe de l'objet.
Une classe, en C# se dclare par le mot cl class suivi d'un identificateur de classe
choisi par le programmeur de la faon suivante :
Public Class NomDeLaClasse

' Dclaration des proprits et


' des mthodes de l'objet
End Class

1.2.3

Le fichier contenant le code source portera le nom [Link].


Les identifiants de classe obissent aux mme rgles que les identifiants de variables et
de fonctions. Par convention, ils commencent par une Majuscule (C# considre les
majuscules comme des caractres diffrents des minuscules).
Les proprits et les mthodes de l'objet seront dclares et implmentes dans le bloc
ferm par End Class contrl par le mot cl Class. Cela constitue l'implmentation
du concept d'encapsulation en VB .NET
Dclaration des proprits d'un objet
Les proprits d'un objet sont dclares, comme des variables, l'intrieur du bloc {
} contrl par le mot cl class.
Public Class NomDeLaClasse
Public

NomDeLaPropriete As TypeDeLaPropriet

' Dclaration des mthodes de l'objet


End Class

Les proprits peuvent tre dclares tout moment l'intrieur du corps de la


classe.
Chaque dclaration de proprit est construite sur le modle suivant :
Public NomDeLaPropriete As TypeDeLaPropriet

Une proprit peut tre initialise lors de sa dclaration :


Public NomDeLaPropriete As TypeDeLaPropriet =
valeurInitiale;

1.2.4

Les identifiants de proprit par convention commencent par une majuscule.


Implantation des mthodes

Les mthodes peuvent tre implmentes sous forme de procdures ou de fonctions.


Mthode en tant que fonction
Les mthodes d'une classe sont implmentes, l'intrieur du bloc entre Function et
End Function.
Quand on considre une mthode par rapport l'objet laquelle elle est applique, il
faut voir l'objet comme tant sollicit de l'extrieur par un message. Ce message peut

6/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

comporter des paramtres. L'objet doit alors ragir ce message en excutant cette
fonction ou mthode.
Public Class NomDeLaClasse
' Dclaration des proprits de l'objet
Public Vitesse As Integer = 30
Public Function NomDeMethode(par1 As Type1, par2 As Type2)
As TypeResultat
' Instructions de la mthode
' retour de la fonction
NomDeMethode = expression
OU
Return expression
End Function
End Class

Les identifiants de mthodes commencent par une majuscule.

Si aucun paramtre n'est dsign explicitement entre les parenthses, le


compilateur considre la mthode comme tant sans paramtre. Dans ce cas, les
parenthses sont nanmoins obligatoires.

Pour renvoyer un rsultat de la fonction, l'une des instructions doit tre une
affectation au nom de la fonction d'une expression de
mme type ou un instruction Return ( ce qui est plus
standard )

.
Mthode en tant que sous-programme
Les mthodes d'une classe sont implmentes, l'intrieur du bloc entre Sub et End
Sub. Le passage de paramtres se passe comme pour une fonction, par valeur ou par
rfrence. Il n' ya pas de retour de valeur , ou alors il faut modifeir une valeur de
paramtre passe par rfrence.

7/30
/

Support de Formation

1.2.5

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Instanciation
Pour qu'un objet ait une existence, il faut qu'il soit instanci. Une mme classe peut
tre instancie plusieurs fois, chaque instance ayant des proprits ayant des valeurs
spcifiques.
En C#, il n'existe qu'une seule manire de crer une instance d'une classe. Cette
cration d'instance peut se faire en deux temps :

Dclaration d'une variable du type de la classe de l'objet,

Instanciation de cette variable par l'instruction New.


Par exemple, l'instanciation de la classe String dans la fonction Main d'une classe
application se passerait de la faon suivante :
Dim s As String
s = new String("AFPA")

La dclaration d'une variable s de classe String n'est pas suffisante. En effet, s ne


contient pas une donne de type String. s est une variable qui contient une
rfrence sur un objet. Par dfaut, la valeur de cette rfrence est null, mot cl C#
signifiant que la variable n'est pas rfrence. La rfrence d'un objet doit tre affects
cette variable. Cette rfrence est calcule par l'instruction New au moment de
l'instanciation.
Ces deux tapes peuvent tre rduites une seule instruction :
Dim sb As String = New String("toto")
ou
Dim sc As String = "titi"

1.2.6

Accs aux proprits et aux mthodes


Bien qu'un accs direct aux proprits d'un objet ne corresponde pas exactement au
concept d'encapsulation de la programmation oriente objet, il est possible de le faire
en [Link] On verra, au chapitre suivant, comment protger les donnes membres en
en interdisant l'accs.
L'accs aux proprits et aux mthodes d'une classe se fait par l'oprateur ..
Oprateur .
[Link](2,1)

1.2.7

Conventions d'criture
Quand on dbute la Programmation Oriente Objet, l'un des aspects le plus rebutant
est l'impression d'parpillement du code des applications. En respectant quelques
conventions dans l'criture du code et en organisant celui-ci de faon rationnelle, il est
possible de remdier facilement cet inconvnient.
Ces conventions ne sont pas normalises et peuvent diffrer en fonctions des ouvrages
consults.
Les classes
Tous les identificateurs de classe commencent par une Majuscule. Par exemple :
Fraction.

8/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

Les proprits
Tous les identificateurs public de proprits commencent par une majuscule, les
proprits private ou protected par une minuscule
. Par exemple :
private denominateur, numerateur. ( sans accent )
Mthode
Elle commence par une lettre en majuscule.
exemple : AjouterVehicule() ; Demarrer() ; InsererFichier () ; le premier mot est un
verbe.
Les noms de fichiersConvention dcriture:
On codera chaque classe d'objet dans des fichiers diffrents dont l'extension sera .cs
Le nom de fichier sera identique au nom de la classe.
Exemple pour la classe Fraction : [Link]
Les noms de fichiersConvention dcriture:
Les noms de vairiables de travail commencent par une minuscule
1.3 TRAVAIL RALISER

Crer la classe Salarie. Cette classe aura 5 proprits de type public:


matricule
Matricule
Integer
catgorie
Categorie
Integer
service
Service
Integer
nom
Nom
String
salaire
Salaire
Double

Crer une mthode 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.
Implanter une classe application, avec une mthode Main dans laquelle la
classe Salarie sera instancie pour en tester les proprits et les mthodes.

9/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

T.P. N 2 - ENCAPSULATION
PROTECTION ET ACCS AUX DONNES MEMBRES
2.1 OBJECTIFS

Protection des proprits (donnes membres).

Fonctions de type Get et Set, d'accs aux proprits.


2.2 CE QU'IL FAUT SAVOIR
2.2.1 Protection des proprits
En Programmation Oriente Objet, on vite d'accder directement aux proprits par
l'oprateur . . En effet, cette possibilit ne correspond pas au concept d'encapsulation.
Certains langages l'interdisent carrment. En C#, c'est le programmeur qui choisit si
une donne membre ou une fonction membre est accessible directement ou pas.
Par dfaut, [Link] toutes les proprits et mthodes sont accessibles directement. Il
faut donc prciser explicitement les conditions d'accs pour chaque proprit et
chaque mthode. Pour cela, il existe trois mots-cls :

public - Aprs ce mot cl, toutes les donnes ou fonctions membres sont
accessibles.

private - Aprs ce mot cl, toutes les donnes ou fonctions membres sont
verrouilles et ne seront pas accessibles dans les classes drives.

protected - Aprs ce mot cl, toutes les donnes ou fonctions membres


sont verrouilles mais sont nanmoins accessibles dans les classes drives.

La distinction entre private et protected n'est visible que dans le cas de la


dclaration de nouvelles classes par hritage. Ce concept sera abord
ultrieurement dans ce cours.

Afin dimplanter correctement le concept d'encapsulation, il convient de verrouiller


l'accs aux proprits et de les dclarer private, tout en maintenant l'accs aux
mthodes en les dclarant public.
Exemple :
Public Class Client
Private numeroClient As Integer
Private nomClient As String
Private caClient As Double

' numro client


' nom du client
' chiffre d'affaire client

Public Function AugmenterCA(ByVal montant As Double)


caClient = montant
End Function
End Class
2.2.2

Fonctions d'accs aux proprits


Si les proprits sont verrouilles, on ne peut plus y avoir accs de l'extrieur de la
classe. Il faut donc crer des mthodes ddies l'accs aux proprits pour chacune
d'elles. Ces mthodes doivent permettre un accs dans les deux sens :

10/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

pour connatre la valeur de la proprit. Ces mthodes sont appeles mthodes


de type "Get.". La rponse de l'objet, donc la valeur retourne par la mthode
Get, doit tre cette valeur.
Par exemple, pour la proprit numeroClient, dclare Integer, la fonction
Get serait dclare de la faon suivante :
Public Function GetNumeroClient() As Integer
GetNumeroClient = numeroClient
End Function
Cette fonction pourra tre utilise dans la fonction Main, par exemple :
Dim cli As New Client
Dim numero As Integer
Numero = [Link]()

pour modifier la valeur d'une proprit. Ces mthodes sont appeles mthodes
Set. Cette mthode ne retourne aucune rponse. Par contre, un paramtre de
mme nature que la proprit doit lui tre indiqu.
Par exemple, pour la proprit numeroClient, dclare int, la fonction Set sera
dclare de la faon suivante :
Public Function SetNumeroClient(ByVal numeroClient As Integer)
[Link] = numeroClient
End Function
Me dsigne l'instance en cours qui excute la mthode.
Cette fonction pourra tre utilise dans la fonction main, par exemple :
Dim cli As New Client
[Link](1)
L'intrt de passer par des fonctions Set est de pouvoir y localiser des contrles
de validit des paramtres passs pour assurer la cohrence de l'objet, en y
dclenchant des exceptions par exemple. La scurisation des classes sera aborde
ultrieurement dans ce cours.

Remarque :
Les modifiers Set peuvent tre implments par des sous programmes Sub.

11/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

2.2.3 Accs aux attributs membres par les Property de classe


Il est possible de dfinir les accs aux attributs d'une classe par des proprits
Property la place des mthodes Get et Set. Cette possibilit existe aussi en VB
6.
Exemple de la classe Client :
Public Property Nom() As String
Get
Return nomClient
End Get
Set(ByVal Value As String)
nomClient = Value
End Set
End Property
Utilisation des "properties"
Dim cli As New Client
[Link](1)
' property
[Link] = "Toto"
[Link]("nom client " & [Link]())

2.3 TRAVAIL RALISER


A partir du travail ralis au T.P. N 1, modifier la classe Salarie pour :

protger les proprits et en interdire l'accs de l'extrieur de l'objet (l'accs


aux fonctions membres doit toujours tre possible), crer les mthodes
d'accs aux proprits Get et Set.
Modifier la fonction Main de la classe Application pour tester.

Bonus : vous pouvez tester les proprits de classe Property

12/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

T.P. N 3 - CONSTRUCTION ET DESTRUCTION


3.1 OBJECTIFS

Constructeurs et destructeur des objets

Proprits et mthodes de classe


3.2 CE QU'IL FAUT SAVOIR
3.2.1

Constructeurs
Quand une instance d'une classe d'objet est cre au moment de l'instanciation d'une
variable avec new, une fonction particulire est excute. Cette fonction s'appelle le
constructeur. Elle permet, entre autre, d'initialiser chaque instance pour que ses
proprits aient un contenu cohrent.
Un constructeur est dclar comme les autres fonctions membres deux diffrences
prs :

Le nom de l'identificateur du constructeur est New .

Un constructeur ne renvoie pas de rsultat. On utilisera donc des mthodfes de


type Sub pour les constructeurs

Exemple de dfinition dans la classe Client

' constructeur par dfaut vide


Public Sub New()
' vide
End Sub
' constructeur d'initialisation le CA est augment par la mthode AugmenterCA
Public Sub New(ByVal numero As Integer, ByVal nom As String)
[Link] = numero
[Link] = nom
End Sub
Innstanciation d'un objet Client :
Dim cli As Client = New Client(12, "Titi")
[Link]("numro client " & [Link]())

13/30
/

Support de Formation

3.2.2

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Surcharge des constructeurs


Il peut y avoir plusieurs constructeurs pour une mme classe, chacun d'eux
correspondant une initialisation particulire. Tous les constructeurs ont le mme
nom mais se distinguent par le nombre et le type des paramtres passs (cette
proprit s'appelle surcharge en programmation objet). Quand on cre une nouvelle
classe, il est indispensable de prvoir tous les constructeurs ncessaires. Deux sont
particulier :
Constructeur d'initialisation
Ce constructeur permet de procder une instanciation en initialisant toutes les
proprits, la valeur de celles-ci tant passe dans les paramtres.
Pour la classe Client, ce constructeur est dclar comme ceci :
' constructeur d'initialisation le CA est augment par la mthode AugmenterCA
Public Sub New(ByVal numero As Integer, ByVal nom As String)
[Link] = numero
[Link] = nom
End Sub
Cela va permettre d'instancier la classe Client de la faon suivante :
Dim cli As Client = New Client(12, "Titi")
[Link]("numro client " & [Link]())

Constructeur par dfaut


' constructeur par dfaut vide
Public Sub New()
' vide
End Sub
Un constructeur par dfaut existe dj pour chaque classe si aucun autre constructeur
n'est dclar. A partir du moment o le constructeur d'initialisation de la classe
Client existe, il devient impossible de dclarer une instance comme on l'a fait dans
le T.P. prcdent :
Dim cli As Client = New Client

Pour qu'une telle dclaration, sans paramtre d'initialisation, soit encore possible, il
faut crer un constructeur par dfaut. En fait ce n'est rellement indispensable que si
une instanciation de l'objet, avec des valeurs par dfaut pour ses proprits, a un sens.
Pour la classe Client, on peut s'interroger sur le sens des valeurs par dfaut des
proprits.

14/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

Constructeur de recopie
Le constructeur de recopie permet de recopier les proprits d'un objet existant dans
vers la nouvelle instance
Dim client1 As Client = New Client(1, "AAA")
Dim client2 As Client = New Client(client1)

// 1
// 2

En 1, client1 est un objet crer via le constructeur d'initialisation. La proprit


nomClien" est initialis par "AAA"
En 2, salarie2 est un objet diffrent de salarie1 mais les proprits des deux objets ont
les mmes valeurs. Pour cela, le dveloppeur doit crire un constructeur de recopie.
' constructeur de recopie
Public Sub New(ByVal unClient As Client)
[Link] = [Link]
[Link] = [Link]
[Link] = [Link]
End Sub

3.2.3

Proprits de classe
Jusqu' prsent, les proprits dclares taient des proprits d'instance. C'est dire
que les proprits de chaque objet, instanci partir de la mme classe, peuvent avoir
des valeurs diffrentes ( numero, nom, etc ).
Supposons donc maintenant, que dans la classe Client, il soit ncessaire de
disposer d'un compteur d'instance, dont la valeur serait le nombre d'instances en cours
un instant donn.
En [Link] il est possible de crer des proprits de classe. Leur valeur est la mme
pour toutes les instances d'une mme classe. Pour dclarer une telle proprit, on
utilise le mot-cl Shared. Par exemple, dans la classe Client, le compteur
d'instance pourrait tre dclar :
Private Shared compteur As Integer = 0

La proprit de classe compteur, initialise 0 lors de sa dclaration, sera


incrmente de 1 dans tous les constructeurs dvelopps pour la classe Client. Sa
valeur sera le nombre d'instances valides un instant donn.
3.2.4

Mthodes de classe
Comme pour les autres proprits dclares private, il est ncessaire de crer les
mthodes d'accs associes. Pour ce compteur, seule la mthode Get est ncessaire.
Cependant, comme les proprits de classe sont partages par toutes les instances de
la classe, le fait d'envoyer un message Get pour obtenir leur valeur n'a pas de sens.

15/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

En reformulant, on pourrait dire que le message Get envoyer pour obtenir le nombre
d'instances de classe Client ne doit pas tre envoye une instance donne de cette
classe, mais plutt la classe elle-mme. De telles mthodes sont appeles mthodes
de classe.
Une mthode de classe est dclare par le mot-cl Shared. Pour la mthode Get
d'accs au compteur d'instance on dclarerait :
Public Shared Function GetCompteur() As Integer
Return compteur
End Function
L'appel une mthode Shared est sensiblement diffrent aux appels standard. En
effet, ce n'est pas une instance particulire que le message correspondant doit tre
envoy, mais la classe.
Dans la fonction Main, par exemple, si l'on veut affecter une variable le nombre
d'instances de la classe Salarie, cela s'crirait :
Dim nInstances As Integer
nInstances = [Link]
3.2.5

Destructeur
En [Link] on ne peut pas dclencher explicitement la destruction d'un objet. Les
instances sont automatiquement dtruites lorsqu'elles ne sont plus rfrences. Le
programme qui se charge de cette tche s'appelle le Garbage Collector ou, en
franais, le ramasse-miettes. Le Garbage Collector est un systme capable de
surveiller les objets crs par une application, de dterminer quand ces objets ne sont
plus utiles, dinformer sur ces objets et de dtruire les objets pour rcuprer leurs
ressources.
Or si l'on veut que le compteur d'instances soit jour, il est ncessaire de connatre le
moment ou les instances sont dtruites pour dcrmenter la variable compteur.
C'est pour cela que le ramasse miettes envoie un message chaque instance avant
qu'elle soit dtruite, et ceci quelle que soit la classe. Il suffit d'crire la mthode de
rponse ce message, c'est la mthode Finalize(). Cette mthode s'appelle
destructeur. C'est , bien sr, une mthode d'instance de la classe que l'on est en train
de dvelopper. Dans la classe Client par exemple, elle se dclare
OBLIGATOIREMENT de la faon suivante :
Protected Overrides Sub Finalize()
compteur = compteur - 1
End Sub
Le problme est que l'on ne sait pas quand le ramasse miettes intervient

16/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

3.3 TRAVAIL RALISER

A partir du travail ralis au T.P. N 2, implmenter les constructeurs et le


destructeur de la classe Salarie.
Afin de mettre en vidence les rles respectifs des constructeurs et du
destructeur, implmenter ceux-ci pour qu'ils affichent un message chaque
fois qu'ils sont excuts.
Implmenter un compteur d'instances pour la classe Salarie.
Ajouter une mthode de classe permettant de mettre le compteur zro ou
une valeur prdfinie.
Modifier le jeu d'essai de l'application Main pour tester ces fonctions.

17/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

T.P. N4 - L'HRITAGE
4.1 OBJECTIFS
4.2
Gnralits sur l'hritage

Drivation de la classe racine Object

4.2.1

4.3 CE QUIL FAUT SAVOIR


4.4
L'hritage
Le concept d'hritage est l'un des trois principaux fondements de la Programmation
Oriente Objet, le premier tant l'encapsulation vu prcdemment dans les T.P. 1 3 et
le dernier tant le polymorphisme qui sera abord plus loin dans ce document.
L'hritage consiste en la cration d'une nouvelle classe dite classe drive partir
d'une classe existante dite classe de base ou classe parente.
L'hritage permet de :

rcuprer le comportement standard d'une classe d'objet (classe parente) partir


de proprits et des mthodes dfinies dans celles-ci,

ajouter des fonctionnalits supplmentaires en crant de nouvelles proprits et


mthodes dans la classe drive,

modifier le comportement standard d'une classe d'objet (classe parente) en


surchargeant certaines mthodes de la classe parente dans la classe drive.

Exemple de la classe Client. Nous rajoutons une mthode avec le mot cl Overridable
' mthode que l'on peut redfinir
Public Overridable Function Finance() As String
' mthode cre pour exemple de redfinition
' renvoie le CA pour un Client
' renvoie le CA + le taux de remise pour un Grossiste
Return "Le ca est : " + [Link]
End Function
Nous crons une classe Grossiste suivante :
Public Class Grossiste
Inherits Client
Private txRemise As Double
' le taux de remise appliqu au CA du client permet de calculer la remise
Public Function GetTauxRemise() As Double
Return txremise
End Function
' calcul de la remise

18/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

Public Function CalculRemise() As Double


Return txremise * [Link]
End Function
End Class
Cette classe hrite de la classe Client par Inherits Client.
Elle possde une proprit supplmentaire txRemise et l'accesseur associ ( il faut un
Set en plus videmment ) . Elle possde une mthode spcifique CalculRemise.
Nous allons redfinir la mthode Finance pour rajouter au chiffre d'affaire le taux de
remise sous forme de chane.
Public Overrides Function Finance() As String
Return [Link] + " et taux : " + txRemise
End Function
Le mot cl Overrides idique que l'on redfini la mthode finance.
4.2.2

Protection des proprits et des mthodes


En plus des mots-cls public et private dcrits dans les chapitres prcdents, il
est possible d'utiliser un niveau de protection intermdiaire de proprits et des
mthodes par le mot-cl protected.

4.2.3

public - Aprs ce mot cl, toutes les donnes ou fonctions membres sont
accessibles.

private - Aprs ce mot cl, toutes les donnes ou fonctions membres sont
verrouilles et ne seront pas accessibles dans les classes drives.

protected - Aprs ce mot cl, toutes les donnes ou fonctions membres


sont verrouilles mais sont nanmoins accessibles dans les classes drives.

Mode de reprsentation
Le concept d'hritage peut tre utilis pratiquement l'infini. On peut crer des classes
drives partir de n'importe quelle autre classe, y compris celles qui sont dj des
classes drives.
Supposons que ClasseB et ClasseC soient des classes drives de ClasseA et
que ClasseD et ClasseE soient des classes drives de ClasseB. Les instances de
la classe ClasseE auront des donnes et des fonctions membres communes avec les
instances de la classe ClasseB, voire de la classe ClasseA. Si les drivations sont
effectues sur plusieurs niveaux, une reprsentation graphique de l'organisation de ces
classes devient indispensable. Voici la reprsentation graphique de l'organisation de
ces classes :
ClasseA
ClasseB

ClasseC

ClasseD
ClasseE

19/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Le diagramme ci-dessus constitue la reprsentation graphique de la hirarchie de


classes construite partir de ClasseA.

Dans le cadre de la conception oriente objet, la mthode UML (United Modeling


Language) propose une autre reprsentation graphique d'une telle hirarchie :
ClasseA

ClasseB

ClasseE

4.2.5

ClasseC

ClasseD

Insertion d'une classe dans une hirarchie


Bien que l'on ait opr comme cela depuis le dbut de ce cours, la cration d'une
nouvelle classe indpendante et isole n'a pratiquement aucun intrt en
Programmation Oriente Objet. Afin de rendre homogne le comportement des
instances d'une nouvelle classe il est important de l'insrer dans une bibliothque de
classe existante. Cette bibliothque est fournie sous la forme d'une hirarchie de
classes construite partir d'une classe racine.
En [Link], il est impossible de crer une classe isole. En effet, lorsqu'on cre une
nouvelle classe sans mentionner de classe de base, c'est la classe Object , la classe
racine de toutes les classes C#, qui est utilise.
Object
NewClass

NewClass est une nouvelle classe insre dans la hirarchie de classes construite
partir de Object.
Le Framework .NET propose une hirarchie de classes normalises prtes l'emploi,
ou driver.

20/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

4.2.6

Support de formation

Insertion d'une nouvelle classe partir de Object


La drivation d'une classe par rapport une classe prdfinie doit obir un certain
nombre de rgles dfinies dans la documentation de la classe de base driver. L'une
de ces contraintes est la surcharge OBLIGATOIRE de certaines mthodes de la classe
de base avec la mme signature. Pour driver la classe Object, cas le plus courant,
cela se rsume ne rcrire que quelques mthodes :
Mthode Finalize
Il s'agit du destructeur dont on dj dcrit le rle dans le chapitre prcdent.
Mthode ToString
Cette mthode doit crer une chane de caractres (instance de la classe String) qui
reprsente les proprits des instances de la classe. Par exemple, pour la classe
Fraction, la chane de caractres reprsentant une fraction pourrait tre
"nnnn/dddd" o nnnn et dddd correspondraient respectivement aux chiffres
composant le numrateur et le dnominateur de la fraction.
Public Overrides Function ToString() As String
return numerateur + "/" + denominateur;
End Function

La mthode ToString est appele lorsqu'une conversion implicite d'un objet en


chane de caractres est ncessaire comme c'est le cas pour la fonction WriteLine
de l'objet Console, par exemple :
[Link]("fraction = " + fr);

Mthode Equals
Cette mthode doit rpondre VRAI si deux instances sont rigoureusement gales.
Deux conditions sont vrifier :

Il faut que les deux objets soient de la mme classe. Le paramtre de la mthode
Equals tant de type Object, notre instance peut donc tre compare une
instance d'une classe quelconque drive de Object.

Il faut qu'une rgle d'galit soit applique : par exemple deux objets client
sont gaux si leurs numros sont gaux .; pour la classe Fraction, on peut dire
que deux fractions sont gales si le produit des extrmes est gal au produit des
moyens. Ce qui peut s'crire :

Public Overloads Function Equals(ByVal fr As Fraction) As Boolean


Dim c1 As Long
Dim c2 As Long
21/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

c1 = [Link] * ([Link])
c2 = [Link] * ([Link])
If c1 = c2 Then
Return True
Else
Return False
End If
End Function
Le mot cl Overloads est utilis ici car la liste d'arguments est diuffrentye de la liste
d'origine . En effet, le paramtre pass est de la classe Fraction et non de la classe
Object.

4.2.7

Constructeur et hritage
Chaque constructeur d'une classe drive doit obligatoirement appeler le constructeur
quivalent de la classe de base.
Si BaseClass est une classe de base appartenant la hirarchie de classe construite
partir de Object, si NewClass est une classe drive de BaseClass, cela se
fait de la faon suivante en utilisant le mot-cl MyBase :
Exemples sur la classe Grossiste dont la classe de base est Client :
Constructeur par dfaut
' constructeur par dfaut
Public Sub New()
[Link]() ' appel constructeur par dfaut de la classe de base
End Sub
Constructeur d'initialisation
' constructeur d'initialisation le CA est augment par la mthode AugmenterCA
Public Sub New(ByVal numero As Integer, ByVal nom As String, ByVal txRemise
As Double)
[Link](numero, nom)
[Link] = txRemise
End Sub
L'appel de Mybase(valeurs ) initialise la partie de l'objet cr avec Client en utilisant
le constructeur d'initialisation de celle-ci . Puis on complte l'objet en initialisant les
attributs spcifiques la classe Grossiste.

22/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

4.2.8

Support de formation

Appel aux mthodes de la classe de base


Lors de la surcharge d'une mthode de la classe de base dans une classe drive, il
peut tre utile de reprendre les fonctionnalits standard pour y ajouter les nouvelles
fonctionnalits. Pour ne pas avoir rcrire le code de la classe de base (dont on ne
dispose pas forcment), il est plus simple de faire appel la mthode de la classe de
base. Pour cela on utilise le mot-cl MyBase avec une syntaxe diffrente celle
utilise pour le constructeur :
' mthode bidon pour tester l'appel partir de la sous-classe Grossiste
Public Overridable Function Bidon() As String
Return "AAAAA"
End Function
' appel mthode de la classe de base Client
Public Overrides Function Bidon() As String
Return [Link] + "BBB"
End Function

4.3 TRAVAIL RALISER


Pour ce travail, raliser partir de ce qui a t produit au T.P. N 3, on
procdera en deux temps :

Ajouter la classe Salarie les mthodes Equals et ToString. La


rgle d'galit pour la classe Salarie peut s'noncer de la faon suivante :
deux salaris sont gaux s'ils ont le mme numro de matricule et le mme
nom. ToString doit renvoyer toutes les proprits spares par des
virgules.
Crer une classe Commercial en drivant la classe Salarie. Cette classe
aura 2 proprits supplmentaires pour calculer la commission :
chiffre d'affaire
chiffreAffaire
Double
commission en % commission
Integer
Crer les deux constructeurs standards de la classe
Commercial. Ne pas oublier d'appeler les constructeurs
quivalents de la classe de base.

Crer les mthodes d'accs aux proprits supplmentaires.


Surcharger la mthode CalculerSalaire pour calculer le
salaire rel (fixe + commission).

Surcharger les autres mthodes de la classe de base pour


lesquelles on jugera ncessaire de faire ainsi.
Tester les classes Salarie et Commercial

23/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

T.P. N5 LES COLLECTIONS


5.1 OBJECTIFS
Tableaux statiques

ArrayList
Dictionnaire Hashtable
Dictionnaire tri SortedList

5.2
5.2.1

CE QU'IL FAUT SAVOIR


Les tableaux statiques
Les tableaux contiennent des lments, chacun d'eux tant repr par son indice. En
[Link] il existe une manire trs simple de crer des tableaux "classiques" sans faire
rfrence aux classes collections :
Dim aTab(20) As Integer
Dim i As Integer
For i = 0 To 19
aTab(i) = i + 1900
Next
Dim aStr(5) As String
aStr(0) = "Andr"
aStr(1) = "Mohamed"
aStr(2) = "Marc"
aStr(3) = "Abdelali"
aStr(4) = "Paul"
Dim aSal(5) As Salarie
aSal(0) = New Salarie(16, 1, 10, "CAUJOL", 10900.0)
aSal(1) = New Salarie(5, 1, 10, "DUMOULIN", 15600.0)
aSal(2) = New Salarie(29, 3, 20, "AMBERT", 5800.0)
aSal(3) = New Salarie(20, 2, 20, "CITEAUX", 8000.0)
aSal(4) = New Salarie(34, 2, 30, "CHARTIER", 7800.0)
Le problme de ce type de tableaux rside en deux points :

Tous les lments du tableau doivent tre de mme type.


Le nombre d'lments que peut contenir un tableau est limit au moment de la
dclaration. Cela sous-entend que le programmeur connat, au moment de l'criture
du programme, le nombre maximum d'lments que doit contenir le tableau.
Itration dans le tableau
For i = 0 To 4
[Link]("nom : " + aStr(i))
Next

24/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

5.2.2

Support de formation

Classe ArraysList
C'est un tableau dynamique auquel on peut rajouter ou insrer des lments, en
supprimer.
Il faut utiliser le namespace [Link] :

Imports [Link]
Dim al as ArrayList = new ArrayList()
[Link](1)
[Link](45)
[Link](87)
[Link](1)
etc etc
Quelques mthodes de la classe ArrayList
Mthodes ou proprits
Capacity
Count
Add(object)
Remove(object)
RemoveAt(int)
Insert(int, object)
Clear()
Contains(object)
al[index]

But
Dtermine le nombre d'lments que le
tableau peut contenir
Donne le nombre d'lments actuelleent
dans le tableau
Ajoute un lment au tableau
Enlve un lment du tableau
Enlve un lment l'indice fourni
Insre un lment l'indice fourni
Vide le tableau
Renvoie un boolen vrai si l'objet fourni
est prsent dans le tableau
Fournit l'objet situ la valeur de index

Explorer le tableau ( al contient


Dim al As ArrayList = New ArrayList
Dim objsal As new Salarie()
[Link](sal)
'etc etc
For Each objsal In al
[Link](objsal)
Next
Accs un lment du tableau ( ici le deuxime )
sal = al(1)

25/30
/

Support de Formation

5.2.3

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

SortedList
SortedList est un dictionnaire qui garantit que les cls sont ranges de faon
ascendante.
Exemple :
static void Main()
{
SortedList sl = new SortedList();
[Link](32, "Java");
[Link](21, "C#");
[Link](7, "[Link]");
[Link](49, "C++");
[Link]("Les lments tris sont...");
[Link]("\t Cl \t\t Valeur");
[Link]("\t === \t\t =====");
for(int i=0; i<[Link]; i++)
{
[Link]("\t {0} \t\t {1}", [Link](i), [Link](i));
}
}
Mthodes ou proprits
Keys
Values
Count
Add(object key, object value)
Remove(object key)
RemoveAt(int)
Clear()
ContainsKey(object key)
ContainsValue(object value)
GetKey(int index )
GetByIndex( int index)
IndexOfKey( object key)
IndexOfValue( object value)

But
Collection des cls de la liste trie
Collection des valeurs ( objets ) de la liste
Donne le nombre d'lments actuelleent
dans la liste
Ajoute un lment la liste ( paire clvaleur )
Enlve un lment e la liste dont la valeur
correspond la cl
Enlve un lment l'indice fourni
Vide la liste
Renvoie un boolen vrai si la cl fournie
est prsent dans la liste
Renvoie un boolen vrai si la valeur
fournie est prsent dans la liste
Renvoie la cl correspondant l'indice
spcifi
Renvoie la valeur correspondant l'indice
spcifi
Renvoie l'indice correspondant une cl
Renvoie l'indice correspondant une
valeur

26/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

Support de formation

5.3 TRAVAIL RALISER

Tester quelques mthodes sur les diffrentes collections : ArrayList,


SortedList

A partir de la classe Salarie implmente dans les T.P. prcdents, dans la


fonction Main de l'application,
Crer une instance d'une collection SortedList dans laquelle on va ranger des
instances de la classe Salarie repres par leur numro de matricule.
Crer au moins cinq instances de la classe Salarie et les insrer dans la
collection.
Faire l'itration de la collection pour afficher son contenu par ordre croissant
des numros de matricules.
Chercher un salari dans la collection en fournissant son matricule

27/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

T.P. N 6 - POLYMORPHISME
6.1 OBJECTIFS
6.2
Polymorphisme

Fonctions virtuelles
Classes gnriques
6.2 CE QU'IL FAUT SAVOIR
6.2.1

Polymorphisme
Considrons l'exemple suivant.
Dim c1 As Salarie = New Commercial
Salaire = [Link]()

La variable sal est dclare de type Salarie, mais elle est instancie partir de la
classe Commercial. Une telle affectation est correcte et ne gnre pas d'erreur de
compilation. La question que l'on doit se poser maintenant est la suivante : lors de
l'envoi du message calculSalaire sal, quelle est la mthode qui va tre
excute ? La mthode CalculerSalaire de la classe Salarie qui calcul le
salaire uniquement partir du salaire de base, ou la mthode CalculerSalaire
de la classe Commercial qui prend en compte les proprits commission et chiffre
d'affaire de la classe Commercial ?
Un simple test va permettre de mettre en vidence que c'est bien la mthode
CalculerSalaire de la classe Commercial qui est excute. [Link] sait et
se souvient comment les objets ont t instanci pour pouvoir appeler la bonne
mthode.
En Programmation Oriente Objet, c'est ce que l'on appelle le concept de
Polymorphisme. Pour toutes les instances de salari, quelles soient instancies
partir de la classe de base Salarie ou d'une classe drive comme Commercial,
il faut pouvoir calculer le salaire. C'est le comportement polymorphique. Par contre
le calcul ne se fait pas de faon identique pour les salaris commerciaux et les non
commerciaux.

28/ 30

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

6.2.2

Support de formation

Mthodes virtuelles
L'ambigut est leve du fait que la rsolution du lien (entre le programme appelant et
la mthode) ne se fait pas au moment de la compilation, mais pendant l'excution en
fonction de la classe qui a t utilise pour l'instanciation. On parle de mthode
virtuelle. calculSalaire est une mthode virtuelle qui dfini un comportement
polymorphique sur la hirarchie de classe construite sur Salarie.
Pour associer un comportement polymorphique une mthode, il suffit de
"surcharger" la mthode la classe de base, avec exactement la mme signature, c'est-dire le mme nom, le mme type de rsultat, le mme nombre de paramtres, de
mmes types, dans le mme ordre.
La classe racine Object est elle-mme un polymorphisme. Les mthodes
Finalize, ToString et Equals, surcharges dans les T.P. prcdents pour les
classes Salarie et Commercial, sont des fonctions virtuelles qui dfinissent un
comportement polymorphique pour toutes les classes drives de Object.

6.2.3

Classes gnriques
Dans certains cas, lors de l'laboration d'une hirarchie de classe ayant un
comportement polymorphique, il peut tre intressant de mettre en facteur le
comportement commun plusieurs classes, c'est--dire crer une classe gnrique. Il
est probable que le fait de crer une instance de cette classe ne correspond pas une
ralit au niveau conceptuel. C'est le cas de la classe racine Object : Il est absurde
de crer une instance de la classe Object qui, par ailleurs, dfinit le comportement
commun toutes les classes C#. C'est le cas galement de la classe Dictionary qui
dfinit le comportement commun toutes les classes dictionnaire, mais qui ne peut
tre instancie. Une telle classe est dclare abstract :
Public abstract Class Dictionary
' Dfinitions des membres de la classe
End Class

Essayer d'instancier une classe abstract avec l'instruction New va gnrer une
erreur de compilation.
6.3 TRAVAIL RALISER

Modifier la fonction Main dveloppe dans le T.P. prcdent en insrant


quelques instances de la classe Commercial dans la liste trie.

Vrifier le fonctionnement du Polymorphisme li la fonction


CalculerSalaire.

29/30
/

Support de Formation

Apprentissage d'un langage de Programmation Oriente Objet : [Link]

CONCLUSION
Ici se termine la deuxime partie de ce cours. On peut en dduire une mthodologie
de construction d'objets dont la dmarche peut tre rsume dans les tapes cidessous :

Enumrer les donnes membres d'un objet.

Protger les donnes membres et crer les fonctions d'accs ces proprits.

Crer, mme s'ils ne sont pas indispensables, au moins les deux constructeurs
(dfaut, initialisation) et le destructeur si ncessaire.

Enumrer les oprations oprer sur l'objet (Entres/sorties, calcul,


comparaison, conversion, etc.).

Utiliser l'hritage

Utiliser le polymorphisme
Dans un support suivant nous allons apprendre grer les exceptions,
l'agrgation et la composition et utiliser les interfaces .

30/ 30

Vous aimerez peut-être aussi