Sciences Des Données Appliquées (Fondamentales) : Cours 5
Sciences Des Données Appliquées (Fondamentales) : Cours 5
Sciences Des Données Appliquées (Fondamentales) : Cours 5
Cours 5
• Année : 2022/2023
Responsable Module Mr. Khalid El Fayq • Session : 8 – Hiver 2022
ère • Volume horaire 64
Niveau 4 Année
• Crédits : 4
Filière Génie informatique
1
La programma)on Orienté Objet (POO) en
Python
- Introduc)on à la POO
- Constructeur
- AAributs et méthodes
- Héritage
- Polymorphisme
2
É volu*on de la programma*on :
Programma'on séquen'elle :
Programma'on procédurale :
3
É volu;on de la programma;on :
Exemple :
une class « Employe » :Contient toutes les données qui caractérisent un employé et les méthodes qui
manipulent ces données,
4
POO e n P y thon :
• On connaît déjà par exemple les classes list ou str et les nombreuses
méthodes perme=ant de les manipuler, par exemple :
5
POO e n P y thon :
6
L e s a5 ributs et le s mé th od e s :
• On peut définir un objet comme une capsule contenant des a5ributs et des méthodes :
objet = a)ributs + méthodes
Exemple :
7
L e s a: ributs et le s mé th od e s :
Les objets regroupent des données (a)ributs) et des traitements (méthodes) logiquement
liées.
8
le s Classe s :
Paradigme OO : définir un nouveau type Vecteur pour grouper les données d'un vecteur et
les fonc9on qui agissent dessus.
9
le s Classe s :
Paradigme OO : définir un nouveau type Vecteur pour grouper les données d'un vecteur et
les fonc9on qui agissent dessus.
10
Syntaxe de dé clara6on :
L’instancia+on
• Les classes sont des fabriques d’objets : on construit d’abord l’usine avant de
produire des objets!
• On instancie un objet (c’est-à-dire qu’on le produit à par6r de l’usine) en
appelant le nom de sa classe comme s’il s’agissait d’une fonc6on
11
C las s e s , objet s , a,ribut s :
Une classe définit des a,ributs et des méthodes. Par exemple, imaginons une classe Voiture qui
servira à créer des objets qui sont des voitures. Ce=e classe va pouvoir définir un a=ribut couleur, un
a=ribut vitesse, etc. Ces a=ributs correspondent à des propriétés qui peuvent exister pour une
voiture. La classe Voiture pourra également définir une méthode rouler(). Une méthode
correspond en quelque sorte à une ac@on, ici l’ac@on de rouler peut être réalisée pour une voiture.
12
La no7on de constructeur
Si lors de la créa,on d’un objet nous voulons qu’un certain nombre d’ac,ons soit réalisées (par exemple une
ini,alisa,on), nous pouvons u,liser un constructeur.
Un constructeur n’est rien d’autre qu’une méthode, sans valeur de retour, qui porte un nom imposé par le
langage Python : __init__(). Ce nom est cons,tué de init entouré avant et après par __ (deux fois le
symbole underscore _, qui est le ,ret sur la touche 8). CeDe méthode sera appelée lors de la créa,on de l’objet.
Le constructeur peut disposer d’un nombre quelconque de paramètres, éventuellement aucun.
Exemple sans paramètre
class Point:
def __init__(self):
self.x = 0
self.y = 0
a = Point()
print("a : x =", a.x, "y =", a.y)
a.x = 1
a.y = 2
print("a : x =", a.x, "y =", a.y)
13
Exemple avec paramètres
14
E xe mple : dé clara.on de s a2ributs et instancia.on
class Vecteur:
""" Classe pour gerer les verteurs"""
def __init__(self, a = 0, b=0):
self.x=a
self.y=b
def affichage(self):
print("("+str(self.x)+","+str(self.y)+")")
v1 = Vecteur()
v2 = Vecteur(5,4)
v1.affichage()
v2.affichage()
help(Vecteur)
15
E xe mple
16
Dé clara'on de s mé th od e s
• 'self’ est l’équivalent du mot-clé 'this' u'lisé pour l’objet en cours dans les
autres langages OO.
• Le mot clé 'def' est u'lisé pour créer une nouvelle méthode.
17
E xe mple : dé clara.on de s a2ributs et instancia.on
18
Variab le d 'in stan ce :
19
Variab le d e classe = a- rib u ts d e classe :
On peut définir des a-ributs pour les classes aussi (class a&ributes = a$ributs de classe), par affecta;on.
20
Variab le d e classe = a- rib u ts d e classe :
21
hié rarchie de s e space s de noms :
• Chaque classe possède son propre espace de noms. Les variables qui en
font par;e sont appelés variables de classe ou a<ributs de classe.
• Chaque objet instance (crée à par;r d’une classe) ob;ent son propre espace
de noms. Les variables qui en font par;e sont appelées variables d’instance
ou a,ributs d’instance.
• Les classes peuvent u;liser (mais pas modifier) les variables définies au
niveau principal.
22
E xe mple 1:
23
E xe mple 2:
24
E xe mple 3:
25
Mé th od e s de classe :
26
E xe mple :
27
Nom de classe et nom d’a. ributs: Conve n6ons
Quelques conven6ons.
28
SURCH ARGE DES OPÉ RAT E URS
29
Problè me
30
Solu %on
§La surcharge de l'opérateur est obtenue en définissant une méthode spéciale dans la défini%on de classe. Les noms de
ces méthodes commencent et finissent par un double soulignement (__).
Opé rate ur +
§Pour surcharger l'opérateur +, nous devrons implémenter la fonc%on __add __ () dans la classe
31
E xe mple :
32
E xe mple 2 :
33
Mé th od e s spé ciale s :
34
Su rch arge d e s opé rate urs de comparaison :
35
Su rch arge d e la mé th od e print :
36
Re marque E xe mple :
37
L’e ncapsula+on :
§L'encapsula+on est un mécanisme consistant à rassembler les données et les méthodes au sein d'une structure en cachant
l'implémenta+on de l'objet, c'est-à-dire en empêchant l'accès aux données par un autre moyen que les services proposés.
L'encapsula+on permet donc de garan+r l'intégrité des données contenues dans l'objet.
§L’un des grands intérêts des classes est qu’elles permeFent l’encapsula+on du code, c’est-à-dire le fait d’enfermer le code
dans une “capsule”, dans un espace en dehors de l’espace global. Cela permet d’éviter d’u+liser des variables globales et de
polluer l’espace global du script.
§publique: les fonc+ons de toutes les classes peuvent accéder aux données ou aux méthodes d'une classe définie avec le
niveau de visibilité public. Il s'agit du plus bas niveau de protec+on des données
§protégée: l'accès aux données est réservé aux fonc+ons des classes héri+ères, c'est- à-dire par les fonc+ons membres de la
classe ainsi que des classes dérivées
§privée: l'accès aux données est limité aux méthodes de la classe elle-même. Il s'agit du niveau de protec+on des données
le plus élevé.
38
L e s a& ributs privé s e n P y thon ? :
• Il n'y a pas d'a&ributs privés en Python, tout est toujours accessible.
• Une conven?on est de préfixer avec un ou 2 ?rets bas les a&ributs qu'on veut protéger. Mais c'est juste une « sugges?on »
aux programmeurs.
• les conven?ons sont les suivantes :
ü On préfixera les noms des membres qu’on souhaite définir comme “privés” avec deux underscores comme ceci : __nom-
du-membre ;
ü On préfixera les noms des membres qu’on souhaite définir comme “protégés” avec un underscore comme ceci : _nom-du-
membre.
39
Mais il y a un moye n d’y accé de r ! ! !
40
L’e ncapsula+on
• L’idée de la no+on d’encapsula+on consiste à ce que :
ü une classe définit son interface, c’est-à-dire les méthodes par lesquelles on peut u+liser ce code,
ü mais reste tout à fait libre de modifier son implémenta+on, et tant que cela n’impacte pas l’interface, aucun changement
n’est requis dans les codes u+lisateurs.
41
L’e ncapsula+on
La classe matrice : version 2
42
L’H É RITAGE E N PY T H ON
• L'héritage est un mécanisme qui nous permet de créer une nouvelle classe ( classe enfant) qui est basée sur une classe
existante (la classe mère), en ajoutant de nouveaux a>ributs et méthodes en plus de la classe existante.
• Lorsque vous procédez ainsi, la classe enfant hérite des a>ributs et méthodes de la classe parent.
• L’héritage permet de construire une hiérarchie de classes. Les classes enfants héritent des champs et méthodes de la
classe mère
Remarque
En Python toutes les classes héritent de la classe object "class mere(object)" et "class mere" sont idenQques.
43
44
H é ritage Mul4ple
• Python supporte l’héritage Mul4ple
• La classe enfant est dérivée de trois classes mere_1, mere_2, mere_3. En conséquence, il héritera des aDributs et des
méthodes des trois classes.
45
class Personne:
def __init__(self, nom, prenom):
self.nom = nom
self.prenom = prenom
def presenter(self):
return self.nom + " " + self.prenom
class Etudiant(Personne):
def __init__(self, niveau, nom, prenom):
Personne.__init__(self, nom, prenom)
self.niveau = niveau
def presenter(self):
return self.niveau + " " + Personne.presenter(self)
47
class CompteBancaire:
def __init__ (self, numeroCompte, nomPrenom, solde):
self.numeroCompte = numeroCompte
self.nomPrenom = nomPrenom
self.solde = solde
def Versement(self, Somme):
self.solde = self.solde+ Somme
def Agios(self):
self.solde = self.solde * 95 / 100
48
6. Exercices :
49
Solu%ons :
Ex1.
• Script :
50
Solu%ons :
Ex2.
• Script :
51
7. Solu(ons :
Ex2.
• Simula(on :
52
7. Solu(ons :
Ex3.
• Script :
53
7. Solu(ons :
Ex3.
• Simula(on :
54
7. Solu(ons :
Ex4.
• Script :
55
7. Solu(ons :
Ex4.
• Simula(on :
56
7. Solu(ons :
Ex5.
• Script :
57
7. Solu(ons :
Ex5.
• Script (suite) :
58
7. Solu(ons :
Ex5.
• Simula(on :
59
7. Solu(ons :
Ex6.
• Script :
60
7. Solu(ons :
Ex6.
• Script (suite) :
61
7. Solu(ons :
Ex6.
• Script (suite) :
62
7. Solu(ons :
Ex6.
• Simula(on :
Fig. 1 Fig. 2
63
7. Solu(ons :
Ex7.
• Script :
64
7. Solu(ons :
Ex7.
• Script :
65
7. Solu(ons :
Ex7.
• Script :
66
7. Solu(ons :
Ex9.
• Simula(on :
67
8. Projets :
Pr4. Développer un script qui con0ent des fonc0ons pour écrire des mots comme le figure
ci-dessous montre :
68
8. Projets:
Pr4.
• Script :
0 1 2 3 4 5 0 1 2 3 4 5
0 # # # # # 0 # #
1 # 1 # # #
2 # 2 # # #
3 # 3 # # #
4 # 4 # # #
5 # # # # # 5 # #
69
8. Projets:
Pr4.
• Script :
70
8. Projets:
Pr4.
• Script :
71