Vous êtes sur la page 1sur 28

Introduction à POO

Les notions de classe et d’objet

Python et R pour les sciences de données


Chap 4 : POO en Python

Laila AMIR

Masters SDAD & GAA

Année universitaire 2019/2020

Laila AMIR 1 / 28
Introduction à POO
Les notions de classe et d’objet

Plan

1 Introduction à POO

2 Les notions de classe et d’objet


Création d’un objet
Définition des attributs
Définition des méthodes
La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Laila AMIR 2 / 28
Introduction à POO
Les notions de classe et d’objet

Outline

1 Introduction à POO

2 Les notions de classe et d’objet


Création d’un objet
Définition des attributs
Définition des méthodes
La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Laila AMIR 3 / 28
Introduction à POO
Les notions de classe et d’objet

Introduction

La Programmation Orientée Objet :


la POO permet de mieux modéliser la réalité en
concevant des modèles d’objets, les classes ;
ces classes permettent de construire des objets
interactifs entre eux et avec le monde extérieur ;
les objets sont créés indépendamment les uns des autres,
grâce à l’encapsulation, mécanisme qui permet d’
embarquer leurs propriétés ;
les classes permettent d’éviter au maximum l’emploi des
variables globales ;

Laila AMIR 4 / 28
Introduction à POO
Les notions de classe et d’objet

La Programmation Orientée Objet

Enfin les classes offrent un moyen économique et puissant


de construire de nouveaux objets à partir d’objets
préexistants et réutiliser ce qui existe déjà. Cela est rendu
possible grâce aux concepts de dérivation et de
polymorphisme :
La dérivation : est le mécanisme qui permet de construire
une classe « enfant » au départ d’une classe « parente ».
L’enfant ainsi obtenu hérite toutes les propriétés et toute la
fonctionnalité de son ancêtre, auxquelles on peut ajouter ce
que l’on veut.
Le polymorphisme : permet d’attribuer des
comportements différents à des objets dérivant les uns des
autres, ou au même objet ou en fonction d’un certain
contexte.
Laila AMIR 5 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Outline

1 Introduction à POO

2 Les notions de classe et d’objet


Création d’un objet
Définition des attributs
Définition des méthodes
La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Laila AMIR 6 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition d’une classe Point


Voici comment définir une classe appelée ici Point.
Exp 1 Définition d’une classe Point
1 class Point:
2 "Definition d'un point geometrique"

Par convention en Python, le nom identifiant une classe débute


par une majuscule.

Exp 2 Création d’un objet de type Point

1 Point()

Ceci crée un objet de type Point. En POO, on dit que l’on crée
une instance de la classe Point. On utilise le nom de la classe
suivi
Lailade parenthèses. Nous verrons par la suite qu’il peut y avoir 7 / 28
AMIR
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Affectation à une variable de la référence à un objet


Nous pouvons utiliser la classe Point pour créer des objets de ce
type. Créeons par exemple un nouvel objet et mettons la
référence à cet objet dans la variable p :
1 >>> p = Point()

Nous pouvons effectuer quelques manipulations élémentaires


avec notre nouvel objet dont la référence est dans p.
1 >>> print(p)
2 <__main__.Point instance at 0x012CAF30>

Ce message indique que p contient une référence à une


instance de la classe Point, Elle est située dans un
emplacement bien déterminé de la mémoire vive, dont
l’adresse apparaît ici en notation hexadécimale.
Laila AMIR 8 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exp 3 docString
1 >>> print(p.__doc__)
2 Definition d'un point geometrique

On peut noter que les chaînes de documentation


"docString" de divers objets Python sont associées à
l’attribut prédéfini __doc__ :.

Laila AMIR 9 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exemple avec deux objets

Exp 4 Exemple avec deux objets


1 a = Point()
2 b = Point()
3 >>> print(a)
4 <__main__.Point instance at 0x012CADC8>
5 >>> print(b)
6 <__main__.Point instance at 0x012CAF08>

La variable a contient une référence à un objet. De même


b contient une référence à un autre objet de même type.
On fait bien ici la distinction entre classe et objet. Ici nous avons
une seule classe Point, et deux objets de type Point.

Laila AMIR 10 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition des attributs


Exp 5 .Définition des attributs
1 class Point:
2 "Definition d'un point
,→ geometrique"
3
4 p = Point()
5 p.x = 1
6 p.y = 2
7 print("p : x =", p.x, "y =", p.y)

Execution :
p:x=1y=2
p possède deux attributs : x et y. La syntaxe pour accéder à
un attribut : la variable (qui contient la référence à l’objet)
suivi par . puis le nom de l’attribut.
Laila AMIR 11 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exemple
1 class Point:
2 "Definition d'un point geometrique"
3 a = Point()
4 a.x = 1
5 a.y = 2
6 b = Point()
7 b.x = 3
8 b.y = 4
9 print("a : x =", a.x, "y =", a.y)
10 print("b : x =", b.x, "y =", b.y)

Execution :
a:x=1y=2
b:x=3y=4
On a 2 objets de type Point. Les attributs prennent des valeurs
qui sont propres à l’instance.
Laila AMIR 12 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition des méthodes

Exp 6 définition de la méthode deplace()


1 class Point:
2 def deplace(self, dx, dy):
3 self.x = self.x + dx
4 self.y = self.y + dy

Cette classe possède une méthode : deplace().


Pour définir une méthode, il faut :
indiquer son nom (ici deplace()).
indiquer les arguments entre des parenthèses. Le premier
argument d’une méthode doit être self.

Laila AMIR 13 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition des méthodes


Pour accéder (appeler) aux méthodes d’un objet, on indique :
le nom de la variable qui fait référence à cet objet
un point
le nom de la méthode
1 a.deplace(3, 5)

Avertissement
Lors de l’appel de la méthode, le paramètre self n’est pas utilisé
et la valeur qu’il prend est la référence à l’objet. Il y a donc
toujours un paramètre de moins que lors de la
définition de la méthode.

Laila AMIR 14 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exemple complet

1 class Point:
2 def deplace(self, dx, dy):
3 self.x = self.x + dx
4 self.y = self.y + dy
5
6 a = Point()
7 a.x = 1
8 a.y = 2
9 print("a : x =", a.x, "y =", a.y)
10 a.deplace(3, 5)
11 print("a : x =", a.x, "y =", a.y)

Execution :
a:x=1y=2
a:x=4y=7
Laila AMIR 15 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

La notion de constructeur

Nous pouvons utiliser un constructeur pour créer et


initialiser un objet ;
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__(). Cette méthode sera
appelée lors de la création de l’objet.
Le constructeur peut disposer d’un nombre quelconque
de paramètres, éventuellement aucun.

Laila AMIR 16 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Constructeur sans paramètre


Exp 7 avec valeurs par défaut
1 class Point:
2 def __init__(self):
3 self.x = 0
4 self.y = 0
5
6 a = Point()
7 print("a : x =", a.x, "y =", a.y)
8 a.x = 1
9 a.y = 2
10 print("a : x =", a.x, "y =", a.y)

Execution :
a : x = 0 y = 0 ⇐( valeurs par défaut)
a:x=1y=2

Laila AMIR 17 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Constructeur avec paramètres


1 class Point:
2 def __init__(self, x, y):
3 self.x = x
4 self.y = y
5
6 a = Point(1, 2)
7 print("a : x =", a.x, "y =", a.y)

Execution :
a:x=1y=2
Ici, on utilise les mêmes noms pour les paramètres du
constructeur et les attributs. Ceci est possible car ces variables
ne sont pas dans le même espace de noms. Les paramètres sont
des variables locales. Les attributs sont dans l’espace de noms
de l’instance. Les attributs se distinguent par self devant.
Laila AMIR 18 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exemple complet
1 class Point:
2 def __init__(self, x, y):
3 self.x = x
4 self.y = y
5 def deplace(self, dx, dy):
6 self.x = self.x + dx Execution :
7 self.y = self.y + dy a:x=1 y = 2
8
9 a = Point(1, 2)
b:x=3 y = 4
10 b = Point(3, 4) a:x=4 y = 7
11 print("a : x =", a.x, "y =", a.y) b:x=2 y = 2
12 print("b : x =", b.x, "y =", b.y)
13 a.deplace(3, 5)
14 b.deplace(-1, -2)
15 print("a : x =", a.x, "y =", a.y)
16 print("b : x =", b.x, "y =", b.y)

Laila AMIR 19 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

La notion d’encapsulation

Le concept d”encapsulation est un concept très utile de la


POO. Il permet en particulier d’éviter une
modification par erreur des données d’un objet.

En effet, il n’est alors pas possible d’agir directement


sur les données d’un objet ;

il est nécessaire de passer par ses méthodes qui jouent le


rôle d’interface.

Laila AMIR 20 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition d’attributs privés

On réalise la protection des attributs de notre classe Point grâce


à l’utilisation d’ attributs privées. Pour avoir des attributs
privés, leur nom doit débuter par __.

Exp 8 Attributs privés


1 class Point:
2 def __init__(self, x, y):
3 self.__x = x
4 self.__y = y

Il n’est alors plus possible de faire appel aux attributs


__x et __y depuis l’extérieur de la classe Point.

Laila AMIR 21 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Définition d’attributs privés

Exp 9 Accès aux attributs privés depuis l’extérieur


1 >>> p = Point(1, 2)
2 >>> p.__x
3 Traceback (most recent call last):
4 File "<pyshell#9>", line 1, in
5 p.__x
6 AttributeError: Point instance has no attribute
,→ '__x'

Laila AMIR 22 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Accès par des méthodes


Il faut disposer de méthodes qui vont permettre de modifier ou
d’afficher les valeurs ces variables.
1 class Point:
2 def __init__(self, x, y):
3 self.__x = x
4 self.__y = y
5 def deplace(self, dx, dy):
6 self.__x = self.__x + dx
7 self.__y = self.__y + dy
8 def affiche(self):
9 print("abscisse =", self.__x, "ordonnee =", self.__y)
10 a = Point(2, 4)
11 a.affiche() # abscisse = 2 ordonnee = 4
12 a.deplace(1, 3)
13 a.affiche() # abscisse = 3 ordonnee = 7

Laila AMIR 23 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Accesseurs et mutateurs

Les accesseurs sont des méthodes qui fournissent des


informations relatives à l’état d’un objet, c’est-à-dire aux
valeurs de certains de ses attributs (généralement privés)
sans les modifier ;
Les mutateurs sont des méthodes qui modifient l’état d’un
objet, donc les valeurs de certains de ses attributs.
On rencontre souvent l’utilisation de noms de la forme
get_XXXX() pour les accesseurs et set_XXXX() pour les
mutateurs.
Par exemple, pour la classe Point sur laquelle nous avons déjà
travaillé on peut définir les méthodes suivantes :

Laila AMIR 24 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Exemple : les assesceurs


1 class Point:
2 def __init__(self, x, y):
3 self.__x = x
4 self.__y = y
5 def get_x(self):
6 return self.__x
7 def get_y(self):
8 return self.__y
Execution :
9 def set_x(self, x): a : abscisse = 3
10 self.__x = x a : ordonnee = 7
11 def set_y(self, y): a : abscisse = 6
12 self.__y = y
13 a = Point(3, 7)
14 print("a : abscisse =", a.get_x())
15 print("a : ordonnee =", a.get_y())
16 a.set_x(6)
17 print("a : abscisse =", a.get_x())
Laila AMIR 25 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Attributs de classe

1 class A:
2 nb = 0
3 def __init__(self, x): Execution :
4 print("creation objet")
5 self.x = x
A : nb = 0
6 A.nb = A.nb + 1 Partie 1
7 print("A : nb = ", A.nb) creation objet
8 print("Partie 1") A : nb = 1
9 a = A(3)
a : x = 3 nb = 1
10 print("A : nb = ", A.nb)
11 print("a : x = ", a.x, " nb = ", a.nb)

Laila AMIR 26 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Attributs de classe

Execution :
1 print("Partie 2") Partie 2
2 b = A(6) creation objet
3 print("A : nb = ", A.nb) A : nb = 2
4 print("a : x = ", a.x, " nb = ", a.nb)
5 print("b : x = ", b.x, " nb = ", b.nb)
a : x = 3 nb = 2
6 c = A(8) b : x = 6 nb = 2
7 print("Partie 3") creation objet
8 print("A : nb = ", A.nb) Partie 3
9 print("a : x = ", a.x, " nb = ", a.nb)
A : nb = 3
10 print("b : x = ", b.x, " nb = ", b.nb)
11 print("c : x = ", c.x, " nb = ", c.nb) a : x = 3 nb = 3
b : x = 6 nb = 3
c : x = 8 nb = 3

Laila AMIR 27 / 28
Création d’un objet
Définition des attributs
Introduction à POO Définition des méthodes
Les notions de classe et d’objet La notion de constructeur
La notion d’encapsulation
Attributs et méthodes de classe

Méthodes de classe
1 class A:
2 nb = 0
3 def __init__(self):
4 print("creation objet") Execution :
5 A.nb = A.nb + 1 Part1 : nb objets = 0
6 print("il y en a ", A.nb) creation objet
7 @classmethod il y en a 1
8 def get_nb(cls): Part2 : nb objets = 1
9 return A.nb creation objet
10 print("Part1 : nb objets = ", A.get_nb()) il y en a 2
11 a = A() Part3 : nb objets = 2
12 print("Part2 : nb objets = ", A.get_nb())
13 b = A()
14 print("Part3 : nb objets = ", A.get_nb())

La méthode de classe est précédée par : @classmethod


Le premier argument de la méthode de classe doit être cls.
Laila AMIR 28 / 28

Vous aimerez peut-être aussi