Sommaire

Concepts de la POO non natifs

1. Classe abstraite

Python ne propose pas de mécanisme natif pour déclarer des classes abstraites car le duck typing élude le problème. En effet, en POO, une classe abstraite est utile afin de définir un contrat commun entre plusieurs classes (les classes dérivées concrètes) et ceux qui vont les utiliser. Le terme de « contrat » désigne les comportements et données qu’une classe garantit de posséder et de produire. Techniquement, il s’agit de ses attributs et méthodes, mais la notion de contrat ajoute une dimension de responsabilité.

C’est la classe Forme qui déclare l’existence des méthodes de calcul de périmètre et d’aire, ainsi que des attributs de coordonnées (x, y). C’est donc grâce à elle que le module de dessin pourra placer les formes concrètes (carré, cercle...) sur un plan.

Avec le duck typing, la déclaration de ce contrat n’a plus aucun sens : on traite les instances comme des formes en leur demandant leurs coordonnées pour les placer. Si jamais une de ces instances n’est pas une forme, mais possède ces attributs de coordonnées, il n’y a aucun problème, le traitement peut se poursuivre. Il a cancané : c’est un canard. Une classe s’est fait passer pour une Forme alors qu’elle ne connaissait pas le contrat établi par Forme. Donc, ...