Vous êtes sur la page 1sur 71

SCIENCES DES DONNÉES APPLIQUÉES (fONDAMENTALES)

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

- Surcharge des opérateurs

- Héritage

- Polymorphisme

2
É volu*on de la programma*on :

Programma'on séquen'elle :

Les instruc*ons sont exécutées de façon linéaire.


Les données sont globales et aucune réu*lisa*on du
code n’est réalisée.

Programma'on procédurale :

Il s’agit de découper un programme en une série de


fonc*ons. chaque fonc*on a pour but de réaliser un
traitement par*culier.
On procède à un découpage du traitement mais les
données restent globales.

3
É volu;on de la programma;on :

Programma'on orientée objet :

Il s’agit de regrouper l’ensemble des données et les traitements


qui s’appliquent à ces données. On procède à un découpage
naturel des données et du traitement des données.

Exemple :

Application chargée de la paye des employés d’une entreprise.

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 :

• Une classe est équivalente à un nouveau type de données.

• On connaît déjà par exemple les classes list ou str et les nombreuses
méthodes perme=ant de les manipuler, par exemple :

• Un objet ou une instance est un exemplaire par@culier d’une classe.

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 :

• un objet de la classe complex possède :

Ø deux a5ributs : imag et real;


Ø plusieurs méthodes, comme conjugate(), abs()...

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.

Par exemple, pour objets de type list

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.

La classe Vecteur permet de représenter un


vecteur dans le plan, composé de deux
coordonnées x et y. Elle propose une méthode
longueur permeCant de calculer la norme du
vecteur, qui vaut

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 :

• Les classes sont créées par mot-clé class.


• Les a0ributs sont les variables qui appar6ennent à la classe.
• Les a0ributs sont toujours publiques et sont accessibles à l’aide de
l’opérateur point (.)

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

class Point: class Point:


def __init__(self, , ): def __init__(self,x ,y ):
self.x = self.x = x
self.y = self.y = y
a = Point(1, 2) a = Point(1, 2)
print ("a : x =", a.x, "y =", a.y) print ("a : x =", a.x, "y =", a.y)

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

• Une méthode est un groupe de code des'né à effectuer une tâche


par'culière.

• Une méthode s’écrit comme une fonc'on du corps de la classe avec un


premier paramètre self obligatoire, où self représente l’objet sur lequel la
méthode sera appliquée. Autrement dit self est la référence d’instance.

• '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 :

• Un a1ribut est représenté par une variable par7culière, appelée variable


d'instance, accessible à l'aide du paramètre self.
• L'idée est que le constructeur ini7alise ces variables d'instances, qui seront
alors stockées dans l'objet et en mémoire pour toute la durée de vie de
l'objet
• La classe Vecteur: x et y sont des variables d'instances

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.

Souvent u;lisés pour les « constantes » du type.

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 :

Tout comme il est possible de déclarer des a5ributs de classe, il est


également possible de déclarer des méthodes de classe. Pour cela,
on u;lise le décorateur @classmethod. Comme une méthode de
classe appar;ent à une classe, le premier paramètre correspond à la
classe. Par conven;on, on appelle ce paramètre CLS pour préciser
qu’il s’agit de la classe et pour le dis;nguer de self.

26
E xe mple :

27
Nom de classe et nom d’a. ributs: Conve n6ons

Quelques conven6ons.

• Nom des classes : en « CamelCase »


Exemple : Vecteur, PlanCartesien , Matrice
• Nomdesobjet:en minuscule(avec 6rets bas)
vec = Vecteur(1, 2)
plan_cartesien = PlanCartesien()
main_win = MainWindow()

28
SURCH ARGE DES OPÉ RAT E URS

• La surcharge d’opérateurs vous permet de redéfinir la significaDon


d’opérateur en foncDon de votre classe.
• La surcharge d’opérateurs nous a permis d’uDliser l’opérateur + pour faire
l’addiDon de deux objets numériques, ainsi que pour concaténer deux
objets chaîne. C’est un seul opérateur, mais qui agit différemment selon le
type d’objet sur lequel il est appelé

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 :

• Ce comportement par défaut n'est pas


forcément des plus u8les. Ce qui serait
plus intéressant serait de pouvoir
obtenir une représenta)on de l'objet
sous forme d'une chaine de caractères.
• En Python, il suffit d'ajouter une
méthode nommée __str__ sans
paramètre (à part l'obligatoire self
puisque c'est une méthode) qui renvoie
une chaine de caractères.

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.

L e s trois nive aux de visibilité s


Ils définissent les droits d'accès aux données selon que l'on y accède par une méthode de la classe elle-même, d'une classe
héri+ère, ou bien d'une classe quelconque. Il existe trois niveaux de visibilité:

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

La classe matrice : version 1

41
L’e ncapsula+on
La classe matrice : version 2

Grâce à l’encapsula+on, on peut con+nuer à u+liser la classe exactement de la même manière


L'encapsula+on consiste à cacher les détails d'implémenta+on d'une classe, et ne pas les dévoiler en dehors de ce=e
dernière. Le code qui u+lise une classe doit être le plus indépendant possible de la manière avec laquelle la classe est
implémentée.

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)

e = Etudiant("Genie INFO", "RADI", "Mohamed")


assert e.nom == "RADI"
Exercice Classe Compte bancaire
1. Créer une classe Python nommée CompteBancaire qui représente un compte
bancaire, ayant pour a;ributs numeroCompte (type numérique) , nom (nom du
propriétaire du compte du type chaîne), solde.
2. Créer un constructeur ayant comme paramètres numeroCompte, nom, solde.
3. Creer une méthode Versement() qui gère les versements
4. Creer une methode Retrait() qui gère les retraits
5. Creer une methode Agios() perme;ant d'appliquer les agios à un pourcentage de 5 %
du solde
6. Creer une methode afficher() perme;ant d’afficher les détails sur le compte
7. Donner le code complet de la classe CompteBancaire

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 Retrait(self, Somme):


if (Somme > self.solde):
print("Solde insuffisant I")
else:
self.solde = self.solde - Somme

def Agios(self):
self.solde = self.solde * 95 / 100

newCompte = CompteBancaire(121665447,"Robert Adame",2500)


print("Le numero de compte est :", newCompte.numeroCompte)
print("Nom du proprietaire : ", newCompte.nomPrenom)
print("Solde sauf erreur ou omission :", newCompte.solde)

48
6. Exercices :

Ex1. Ecrire un script qui recherche le plus grand de trois nombres.


Ex2. Ecrire un script qui recherche le plus grande nombre d’une liste composée de 4 éléments.
Ex3. Ecrire un script qui crée une liste de n éléments.
Ex4. Ecrire un script qui recherche le plus grande nombre d’une liste composée, et qui renvoie le résultat.
Ex5. Ecrire un script qui permet la conversion de la température du degré °C à °F et inversement en insérant la valeur
souhaitée et d’une manière infinie jusqu’à ce que l’on sorte du programme.
Ex6. Combiner dans un seul script les exercices 4 et 5 par une opCon de choix.
Ex7. Créer un script pour une calculatrice qui fait les opéraCons suivantes : Addi4on, Soustrac4on, Mul4plica4on,
Division, Sinus

49
Solu%ons :
Ex1.
• Script :

# U$lisa$on d'une liste et de branchements condi$onnels


print("Ce script recherche le plus grand de trois nombres")
print("Veuillez entrer trois nombres separes par des virgules : ")
ch =input()
# Note : l'associa$on des fonc$ons eval() et list() permet de conver$r
# en liste touter rthine de valeurs separees par des virgules :29
nn = list(eval(ch))
max, index = nn[0], 'premier'
if nn[1] > max: # ne pas omeKre le double point !
max = nn[1]
index = 'second'
if nn[2]> max:
max = nn[2]
index = "troisieme"
print("Le plus grand de ces nombres est", max)
print("Ce nombre est le", index, "de votre liste.")

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

Vous aimerez peut-être aussi