Page MenuHomePhabricator

Les classes
Updated 550 Days AgoPublic

la notion de classe

Une nouvelle structure de données voit le jour en orienté objet : la classe. Elle a pour principal rôle d’unir tous les attributs de l’objet et toutes les opérations les concernant. Ces opérations sont appelées méthodes et regroupent un ensemble d’instructions portant sur les attributs de l’objet. Les attributs de la classe sont comme des variables dont la portée d’action se limite à la seule classe. Les méthodes s’occupent de toute la partie active de ce petit programme, que nous appellerons désormais « classe ».

La classe devient alors ce contrat qui lie les attributs de l’objet et les méthodes qui les utilisent. On parlera de l’objet comme d’une instance de sa classe, et de la classe comme du type de cet objet. C’est la classe qui détermine les attributs (leur type) sur lesquels les méthodes peuvent opérer et seules les méthodes déclarées dans la classe pourront manipuler les attributs des objets typés par cette classe. En d'autres mots un objet existe par l'intermédiaire de ses attributs et se modifie uniquement par l'intermédiaire de ses méthodes.

Toute définition de classe inclut trois informations : d’abord, le nom de la classe, ensuite, ses attributs et leur type, enfin,
ses méthodes. Les classes sont représentées en UML par des rectangles:
la classe voiture correspondante en python s'écrit comme ceci:

class voiture:
  def __init__(self, marque, couleur, hauteur, longueur):
    self.marque = marque
    self.couleur = couleur
    self.hauteur= hauteur
    self.longueur= longueur
    self.vitesse = 0

  def accelerer(self, facteur):
    self.vitesse = self.vitesse + facteur

  def stop(self):
    self.vitesse = 0

Chaque objet voiture répond de sa classe, et ne doit qu'être modifié que par les méthodes qui y sont déclarées. Pour notre exemple, nous n’avons défini qu’accélérer et stop, mais il pourrait y en avoir bien d’autres comme tourner, avancer, reculer, etc. Il faudrait alors ajouter quelques attributs comme la position géographique de la voiture.

L'exécution des méthodes

Il faut pouvoir signaler à la méthode accélérer laquelle, parmi toutes les voitures possibles, est celui qu’il est nécessaire d’accélérer. Cela se fait par le simple appel de la méthode sur l’objet en question. Par exemple: maVoiture.accelerer(10). Nous appliquons donc la méthode accelerer() sur l’objet maVoiture. Dans cette instruction, c’est le point qui établit la liaison entre l’objet précis et la méthode à exécuter. Cela fonctionne, car la référence maVoiture possède l’adresse de l’objet et donc celle de l’attribut vitesse sur lequel la méthode accelerer() doit s’appliquer.

Exercices

  1. Écrivez une classe personne possédant au moins 5 attributs.
  2. Ajoutez une méthode incrémentant la valeur de l'age
  3. Ajoutez une méthode permettant de modifier les attributs.
  4. Ajoutez une méthode qui décrit la personne sur base de ses attributs
  5. Représentez cette classe à l’aide d’une méthode UML

les méthodes particulières

Le constructeur

Le constructeur est une méthode particulière, portant le même nom que la classe et qui est définie sans aucun retour. Il a pour mission d’initialiser les attributs d’un objet dès sa création. À la différence des autres méthodes qui s’exécutent alors qu’un objet est déjà créé et sur celui-ci, le constructeur n’est appelé que lors de la construction de l’objet.

Une version par défaut est toujours fournie par les langages de programmation. Cependant, dès qu’un constructeur est défini dans la classe, et pour autant qu’il reçoive un ou plusieurs argument(s), il ne sera plus possible de créer un objet en n’indiquant aucune valeur d’argument.

Une recommandation classique est d’éviter de se reposer sur le « défaut » et de toujours prévoir un constructeur pour chacune des classes créées, même s’il se limite à reproduire le comportement par défaut.
__init__(self, ...)

Le destructeur

Le destructeur est une méthode appelée automatiquement dès la destruction d’un objet. Cette méthode ne peut recevoir d’argument, car le programmeur n’est pas à l’origine de son appel. Elle est appelée juste avant la destruction de l’objet et sert à libérer certaines ressources référencées par celui-ci avant de le faire disparaître.
__del__(self)

Les méthodes de conversions

Étant donné que le Python n'est pas un langage typé, il est parfois souvent de forcer le type d'une variable à l'aide de la fonction int() afin d'effectuer des opérations mathématiques. Cette fonction int en réalité va appeler la méthode __int__(self) de l'objet concerné. Ainsi, lorsque vous effectuez int("42"), nous appelons en réalité cette dernière sur une classe string. Il existe également une méthode connexe: __float__(self)...

Notez qu'il est également possible de définir la méthode __str__(self) pour transformer vos objets en chaine de caractère. Cette dernière est particulièrement utile si vous souhaitez afficher votre objet à l'aide d'un print.

Les méthodes des opérateurs logiques

__eq__(self, o), __contains__(self, o)
__gt__(self, o), __lt__(self, o),
__le__(self, o), __ge__(self, o)

Les opérateurs mathématiques

__mul__(self, o), __add__(self, o), __sub__(self, o), __div__(self, o), __pow__(self, o), ...

Exercices

  1. Écrivez une classe Vector2D représentant un point dans un espace en deux dimensions (représentée par deux coordonnées x et y)
  2. Écrivez une méthode calculant la norme d'un vecteur √(x²+y²)
  3. Écrivez l'opérateur logique pour vérifier l'égalité entre deux vecteurs
  4. Écrivez l'opérateur mathématique permettant de soustraire deux vecteurs
  5. Écrivez une méthode permettant de calculer la distance entre deux vecteurs (La norme de A-B)

Les variables partagées entre les classes

class voiture:
  compteur = 0
  def __init__(self):
    compteur = compteur + 1
  def __del__(self):
    compteur = compteur - 1
Last Author
kossolax
Last Edited
Mar 31 2021, 6:58 PM

Event Timeline

kossolax changed the title from Class to Les classes.Feb 21 2021, 12:23 PM
kossolax created this object.
kossolax edited the content of this document. (Show Details)
kossolax edited the content of this document. (Show Details)
kossolax edited the content of this document. (Show Details)
kossolax edited the content of this document. (Show Details)
kossolax edited the content of this document. (Show Details)
kossolax edited the content of this document. (Show Details)