Introduction
à l’orienté objet
en Python
Abdoulaye DIENG 1
Septembre 2020
Objectif général
Développer en orienté objet avec Python
Objectifs opérationnels
• Organiser le code grâce aux classes
• Sécuriser une classe avec l’encapsulation
• Réutiliser et factoriser du code avec l’héritage
• Invoquer des méthodes de même nom, quel que soit le type
d'objet sur lequel elles opèrent, sans avoir à effectuer au
préalable une vérification de type grâce au polymorphisme
Sommaire
1) Qu’est que Python ?
2) Environnement de développement
3) Classe
4) Encapsulation
5) Héritage
6) Polymorphisme
Qu’est ce que Python
Langage de programmation interprété, multi-paradigme
(fonctionnel et orienté objet) et multiplateforme (Windows,
Linux, macOS, Android et iOS)
Offre des outils de haut niveau et une syntaxe simple
Créé par Guido Van Russom en 1989
Dernière version 3.8 en sept 2020
Usage :
 Scripts pour automatiser des tâches
 Analyse de données
 Calcul numérique
 Développement web
 Instagram, YouTube, Dropbox, …
5
Environnement de dev
installation de Python
Selon le SE, télécharger le fichier d'installation de Python à
l’URL https://www.python.org/downloads/
Installer Python sous Windows
exécuter le fichier d'installation et suivre les étapes
Installer Python sous Mac OS X
Ouvrir le fichier .dmg, faire un double-clic sur le paquet
d'installation Python.mpkg et suivre les étapes
Installer Python sous Linux
1) Décompresser l'archive : tar -xzf archive
2) Se mettre dans le dossier créé
3) Exécuter le script configure : ./configure
4) Compiler
make puis make install en tant que super-utilisateur.
6
Environnement de dev
édition et exécution d’un script Python
Pour éditer un script python
• Créer le dossier « exemples-python » : lieu de stockage de
tous les exemples de ce cours
• À l’aide d’un éditeur de texte, créer un nouveau fichier
(nomScript.py par exemple) dans « exemples-python »
Pour exécuter un script python
• Lancer l’invite de commande (Windows) ou le terminal (Mac
ou Linux)
• Se placer dans « exemples-python »
• Lancer la commande
python nomScript.py (sous Windows)
python3 nomScript.py (sous Mac OS/Linux)
7
Environnement de dev
interpréteur de Python
L’interpréteur convertit les instructions Python en un langage
compréhensible par l’ordinateur
Il peut être utilisé pour exécuter une instruction
Pour ouvrir l’interpréteur
• Lancer l’invite de commande ou le terminal
• taper python ou python3
Résultat : triple chevrons ( >>> )
8
Classe
présentation
Une classe est un type ou modèle de définition pour des
entités (ou objets) ayant les mêmes caractéristiques (ou
attributs) et les mêmes comportements (ou méthodes)
Un objet est alors une variable de la classe : on dit qu'il est
une instance de cette classe, c'est-à-dire un élément concret,
un exemplaire de cette classe.
Une classe est composée de membres :
• des attributs qui donnent l’état des instances
• des méthodes qui indiquent les opérations qui pourront
être effectuées sur les instances
• d’un constructeur pour créer les instances
Exemple : classe Rectangle avec
• les attributs : longueur et largeur
• les méthodes : aire() et perimetre()
Classe
déclaration
Syntaxe de déclaration
class NomClasse :
# Initialisation d’éventuels attributs de classe
# Définition d’un constructeur
# Initialisation des attributs d’instance
# Définition des méthodes
exemple_classe_rectangle.py (script à créer)
class Rectangle :
10
Classe
attribut de classe
Attribut qui existe même si aucun objet de la classe n’est créé.
Exemple : le nombre de rectangles créés
Sa valeur est la même pour tout objet
Initialisé comme une variable classique
Exemple à ajouter à la classe Rectangle
nbRectanglesCrees=0;
Accessible en le préfixant du nom de la classe suivi de .
Exemple : Rectangle.nbRectanglesCrees
11
Classe
définition du constructeur
Un constructeur est une méthode particulière qui est appelée
lors de la création d’un objet.
Sa tâche principale est d’initialiser les attributs d’instance
Il prend en paramètre l’instance (en 1er) puis les arguments
d’initialisation
La valeur d’un attribut d’instance est propre à chaque objet
Syntaxe de définition
def __init__(self, arg1 [, arg2, …])
self.attribut1 = arg1
…
Exemple à ajouter à la classe Rectangle
12
Classe
méthode
Méthode = fonction définie dans une classe
Trois types de méthode
• Méthode de classe : reçoit cls (classe courante) comme 1er
argument et ne peut accéder qu’aux membres de classe
• Méthode d’instance : reçoit self (objet courant) comme 1er
argument et peut accéder aux membres d’instance et de
classe
• Méthode statique : ne peut accéder à aucun membre
13
Classe
exemples de définitions de méthode
Méthode statique
14
Méthode d’instance
Méthode de classe
Classe
exemple_classe_rectangle.py
15
Classe
instanciation
Syntaxe
nomObjet = NomClasse([liste_arguments])
exemple_main.py (script à créer)
from exemple_classe_rectangle.py import Rectangle
rectangle1 = Rectangle(4,3)
16
Classe
accès aux membres
Syntaxe d’accès à un attribut d’instance
nomObjet.nomAttribut
Syntaxe d’accès à une méthode d’instance
nomObjet.nomMethode([liste_arg])
Syntaxes d’accès à un attribut de classe
nomClasse.nomAttribut
nomObjet.nomAttribut
Syntaxe d’accès à une méthode de classe ou statique
nomClasse.nomMethode([liste_arg])
nomObjet.nomMethode([liste_arg])
Exemple à ajouter dans exemple_main.py juste avant
l’instanciation
print(Rectangle.nbr_rectangles_crees )
Exemple à ajouter dans exemple_main.py
print(rectangle1.get_nbr_rectangles_crees() )
print(rectangle1.aire())
rectangle1.longueur = -14 // transition
17
Encapsulation
présentation
L'encapsulation est un mécanisme consistant à empêcher
l'accès aux données par un autre moyen que les services
(méthodes) proposés :
o chaque objet = boîte noire pour ses utilisateurs
o les utilisateurs n'ont accès qu’à l'interface publique
Ce mécanisme permet de :
o garantir l'intégrité des données contenues dans l'objet ;
o simplifier l'utilisation des objets en masquant l'ensemble
des attributs et des méthodes qui sont utiles simplement au
fonctionnement interne des objets.
18
Encapsulation
membre privé
Membre privé = attribut ou méthode directement
accessible qu’à l’intérieur de la classe
Syntaxe
préfixer le nom de 2 underscores
Exemples
• Dans la classe Rectangle, remplacez toute occurrence
de self.longeur par self.__longeur
• Exécutez exemple_main.py pour constater l’erreur
causée par l’instruction
rectangle1.longueur = -14
Encapsulation
getter et setter
getter : méthode permettant de consulter un attribut privé
Exemple à ajouter à la classe Rectangle
setter : méthode permettant de modifier (sous contrôle)
un attribut privé
Exemple à ajouter à la classe Rectangle
Encapsulation
getter et setter - exemple
Dans exemple_main.py, remplacez la dernière instruction par :
Encapsulation
propriété
Une propriété permet syntaxiquement d’accéder directement
(à l’extérieur de la classe) à un attribut privé tout en utilisant (à
l’intérieur de la classe) le getter ou le setter de l’attribut
Syntaxe de définition dans le corps de la classe
nom_propriete = property(getter, setter)
Syntaxe d’accès
nom_objet.nom_propriete
Exemple à ajouter à la classe Rectangle
longueur = property(get_longueur, set_longueur)
Dans exemple_main.py, ajoutez
rectangle1.longueur = 5
print(rectangle1.longueur)
Héritage
définition et intérêt
Héritage : création d’une classe à partir d’une autre en
partageant ses attributs et méthodes
Intérêt
• Eviter de réécrire un même code plusieurs fois
• Spécialisation ou enrichissement : une nouvelle classe
réutilise les membres (publiques ou protégés) d’une classe en
y ajoutant des membres particuliers
• Généralisation ou factorisation : réunir des classes possédant
des caractéristiques et comportements communs dans une
nouvelle classe plus générale
23
Héritage
syntaxe
Syntaxe
class nomClasseFille(nomClasseMere):
…
Exemple
• Un pavé droit est un rectangle dans l’espace
• exemple_classe_pavedroit.py (script à créer)
class PaveDroit(Rectangle):
…
24
Héritage
membre protégé
Pb : une classe dérivée n’hérite pas un membre privé
Membre protégé : portée limitée à la classe et à ses
descendantes
Syntaxe
préfixer le nom d’un seul underscore
Exemple : dans la classe Rectangle, remplacez toute
occurrence de self.__longeur par self._longeur
Comme pour un membre privé, un membre protégé peut
être associé à un getter, un setter et une propriété
25
Héritage
constructeur de la sous-classe
Construire un objet D d’une classe dérivée, nécessite
d’abord de construire un objet B de sa classe de base puis
de le compléter par ce qui est spécifique à D.
Le constructeur de la classe fille doit faire un appel
explicite au constructeur de la classe mère afin d’initialiser
les attributs hérités de celle-ci
Syntaxes de l’appel explicite du constructeur de la classe
mère
• précéder __init__ du nom de la classe mère
• précéder __init__ de super()
26
Héritage
constructeur de la sous-classe
• Dans exemple_main.py, ajoutez
27
• exemple_classe_pavedroit.py
Héritage
redéfinition d’une méthode de la classe mère
Une sous-classe peut redéfinir toutes méthode héritée et
fournir une implémentation spécifique pour celle-ci
La redéfinition d’une méthode cache le code de la méthode
héritée
Exemple
1) Définissez une méthode describe() de Rectangle qui
affiche une phrase du type : « Rectangle de longueur
<longueur> cm et de largeur <largeur> cm »
2) Dans exemple_main.py, invoquez describe() sur un objet
de base et sur un objet dérivé
3) Dans la classe PaveDroit, redéfinissez describe() et
refaites la question 2
28
Héritage
réutilisation d’une méthode de la classe mère
Syntaxes de la réutilisation d’une méthode de la classe
mère
• La précéder du nom de la classe mère
• La précéder de super()
Exemple
Réécrire et invoquer la méthode volume() de PaveDroit en
réutilisant la méthode aire() de Rectangle
29
Polymorphisme
La redéfinition de méthode par une sous-classe entraine
l’appel de méthodes de même nom sur des objets de types
différents
Le polymorphisme permet d’appeler des méthodes de
même nom, quel que soit le type d'objet sur lequel elles
opèrent, sans avoir à effectuer au préalable une vérification
de type.
Exemple
les méthodes describe() de la classe Rectangle et de la classe
PaveDroit
30
Références
https://docs.python.org/3.8/
https://openclassrooms.com/fr/courses/235344-apprenez-
a-programmer-en-python
https://www.pierre-giraud.com/python-apprendre-
programmer-cours/
https://www.geeksforgeeks.org/python-programming-
language/
31

Introduction à l’orienté objet en Python

  • 1.
    Introduction à l’orienté objet enPython Abdoulaye DIENG 1 Septembre 2020
  • 2.
    Objectif général Développer enorienté objet avec Python
  • 3.
    Objectifs opérationnels • Organiserle code grâce aux classes • Sécuriser une classe avec l’encapsulation • Réutiliser et factoriser du code avec l’héritage • Invoquer des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type grâce au polymorphisme
  • 4.
    Sommaire 1) Qu’est quePython ? 2) Environnement de développement 3) Classe 4) Encapsulation 5) Héritage 6) Polymorphisme
  • 5.
    Qu’est ce quePython Langage de programmation interprété, multi-paradigme (fonctionnel et orienté objet) et multiplateforme (Windows, Linux, macOS, Android et iOS) Offre des outils de haut niveau et une syntaxe simple Créé par Guido Van Russom en 1989 Dernière version 3.8 en sept 2020 Usage :  Scripts pour automatiser des tâches  Analyse de données  Calcul numérique  Développement web  Instagram, YouTube, Dropbox, … 5
  • 6.
    Environnement de dev installationde Python Selon le SE, télécharger le fichier d'installation de Python à l’URL https://www.python.org/downloads/ Installer Python sous Windows exécuter le fichier d'installation et suivre les étapes Installer Python sous Mac OS X Ouvrir le fichier .dmg, faire un double-clic sur le paquet d'installation Python.mpkg et suivre les étapes Installer Python sous Linux 1) Décompresser l'archive : tar -xzf archive 2) Se mettre dans le dossier créé 3) Exécuter le script configure : ./configure 4) Compiler make puis make install en tant que super-utilisateur. 6
  • 7.
    Environnement de dev éditionet exécution d’un script Python Pour éditer un script python • Créer le dossier « exemples-python » : lieu de stockage de tous les exemples de ce cours • À l’aide d’un éditeur de texte, créer un nouveau fichier (nomScript.py par exemple) dans « exemples-python » Pour exécuter un script python • Lancer l’invite de commande (Windows) ou le terminal (Mac ou Linux) • Se placer dans « exemples-python » • Lancer la commande python nomScript.py (sous Windows) python3 nomScript.py (sous Mac OS/Linux) 7
  • 8.
    Environnement de dev interpréteurde Python L’interpréteur convertit les instructions Python en un langage compréhensible par l’ordinateur Il peut être utilisé pour exécuter une instruction Pour ouvrir l’interpréteur • Lancer l’invite de commande ou le terminal • taper python ou python3 Résultat : triple chevrons ( >>> ) 8
  • 9.
    Classe présentation Une classe estun type ou modèle de définition pour des entités (ou objets) ayant les mêmes caractéristiques (ou attributs) et les mêmes comportements (ou méthodes) Un objet est alors une variable de la classe : on dit qu'il est une instance de cette classe, c'est-à-dire un élément concret, un exemplaire de cette classe. Une classe est composée de membres : • des attributs qui donnent l’état des instances • des méthodes qui indiquent les opérations qui pourront être effectuées sur les instances • d’un constructeur pour créer les instances Exemple : classe Rectangle avec • les attributs : longueur et largeur • les méthodes : aire() et perimetre()
  • 10.
    Classe déclaration Syntaxe de déclaration classNomClasse : # Initialisation d’éventuels attributs de classe # Définition d’un constructeur # Initialisation des attributs d’instance # Définition des méthodes exemple_classe_rectangle.py (script à créer) class Rectangle : 10
  • 11.
    Classe attribut de classe Attributqui existe même si aucun objet de la classe n’est créé. Exemple : le nombre de rectangles créés Sa valeur est la même pour tout objet Initialisé comme une variable classique Exemple à ajouter à la classe Rectangle nbRectanglesCrees=0; Accessible en le préfixant du nom de la classe suivi de . Exemple : Rectangle.nbRectanglesCrees 11
  • 12.
    Classe définition du constructeur Unconstructeur est une méthode particulière qui est appelée lors de la création d’un objet. Sa tâche principale est d’initialiser les attributs d’instance Il prend en paramètre l’instance (en 1er) puis les arguments d’initialisation La valeur d’un attribut d’instance est propre à chaque objet Syntaxe de définition def __init__(self, arg1 [, arg2, …]) self.attribut1 = arg1 … Exemple à ajouter à la classe Rectangle 12
  • 13.
    Classe méthode Méthode = fonctiondéfinie dans une classe Trois types de méthode • Méthode de classe : reçoit cls (classe courante) comme 1er argument et ne peut accéder qu’aux membres de classe • Méthode d’instance : reçoit self (objet courant) comme 1er argument et peut accéder aux membres d’instance et de classe • Méthode statique : ne peut accéder à aucun membre 13
  • 14.
    Classe exemples de définitionsde méthode Méthode statique 14 Méthode d’instance Méthode de classe
  • 15.
  • 16.
    Classe instanciation Syntaxe nomObjet = NomClasse([liste_arguments]) exemple_main.py(script à créer) from exemple_classe_rectangle.py import Rectangle rectangle1 = Rectangle(4,3) 16
  • 17.
    Classe accès aux membres Syntaxed’accès à un attribut d’instance nomObjet.nomAttribut Syntaxe d’accès à une méthode d’instance nomObjet.nomMethode([liste_arg]) Syntaxes d’accès à un attribut de classe nomClasse.nomAttribut nomObjet.nomAttribut Syntaxe d’accès à une méthode de classe ou statique nomClasse.nomMethode([liste_arg]) nomObjet.nomMethode([liste_arg]) Exemple à ajouter dans exemple_main.py juste avant l’instanciation print(Rectangle.nbr_rectangles_crees ) Exemple à ajouter dans exemple_main.py print(rectangle1.get_nbr_rectangles_crees() ) print(rectangle1.aire()) rectangle1.longueur = -14 // transition 17
  • 18.
    Encapsulation présentation L'encapsulation est unmécanisme consistant à empêcher l'accès aux données par un autre moyen que les services (méthodes) proposés : o chaque objet = boîte noire pour ses utilisateurs o les utilisateurs n'ont accès qu’à l'interface publique Ce mécanisme permet de : o garantir l'intégrité des données contenues dans l'objet ; o simplifier l'utilisation des objets en masquant l'ensemble des attributs et des méthodes qui sont utiles simplement au fonctionnement interne des objets. 18
  • 19.
    Encapsulation membre privé Membre privé= attribut ou méthode directement accessible qu’à l’intérieur de la classe Syntaxe préfixer le nom de 2 underscores Exemples • Dans la classe Rectangle, remplacez toute occurrence de self.longeur par self.__longeur • Exécutez exemple_main.py pour constater l’erreur causée par l’instruction rectangle1.longueur = -14
  • 20.
    Encapsulation getter et setter getter: méthode permettant de consulter un attribut privé Exemple à ajouter à la classe Rectangle setter : méthode permettant de modifier (sous contrôle) un attribut privé Exemple à ajouter à la classe Rectangle
  • 21.
    Encapsulation getter et setter- exemple Dans exemple_main.py, remplacez la dernière instruction par :
  • 22.
    Encapsulation propriété Une propriété permetsyntaxiquement d’accéder directement (à l’extérieur de la classe) à un attribut privé tout en utilisant (à l’intérieur de la classe) le getter ou le setter de l’attribut Syntaxe de définition dans le corps de la classe nom_propriete = property(getter, setter) Syntaxe d’accès nom_objet.nom_propriete Exemple à ajouter à la classe Rectangle longueur = property(get_longueur, set_longueur) Dans exemple_main.py, ajoutez rectangle1.longueur = 5 print(rectangle1.longueur)
  • 23.
    Héritage définition et intérêt Héritage: création d’une classe à partir d’une autre en partageant ses attributs et méthodes Intérêt • Eviter de réécrire un même code plusieurs fois • Spécialisation ou enrichissement : une nouvelle classe réutilise les membres (publiques ou protégés) d’une classe en y ajoutant des membres particuliers • Généralisation ou factorisation : réunir des classes possédant des caractéristiques et comportements communs dans une nouvelle classe plus générale 23
  • 24.
    Héritage syntaxe Syntaxe class nomClasseFille(nomClasseMere): … Exemple • Unpavé droit est un rectangle dans l’espace • exemple_classe_pavedroit.py (script à créer) class PaveDroit(Rectangle): … 24
  • 25.
    Héritage membre protégé Pb :une classe dérivée n’hérite pas un membre privé Membre protégé : portée limitée à la classe et à ses descendantes Syntaxe préfixer le nom d’un seul underscore Exemple : dans la classe Rectangle, remplacez toute occurrence de self.__longeur par self._longeur Comme pour un membre privé, un membre protégé peut être associé à un getter, un setter et une propriété 25
  • 26.
    Héritage constructeur de lasous-classe Construire un objet D d’une classe dérivée, nécessite d’abord de construire un objet B de sa classe de base puis de le compléter par ce qui est spécifique à D. Le constructeur de la classe fille doit faire un appel explicite au constructeur de la classe mère afin d’initialiser les attributs hérités de celle-ci Syntaxes de l’appel explicite du constructeur de la classe mère • précéder __init__ du nom de la classe mère • précéder __init__ de super() 26
  • 27.
    Héritage constructeur de lasous-classe • Dans exemple_main.py, ajoutez 27 • exemple_classe_pavedroit.py
  • 28.
    Héritage redéfinition d’une méthodede la classe mère Une sous-classe peut redéfinir toutes méthode héritée et fournir une implémentation spécifique pour celle-ci La redéfinition d’une méthode cache le code de la méthode héritée Exemple 1) Définissez une méthode describe() de Rectangle qui affiche une phrase du type : « Rectangle de longueur <longueur> cm et de largeur <largeur> cm » 2) Dans exemple_main.py, invoquez describe() sur un objet de base et sur un objet dérivé 3) Dans la classe PaveDroit, redéfinissez describe() et refaites la question 2 28
  • 29.
    Héritage réutilisation d’une méthodede la classe mère Syntaxes de la réutilisation d’une méthode de la classe mère • La précéder du nom de la classe mère • La précéder de super() Exemple Réécrire et invoquer la méthode volume() de PaveDroit en réutilisant la méthode aire() de Rectangle 29
  • 30.
    Polymorphisme La redéfinition deméthode par une sous-classe entraine l’appel de méthodes de même nom sur des objets de types différents Le polymorphisme permet d’appeler des méthodes de même nom, quel que soit le type d'objet sur lequel elles opèrent, sans avoir à effectuer au préalable une vérification de type. Exemple les méthodes describe() de la classe Rectangle et de la classe PaveDroit 30
  • 31.

Notes de l'éditeur

  • #11 PHP M. DIENG
  • #12 PHP M. DIENG
  • #13 PHP M. DIENG
  • #14 PHP M. DIENG
  • #15 PHP M. DIENG
  • #16 PHP M. DIENG
  • #17 PHP M. DIENG
  • #18 PHP M. DIENG
  • #21 https://www.datacamp.com/community/tutorials/property-getters-setters
  • #22 https://www.datacamp.com/community/tutorials/property-getters-setters
  • #23 https://www.datacamp.com/community/tutorials/property-getters-setters https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/232793-definissez-des-proprietes
  • #24 PHP M. DIENG
  • #25 PHP M. DIENG
  • #26 PHP M. DIENG
  • #27 PHP M. DIENG
  • #28 PHP M. DIENG
  • #29 PHP M. DIENG
  • #30 PHP M. DIENG
  • #31 PHP M. DIENG