UKOnline

Objet et état

Jusqu'à présent, on a déjà pu voir et utiliser plusieurs types de données différents, partant de simples nombres et booléens, jusqu'à des types permettant de stocker des collections d'éléments (listes, chaines de caractères, tuples, intervalles, ensembles et dictionnaires).

Tuple nommé

On a également vu les tuples nommés qui permettent de rassembler plusieurs variables en leur associant à chacune un nom, il s'agit des champs du tuple nommé. Voici, par exemple, une définition d'un nouveau tuple nommé permettant de représenter un vecteur dans le plan :

La seconde instruction définit un nouveau type de tuple nommé, dont le nom est Vector, constitué de deux champs nommés x et y. À partir de cette définition, on peut créer des tuples nommés représentant des vecteurs dans le plan :

Le tuple nommé permet donc de stocker des données de manière organisée, avec des champs qui possèdent un nom. On peut, par exemple, afficher les coordonnées du vecteur en accédant aux champs. Afin d'avoir un joli affichage, on va construire une chaine de caractères par concaténation, en n'oubliant pas la conversion en str :

Si on veut également afficher l'autre vecteur, on pourrait simplement dupliquer cette instruction, en remplaçant les u par des v. Néanmoins, comme on l'a déjà vu, ce n'est pas une bonne pratique. Lorsqu'on doit répéter du code qui varie légèrement, une bonne pratique consiste à définir une fonction. Voici une fonction vector2string qui renvoie une chaine de caractères à partir d'un vecteur :

Maintenant que la fonction est définie, on va pouvoir l'appeler autant de fois que l'on souhaite, pour afficher joliment nos vecteurs. Voici deux appels à cette fonction, avec le résultat produit lors de l'exécution :

(1, -1)
(2, 1)

Dans l'exemple que l'on vient de voir, on a donc associé des données sous forme d'un tuple nommé, et on a défini des fonctions permettent d'effectuer des opérations sur ces dernières. C'est exactement cette association qui est à la base de la programmation orientée objet, concept sur lequel le langage Python a été construit.

Objet

Qu'est-ce-qu'un objet ? Un objet est une entité qui possède des caractéristiques et qu'on va pouvoir manipuler. On peut faire un parallèle immédiat avec les objets du monde réel.

Prenons, par exemple, l'objet GSM (pour être précis, on devrait dire téléphone mobile puisque GSM désigne une norme, mais ce dernier terme est abusivement utilisé pour désigner le téléphone), qui possède une certaine marque, un modèle, un numéro de série, une couleur, un niveau de charge de la batterie, un niveau de luminosité de l'écran, etc. Ces différentes caractéristiques sont appelées attributs de l'objet. Pour un objet donné, chaque attribut possède une valeur, dont l'ensemble définit l'état de l'objet. La figure 1 montre deux objets de type GSM, avec leurs cinq attributs et valeurs associées.

Deux objets GSM
Un objet possède un type (GSM dans cet exemple) et est caractérisé par un état propre, défini par les valeurs de ses attributs.

Alors que les attributs sont communs aux deux GSMs, les valeurs de ces derniers peuvent être différentes. Mais comme on peut le constater sur cet exemple, plusieurs attributs peuvent également avoir les mêmes valeurs (la marque et le modèle, dans cet exemple).

En plus des attributs, un objet offre toute une série de fonctionnalités. On peut, par exemple, effectuer et recevoir un appel, envoyer un SMS, écouter un fichier MP3, consulter le niveau de charge de la batterie, prendre une photo, jouer à un jeu, etc. Il s'agit d'opérations qui vont être appliquées à un objet.

Pour résumer, un objet est une entité qui possède des attributs et propose des fonctionnalités. Chaque objet est unique et possède son état propre, qui est défini par les valeurs de ses attributs.

Objet en Python

Python est, entre autre, un langage de programmation orienté objet. On manipule dès lors déjà des objets depuis le début, sans vraiment le savoir. Par exemple, les listes, les chaines de caractères et les ensembles sont des objets. Lorsqu'on crée un objet, les trois éléments illustrés sur la figure 2 existent :

  • l'objet, c'est-à-dire les valeurs de ses attributs, est en mémoire ;
  • une variable, du même type que l'objet, est déclarée et initialisée ;
  • une référence vers l'objet est stockée dans la variable.

L'instruction suivante crée un nouvel ensemble contenant six nombres entiers représentant les valeurs des faces d'un dé :

Un ensemble est un objet de type set, qui stocke les valeurs des six faces du dé. Une référence vers cet objet est stocké dans la variable dice, dont le type est le même que celui de l'objet, à savoir set.

Objet set en mémoire
Un objet se trouve en mémoire et on peut le manipuler à l'aide d'une variable qui contient une référence vers celui-ci.

En réalité, tout est objet en Python. D'autres types d'objets qu'on a déjà vu sont donc les nombres entiers et flottants et les booléens.