Bienvenue dans notre cours ‘Programmation orientée objet en Python’. Ce cours traite les concepts fondamentaux de la POO. Aussi, on explique , puis implémente, les principes de la POO comme l’encapsulation, l’héritage, le polymorphisme et l’abstraction.

Alors, dans cette partie de cours, on va découvrir le principe d’encapsulation et  son application dans le cas d’une relation d’héritage entre classes.

Rappel : Encapsulation en POO

L’encapsulation est un mécanisme qui consiste à rassembler les données et les méthodes au sein d’une classe en cachant l’implémentation de l’objet. Autrement dit, le principe d’encapsulation permet aux objets de se présenter sous deux vues possibles :

  1. la vue externe : celle utilisée par le programmeur utilisateur de la classe. En effet, elle définit les services accessibles aux utilisateurs de l’objet et ne fournit aucun accès aux mécanismes internes de l’objet ;
  2. la vue interne : celle du programmeur concepteur de l’objet .Elle donne, alors, tous les détails sur la constitution interne de l’objet, comment il est construit ;

Les programmes doivent interagir avec les données d’ un objet uniquement par l’ intermédiaire des méthodes de l’ objet.

Encapsulation en cas d'héritage

Nous avons déjà vu comment appliquer l’encapsulation dans une classe python en général : 

Règle :

  • Les attributs doivent être privés
  • Les opérations définissant l’interface d’une classe doivent être publique (services offerts)
  • Des opérations peuvent aussi être privées si elles ne participent qu’au fonctionnement interne de la classe

On veut traiter le cas d’héritage. Donc, la règle devient : 

Règle :

  • Les attributs de la classe mère doivent être protégés.
  • Les attributs des classes filles, qui ne jouent pas le rôle d’une mère (cas d’héritage successif), doivent être privés.
  • Les opérations définissant l’interface d’une classe doivent être publique (services offerts)
  • Des opérations peuvent aussi être privées si elles ne participent qu’au fonctionnement interne de la classe fille. Si la classe joue le rôle d’une classe mère, alors, elle doit avoir les méthodes soit publiques soit protégées.

En effet, le principe est simple : si une classe veut être une classe mère, alors, elle ne doit rien cacher pour ses classes filles. Autrement dit, une classe fille hérite tout de sa classe de base. Donc, elle doit pouvoir accéder aux éléments hérités.

Python : Implémenter l'encapsulation en cas d'héritage​

Python décrit un élément protégé en lui précédant par ‘_’ (un underline).

Exemple :

#classe mère
class Personne:
def __init__(self,n,p):
self._nom=n #attribut protégé
self._prenom=p #attribut protégé
#classe fille
class Stagiaire(Personne):
def __init__(self,n,p,notes):
Personne.__init__(self,n,p)
self.__notes=notes #attribut privé
def AfficherInfos(self):#Redéfinition
print("nom: ",self._nom,"prénom: ",self._prenom)
print(self.__notes)

Dans cet exemple, vous remarquez que la classe mère Personne n’a pas la méthode d’affichage.Mais, nous avons appliqué le principe d’encapsulation correctement : les attributs de la classe mère sont définit comme éléments protégés. D’où, la classe fille Stagiaire a arrivé à utiliser ses attributs hérités dans sa méthode d’affichage.

Attention

Python traite l’encapsulation de façon différente par rapport aux autres langages de programmation orientés objets. En effet, l’ajout de ‘__’ pour décrire les éléments (attributs ou méthodes) privés, ou l’ajout de ‘_’ pour les éléments protégés, n’interdit pas , réellement, l’accès à ces éléments.

Autrement dit, python permet aux développeurs d’ajouter des symboles pour marquer des éléments avec un tel ou tel  niveau d’encapsulation. Mais n’interdit pas l’accès à ces éléments. 

C’est une sorte de convention, que le développeur respecte. C’est à dire lorsque , par exemple, il définit un élément privé. Alors, il dit aux autres développeur que cet attribut est définit pour être utiliser comme élément privé. S’ils l’utilisent par la suite ( car ils peuvent le récupérer comme même), alors ces eux les responsables pour des failles ou des exceptions qui peuvent arriver suite aux futurs modifications possibles. 

Vous pouvez suivre notre liste des vidéos sur la programmation orientée objet  sur notre chaine youtube 9raytifclick (Darija: arabe marocaine) : POO en Python

Aussi, si vous voulez commencer l’apprentissage d’un langage de programmation, voilà notre cours : Langage Python Niveau 1 qui sera très utile pour vous (il vous aide à pratiquer tous les éléments de base de la programmation ; vus dans notre cours d’algorithmique).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *