0% ont trouvé ce document utile (0 vote)
4 vues51 pages

Introduction à la POO en Python

La programmation orientée objet (POO) en Python permet de créer des objets représentant des concepts ou entités, avec des attributs et des méthodes pour interagir. Les principes fondamentaux incluent l'héritage, le polymorphisme, l'encapsulation et l'abstraction, qui facilitent la conception et la gestion des structures logicielles. La déclaration de classes, l'instanciation d'objets, et l'utilisation de méthodes et attributs sont des éléments clés pour tirer parti de la POO.

Transféré par

dgpharmacie
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 PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
4 vues51 pages

Introduction à la POO en Python

La programmation orientée objet (POO) en Python permet de créer des objets représentant des concepts ou entités, avec des attributs et des méthodes pour interagir. Les principes fondamentaux incluent l'héritage, le polymorphisme, l'encapsulation et l'abstraction, qui facilitent la conception et la gestion des structures logicielles. La déclaration de classes, l'instanciation d'objets, et l'utilisation de méthodes et attributs sont des éléments clés pour tirer parti de la POO.

Transféré par

dgpharmacie
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 PDF, TXT ou lisez en ligne sur Scribd

Introduction à la programmation orientée

objet
Comment créer ses propres structures en Python ?

Stéphane Guinard
La POO : kézako ?
Qu’est-ce que c’est ?

La programmation orientée objet consiste en la définition et


l’interaction de briques logicielles appelées objets ; un objet
représente un concept, une idée ou toute entité du monde
physique, comme une voiture, une personne ou encore une page
d’un livre. Il possède une structure interne et un comportement, et
il sait interagir avec ses pairs. Il s’agit donc de représenter ces
objets et leurs relations ; l’interaction entre les objets via leurs
relations permet de concevoir et réaliser les fonctionnalités
attendues, de mieux résoudre le ou les problèmes.
Wikipédia

La POO : kézako ? 2
Pour quoi faire ?

Qu’est-ce qu’un rectangle ?

La POO : kézako ? 3
Pour quoi faire ?

Qu’est-ce qu’un rectangle ?


• Objet dans l’espace
• Possède 4 sommets
• Chaque sommet a ses propres
coordonnées X, Y, Z
• Possède 4 côtés
• Côtés sont 2 à 2 égaux
• Côtés perpendiculaires

La POO : kézako ? 3
La POO c’est pas si nouveau

Quand on ajoute des éléments à une liste :


>>> l . append ( " element " )

Quand on compte le nombre d’éléments (e.g. “a”) dans une


chaı̂ne de caractères :
>>> s . count ( a )

Quand on ouvre un fichier :


>>> fichier = open ( " fichier . txt " ," r " )

La POO : kézako ? 4
Principes de la POO

Il y a 4 principes fondamentaux dans la POO :

• Héritage
• Polymorphisme
• Encapsulation
• Abstraction

Ils reposent tous sur la notion de classe.

La POO : kézako ? 5
Notions de classe
Déclaration d’une classe

• Utilisation du mot-clé ‘class‘


class MaClasse ( object ) :
...
...

• Convention :
• 1ère lettre des mots en majuscule
• pas d’espace, tiret, underscore...
• MonNomDeClasse

Notions de classe 6
Instanciation d’un objet

L’objet créé est une instance de classe.


On en crée autant que l’on veut.
>>> mon_objet1 = MaClasse ()
>>> mon_objet2 = MaClasse ()
>>> mon_objet3 = MaClasse ()

>>> print ( mon_objet1 is mon_objet2 )


False

Notions de classe 7
Les méthodes

Une méthode est une fonction définie à l’intérieur d’une classe.


Pour l’utiliser on fait précéder le nom de la méthode du nom
de l’objet.
>>> class MaClasse ( object ) :
def une_methode ( param ) :
print ( " Une m é thode qui fait quelque
chose " )

>>> mon_objet = MaClasse ()


>>> mon_objet . une_methode ()
Une m é thode qui fait quelque chose

Notions de classe 8
Les méthodes

Instance appelant la méthode = 1er paramètre de la méthode


• nommé self par convention
• spécificité de Python
>>> class MaClasse ( object ) :
def une_methode ( self ) :
print ( self )

>>> mon_objet = MaClasse ()


>>> print ( mon_objet )
< __main__ . D es c r iptionDeLObjet object at 0
x059F0190 >
>>> mon_objet . une_methode ()
< __main__ . D es c r iptionDeLObjet object at 0
x059F0190 >

Notions de classe 9
Les attributs

Un attribut est une variable définie à l’intérieur d’une classe. Pour


y accéder :
• on fait précéder le nom de l’attribut du nom de l’instance
• ou de self si on est dans la classe
>>> class MaClasse ( object ) :
def afficher ( self ) :
print ( self . un_attribut )

>>> mon_objet = MaClasse ()


>>> mon_objet . un_attribut = 42
>>> mon_objet . afficher ()
42
>>> un_attribut # n ’ exsite pas en dehors de la
classe
NameError : name ’ un_attribut ’ is not defined
Notions de classe 10
Le constructeur

• C’est une méthode appelée lors de la création d’objets.


• Elle permet d’initialiser les valeurs des attributs.
• Nommé init .

>>> class MaClasse ( object ) :


def __init__ ( self ) :
self . un_attribut = " valeur initiale "
print ( " Objet cr é é . Attributs
initialis é s . " )

>>> mon_objet = MaClasse ()


Objet cr é é . Attributs initialis é s .
>>> mon_objet . un_attribut
" valeur initiale "

Notions de classe 11
Le constructeur

Possibilité de passer des paramètres pour personnaliser les objets.


>>> class MaClasse ( object ) :
def __init__ ( self , valeur ) :
self . un_attribut = valeur

>>> mon_objet = MaClasse ( " valeur personnalis é e " )


>>> mon_objet . un_attribut
" valeur personnalis é e "

Notions de classe 12
Le constructeur

Le constructeur peut aussi avoir des valeurs par défaut.


>>> class MaClasse ( object ) :
def __init__ ( self , valeur = " valeur par d é
faut " ) :
self . un_attribut = valeur

>>> mon_objet1 = MaClasse ()


>>> mon_objet1 . un_attribut
" valeur par d é faut "

>>> mon_objet2 = MaClasse ( " valeur personnalis é e " )


>>> mon_objet2 . un_attribut
" valeur personnalis é e "

Notions de classe 13
Méthodes spéciales

Nous appelerons méthode spéciale une méthode exécutée sans


qu’on ai besoin de l’appeler explicitement.

• init () en est une.


• Leur nom commence et termine par .
• Utile pour personnaliser le comportement d’un objet.

Notions de classe 14
Méthodes spéciales

Nous appelerons méthode spéciale une méthode exécutée sans


qu’on ai besoin de l’appeler explicitement.

• init () en est une.


• Leur nom commence et termine par .
• Utile pour personnaliser le comportement d’un objet.

Remarque
Pour chaque méthode spéciale, Python a un comportement par
défaut. Vous n’avez donc pas besoin de toutes les redéfinir. Il
faut se concentrer sur les méthodes spéciales dont on a besoin
et ou le comportement par défaut de Python ne convient pas.

Notions de classe 14
Méthodes spéciales

>>> class MaClasse ( object ) :


def __init__ ( self , valeur ) :
self . un_attribut = valeur

>>> mon_objet = MaClasse ( " 17 " )


>>> print ( mon_objet )
< __main__ . MaClasse object at 0 x051D5DF0 >

Notions de classe 15
Méthodes spéciales

>>> class MaClasse ( object ) :


def __init__ ( self , valeur ) :
self . un_attribut = valeur
def __str__ ( self ) :
print ( " Instance de MaClasse (
valeur de un_attribut = {}) " .
format ( self . un_attribut )

>>> mon_objet = MaClasse ( " 17 " )


>>> print ( mon_objet )
Instance de MaClasse ( valeur de un_attribut = 17)

Notions de classe 15
Méthodes spéciales

Quelques méthodes spéciales :

• str () : appelée suite à un : print(objet).


• add () : pour pouvoir écrire : objet1 + objet2.
• eq () : permet de comparer deux objets : objet1 ==
objet2.
• ne () : permet de tester si deux objets sont différents :
objet1 != objet2.
• len () : pour pouvoir calculer la longueur d’un objet :
len(objet).
• del () : appelé à la suppression de l’objet

Notions de classe 16
Portée des objets

À quel moment la fonction del () (destructeur ) est-elle


appelée ?

Notions de classe 17
Portée des objets

À quel moment la fonction del () (destructeur ) est-elle


appelée ?

• quand on l’appelle explicitement


• lorsque le contexte local est détruit (par exemple à la fin d’une
fonction)
• à la fin du programme

Notions de classe 17
L’héritage
L’héritage

E=
mc2

L’héritage 18
L’héritage

E=
mc2

L’héritage 18
L’héritage

E=
mc2

L’héritage 18
L’héritage

• Principe permettant de créer une classe à partir d’une autre.


• Nom de la classe mère entre paranthèses lors de la définition.
• Méthodes et attributs de la classe mère transmis à la classe
fille.

class ClasseMere ( object ) :


...
...

class ClasseFille ( ClasseMere ) :


...
...

Remarque : toutes les classes héritent d’une classe object.

L’héritage 19
L’héritage

>>> class ClasseMere ( object ) :


def une_methode ( self ) :
print ( " Je suis dans la classe m è re " )

>>> class ClasseFille ( ClasseMere ) :


pass

>>> ClasseFille () . une_methode ()


Je suis dans la classe m è re

L’héritage 20
L’héritage
Un objet de la classe fille peut appeler une méthode ou un attribut
de la classe mère :
>>> class Canard ( object ) :
def __init__ ( self ) :
self . couleur = " jaune "

>>> class CanardYoda ( Canard ) :


def __init__ ( self , couleur ) :
Canard . __init__ ( self )
self . couleur = couleur # Appelle l ’ attribut
couleur d é fini dans la classe m è re

>>> Canard . couleur


’ jaune ’
>>> CanardYoda ( " vert " ) . couleur
’ vert ’

L’héritage 21
Le polymorphisme
Le polymorphisme

Principe permettant de donner plusieurs définitions à une méthode.


En programmation orientée objet, cela se traduit par :

• la possibilité de redéfinir une méthode d’une classe mère dans


une classe fille
• le fait que Python se charge de trouver la bonne méthode à
utiliser

Le polymorphisme 22
Le polymorphisme

>>> class ClasseMere ( object ) :


def une_methode ( self ) :
print ( " Je suis dans la classe m è re " )

>>> class ClasseFille ( ClasseMere ) :


def une_methode ( self ) :
print ( " Je suis dans la classe fille " )

>>> ClasseMere () . une_methode ()


Je suis dans la classe m è re
>>> ClasseFille () . une_methode ()
Je suis dans la classe fille

Le polymorphisme 23
L’encapsulation
L’encapsulation

L’encapsulation 24
L’encapsulation

Un arbre est composé de :


• un tronc
• des branches
• des brindilles
• des feuilles

L’encapsulation 24
L’encapsulation

Un arbre est composé de :


• un tronc
• des branches
• des brindilles
• des feuilles
Quand on parle d’un arbre, on sait
qu’il contient toutes ces parties mais
on ne le détaille pas.

L’encapsulation 24
L’encapsulation

Principe visant à cacher les détails de l’implémentation à


l’utilisateur : les attributs de chaque classe doivent être
privés, c’est-à-dire inaccessibles en dehors de la classe.
En Python cette notion n’existe pas : tout est public. Par
convention on ajoutera un “ ” avant chaque attribut pour faire
comme s’il était privé.

L’encapsulation 25
L’encapsulation

>>> class MaClasse ( object ) :


def __init__ ( self , valeur1 , valeur2 ) :
self . attribut_public = valeur1
self . _attribut_prive = valeur2

L’encapsulation 26
Lecture/écriture d’attributs

Comment lire/écrire les valeurs des attributs privés ?


On utilise des méthodes spécifiques. On les appellent des
getter (pour lire une valeur) et des setter (pour changer une
valeur).

L’encapsulation 27
Lecture/écriture d’attributs

>>> class Canard ( object ) :


def __init__ ( self , couleur , taille ) :
self . _couleur = couleur
self . _taille = taille

def get_couleur ( self ) :


return self . _couleur

def set_couleur ( self , couleur ) :


self . _couleur = couleur

>>> canard = Canard ( " jaune " , 5)


>>> canard . set_couleur ( " vert " )
>>> canard . get_couleur ()
’ vert ’

L’encapsulation 28
L’abstraction
Idée générale

L’abstraction 29
Idée générale

Ce que veut l’utilisateur :


• Appuyer sur un bouton
• Mettre de l’argent
• Récupérer son soda/snack

L’abstraction 29
Idée générale

Ce que veut l’utilisateur :


• Appuyer sur un bouton
• Mettre de l’argent
• Récupérer son soda/snack
Ce que l’utilisateur ne voit pas :
• Interprétation de la commande
• Vérification du paiement
• Donner le soda/snack

L’abstraction 29
Les classes abstraites

Une classe abstraite est une classe qui ne peut être instanciée.
C’est une notion qui est difficile à mettre en œuvre en Python.
Remarque : on peut lever une exception dans le constructeur.

L’abstraction 30
Les classes abstraites

class MaClas seAbstraite ( object ) :


def __init__ ( self , param1 , param2 ...) :
raise NotImplementedError

def methode1 ( self , param ...) :


# methode1 est une m é thode abstraite
raise NotImplementedError

def methode2 ( self , param ...) :


# methode2 est une m é thode concr è te : on
l ’ impl é mente ici

L’abstraction 31
Les classes abstraites

class Animal ( object ) :


def __init__ ( self ) :
raise NotImplementedError

def manger () :
# methode abstraite
raise NotImplementedError

class Canard ( Animal ) :


def __init__ ( self , couleur ) :
self . _couleur = couleur

def manger ( ingredient ) :


# methode concr è te
...

L’abstraction 32
Différences abstraction/encapsulation

Quelles sont les différences entre abstraction et encapsulation ?

L’abstraction 33
Différences abstraction/encapsulation

Quelles sont les différences entre abstraction et encapsulation ?

Figure 1: Abstraction Figure 2: Encapsulation

L’abstraction 33
Différences abstraction/encapsulation

Abstraction Encapsulation
• Généralisation • Structuration
• Cache les données / struc- • Cache les détails de
tures pour mettre en avant les l’implémentation
idées
• Se concentrer sur ce que fait • cache les détails /
un objet et pas sur comment méchanismes utilisés par
il le fait l’objet
• Design • Implémentation

L’abstraction 34

Vous aimerez peut-être aussi