La Programmation Orientée 0bjet POO En Python

.

1. Le concept de POO en Python

La programmation orientée objet (POO) est un type de programmation permettant de structurer un programme en regroupant des propriétés et des comportements associés dans des objets appelés objets d'instances.

Conceptuellement, les objets sont comme les composants d'un système. Considérez un programme comme une sorte de chaîne de montage en usine. À chaque étape de la chaîne de montage, un composant du système traite un matériau, transformant finalement la matière première en un produit fini.

En d'autres termes, la programmation orientée objet est une approche permettant ayant pour but de modéliser des éléments du monde réel comme: voitures, personnes etc. ainsi que des relations entre des entités telles que les entreprises et les employés, les étudiants et les enseignants, etc. La modélisation POO modélise des entités réelles sous la forme d'objets logiciels certaines données qui leur sont associées et peuvent remplir certaines fonctions.

La programmation orienté objet est un type de programmation basée sur la création des classes et des objets via une opération appelée instanciation. Une classe est un prototype (modèle) codé en un langage de programmation dont le but de créer des objets dotés d'un ensemble de méthodes et attributs qui caractérisent n'importe quel objet de la classe. Les attributs sont des types de données (variables de classe et variables d'instance) et des méthodes, accessibles via la concaténation par points. En programmation orientée objet, la déclaration d'une classe regroupe des méthodes et propriétés (attributs) communs à un ensemble d'objets. Ainsi on pourrait dire qu'une classe représente une catégorie d'objets. Elle apparaît aussi comme une usine permettant de créer des objets ayant un ensemble d'atributs et méthodes communes.

Dès sa création, Python est un langage orienté objet. Pour cette raison, la création et l'utilisation de classes et d'objets sont carrément faciles. Dans ce chapitre, nous allons traiter la notion de programmation orientée objet en Python ainsi que toutes les conceptes liés: classes & objet d'instance, héritage, polymorphisme, surcharge de méthodes etc.

2. Terminologie de la POO

  1. Classe: modèle de code abstrait qui représente et caractérise une catégorie d'objets ayant des propriétés communes (attributs et méthodes). La création d'un objet à partir d'une classe est appelé instanciation. L'objet crée à partir d'une classe est appelé instance ou objet d'instance ( instance object en anglais)
  2. Variable de classe: Variable partagée par toutes les instances d'une classe. Les variables de classe sont définies dans une classe mais en dehors de toute méthode de la classe. Les variables de classe ne sont pas utilisées aussi souvent que les variables d'instance.
  3. Data member: Une variable de classe ou une variable d'instance qui contient les données associées à une classe et à ses objets.
  4. Surcharge de fonction (Function overloading): Affectation de plusieurs comportements à une fonction particulière. L'opération effectuée varie en fonction des types d'objets ou d'arguments impliqués.
  5. Variable d'instance: Variable définie dans une méthode et n'appartenant qu'à l'instance actuelle d'une classe.
  6. Héritage: Transfert des caractéristiques d'une classe à d'autres classes qui en sont dérivées.
  7. Instance: Un objet crée à partir d'une certaine classe. Un objet obj qui appartient à une classe Circle, par exemple, est une instance de la classe Circle.
  8. Instanciation: Création d'une instance d'une classe.
  9. Méthode: Type particulier de fonction défini dans une définition de classe.
  10. Object: Une instance unique d'une structure de données définie par sa classe. Un objet comprend à la fois des membres de données (variables de classe et variables d'instance) et des méthodes.
  11. Surcharge: Affectation de plusieurs fonctions à un opérateur particulier.




3. Les classes en Python

Pour créer une classe en Python, on utilise le mot clé 'class' suivie du nom de la classe à créer:

On crée ensuite une méthode qui permet de construire les objets, appelé constructeur via l'instruction :

Exemple (classe Personne)

Exemple (classe Rectangle)

On peut aussi améliorer la classe en ajoutant des méthodes permettant d'effectuer différentes tâches comme: méthodes d'instance, méthodes de classe...

4. Les méthodes d'instances en POO Python

Definition Une méthode d'instance est une méthode ou procédure nommée au sein de la classe, permettant de définir des propriétés ou comportements des objets d'instances. Une méthode d'instance possède un ou plusieurs paramètre, le premier nommé self est obligatoire!

Exemple (ajout de méthode d'instance qui calcule la surface du rectangle)

5. Les méthodes de classes en Python

Une méthode de classe en Python est une méthode qui fonctionne au sein de la classe où elle a été crée et elle est accessible par un objet d'instance ou directement en utilisant le nom de la classe sans faire aucune instanciation! Une méthode de classe est caractérisée par:

  1. Elle fonctionne à l'intérieur de la classe où elle a été et est accessible via une instance objet ou en utilisant le nom de la classe!
  2. Une méthode de classe est décorée par @classmethod
  3. Une méthode de classe possède un premier paramètre obligatoire nommé cls




6. Attributs d'instances et attributs de classes

Un attribut d'instance est un attribut qui fonctionne avec un objet d'instance tandis qu'un attribut de classe est un attribut qui fonctionne avec la classe.

Exemple (attributs d'instances & attributs de classes)

Voici un autre exemple qui explique clairement comment utiliser les attributs et méthodes de classe:
Il s'agit d'un exemple de classe 'Voiture' qui contient un attribut de classe nommé nombre_de_voitures  ( variable de classe) qui s'incrémente à chaque fois qu'on crée un objet voiture:

7. Les méthodes statiques

Une méthode statique (static method) est une méthode de classe ayant la propriété d'être exécutée sans passer par l'instanciation.

Exemple (méthode statique)

8. Héritage en Python

Pour éviter de recopier le code d'une classe, on utilise la méthode d'héritage. La méthode d'héritage consiste à créer à partir d'une classe mère une autre classe appelé classe fille qui hérite toutes les méthodes et propriétés de la classe mère. Pour simplifier l'acquisition pour les apprenants débutant, nous allons traiter ce concept sur un exemple simple :

Classe mère:

Nous venons de définir une classe Personne dont les attributs sont nom et age. Nous allons maintenant créer une classe fille nommée Student qui hérite les mêmes méthodes et propriétés de la classes mère Personne. La syntaxe générale de l'héritage se fait grâce à la commande:

Qui veut dire que la classe classe_fille hérite de la calsse classe_mère.
Pour notre cas de la classe fille Student hérite de la classe mère Personne.

Exemple ( Student hérite de la classe Personne)

L'héritage des attributs nom et age se fait via la commande:

Code de la classe fille Student:

Exemple complet

9. Héritage multiple

En programmation orientée objet, on parle d'héritage multiple, lorsqu'une classe hérite de deux ou plusieurs classes.



Exemple (héritage multiple)

Pour plus de détails sur l'héritage multiple, voir notre article détaillé : Héritage multiple

10. Surcharge de méthodes (overloading)

La surcharge en programmation orientée objet est méthode permettant de définir plusieurs fois une même méthode avec des arguments différents. Le compilateur choisit la méthode qui doit être appelée en fonction du nombre et du type des arguments .
Contrairement aux autres langages objet Java, C++, python ne prend pas en charge la surcharge de méthode par défaut. Mais il existe différentes façons d'obtenir une surcharge de méthode en Python.
Le problème avec la surcharge de méthodes en Python est que nous pouvons surcharger les méthodes mais ne pouvons utiliser que la dernière méthode définie.

Exemple (surcherge de méthodes)

Par contre si on n'execute pas la dernières méthode:

Exemple( erreur)

Remarque

L'opération C.somme(2 , 3) ne peut être exécuté! Néanmoins, il y a une possibilité de faire fonctionner correctement la surcharge de méthodes en Python via le module multipledispatch qu'on peut installer facilement via l'utilitaire pip:

Exemple (Surcharge de méthodes via multipledispatch)

11. Polymorphisme et redéfinition de méthodes (overriding methods)

Linguistiquement, le mot polymorphisme signifie plusieurs formes. En Python, le polymorphisme sert à définir une méthodes dans la classe enfant avec le même nom qu'une méthodes de la classe mère. Le principe de l'héritage polymorphe est d'offrir la possibilité à une classe enfant d'hériter une méthode de la classe mère avec modification selon le besoin de la classe enfant. Exemple pour une classe Personne on peut définir une méthode afficher() qui affiche les attributs d'un objet : nom, prénom, age... et dans une autre classe Student qui hérite de la classe Personne on aura besoin de la même méthode afficher() mais cette fois elle affiche des informations supplémentaires spécifique à la classe enfant comme section, niveau d'études...

Exemple (redéfinition de méthodes)

12. Les classes abstraites en Python

Les classes abstraites sont des classes qui contiennent une ou plusieurs méthodes abstraites. Une méthode abstraite est une méthode déclarée, mais qui ne contient aucune implémentation. Les classes abstraites ne peuvent pas être instanciées et nécessitent des sous-classes pour fournir des implémentations pour les méthodes abstraites. afin de pouvoir utiliser les classes abstraites, il faut au préalable importer la classe ABC depuis le module abc:

Exemple (classe abstraite)

13. Les interfaces en Python

Une interface est un type de référence regroupant une collection de méthodes abstraites tout en exigeant un certain nombre de règles:

  1. Une interface établit un contrat entre une classe et l'interface qu'elle implémente.
  2. Une interface ne contient que des prototypes de méthodes non-implémentées.
  3. La classe qui implémente l'interface doit fournir une implémentation pour chacune des méthodes de l'interface.
  4. En générale on parle d'implémenter une interface (et non hériter d'une interface), mais en Python il s'agit d'un type d'héritage.

Python est doté d'une bibliothèque nommée interface permettant de déclarer des interfaces et pour affirmer statiquement que les classes implémentent ces interfaces. Il fournit une sémantique plus stricte que le module abc intégré de Python et vise à produire des messages d'erreur d'une utilité exceptionnelle lorsque les interfaces ne sont pas satisfaites.

Afin de pouvoir utiliser les interfaces en Python, il faut installer le module interface via l'utilitaire pip:

Exemple ( interfaces en python)

Pour plus de détails sur les interfaces Python veuillez consulter la documentation officielle: https://interface.readthedocs.io/en/latest/




 

Younes Derfoufi
CRMEF OUJDA

1 thought on “La Programmation Orientée 0bjet POO En Python

Leave a Reply