Outils pour utilisateurs

Outils du site


cours:informatique:dev:golang:demarrer_avec_go:115_objets

Notes et transcriptions du cours “Démarrer avec Go” proposée par University of California, Irvine disponible sur la plateforme coursera.

Objets

Le langage Go est donc orienté objet, mais disons faiblement orienté objet. Ce que je veux dire par là, c'est qu'il implémente des objets mais qu'ils ont peut-être moins de fonctionnalités que ce que vous pourriez voir dans un autre langage orienté objet comme Python, Java ou C++.

Je vais donc résumer très brièvement ce que sont les langages orientés objet, ce qu'est la programmation orientée objet, afin de mettre en évidence certaines des différences dans l'implémentation de Go.

La programmation orientée objet c'est un paradigme qui se traduit concrètement par une organisation du code. Vous organisez donc votre code en l'encapsulant. Vous regroupez des données et des fonctions liées les unes aux autres.

C'est donc essentiellement ce qu'est un type. Ainsi, la programmation orientée objet vous permet essentiellement de créer vos types, spécifique à l'application que vous créez. Parmi les types classiques, vous avez des nombres entiers, des flottants, ce genre de choses. Ils sont génériques. Vous pouvez les utiliser dans n'importe quel type de programme. Mais lorsque vous créez une application spécifique, vous souhaiterez peut-être avoir un type spécifique à ce domaine d'application. Vous pouvez le créer avec la programmation orientée objet.

Si on s’intéresse à un type standard, comme un entier, il contient des données : le nombre, la valeur du nombre. Il contient également des fonctions, les fonctions que vous pouvez appliquer aux données. Vous pouvez donc appliquer des additions, des soustractions, des multiplications, ce genre de choses. Ainsi, un type contient des données et possède un ensemble de fonctions que vous pouvez appliquer aux données.

La programmation orientée objet est donc la même idée. Vous créez des types. Mais ils sont plus compliqués, ils peuvent être plus compliqués et ils sont spécifiques à votre application.

Par exemple, supposons que vous créez une application qui fera de la géométrie, une sorte d'opérations géométriques en 3D. Ainsi, la plupart des fonctions que vous allez écrire vont opérer sur des points. Vous allez avoir cette idée des points parce que vous faites de la géométrie 3D. Des données seront associées à chaque point, notamment des coordonnées x, y et z. Vous voudrez peut-être y mettre d'autres données, mais au moins, vous aurez ces coordonnées x, y, z parce que vous allez gérer un espace 3D. Les points auront également un ensemble de fonctions, un ensemble de fonctions que vous pourrez utiliser pour opérer sur des points. Donc, distance par rapport à l'origine, peut-être que chaque point a une distance par rapport à son origine. Vous pouvez avoir une fonction qui calcule cela. Quadrant, il vous indique quel quadrant. Peut-être que cela renvoie le quadrant dans lequel se trouve le point etc. Vous pouvez imaginer de nombreuses fonctions qui fonctionnent sur des points.

Donc, si je pense à cette idée de points, j'ai un tas de données que je veux relier entre elles. Je souhaiterais que les variables x, y et z pour un point particulier soient associées d'une manière ou d'une autre. J'aimerais également que ces fonctions qui opèrent sur des points soient également associées à cela. Ainsi, dans les langages orientés objet classiques, vous avez cette idée d'association via la classe.

Notons dès à présent que Go n'utilise pas ce terme de classe. Mais j'en parle parce qu'il est utilisé dans d'autres langages orientés objet et que les gens connaissent peut-être cette idée. Cette classe définit toutes les données qui se trouveraient à l'intérieur d'un point. Donc, x, y et z, avec par exemple des valeurs à virgule flottante. La classe définirait toutes les fonctions associées aux points, la distance par rapport à l'origine, le quadrant, etc. Un objet est alors une instanciation de la classe. Je peux donc créer ma classe de points, mais je pourrais avoir de nombreux points réels différents avec des valeurs de données réelles à l'intérieur. Donc, si j'ai un triangle, j'ai trois points avec trois ensembles de valeurs x, y et z. Donc, je pourrais avoir cette classe de points qui est en quelque sorte un modèle général de point, mais ensuite les objets points, mon objet à trois points, auront des valeurs réelles pour x, y, z et ainsi de suite.

C'est la terminologie que vous utilisez normalement, les classes et les objets qui sont des instances de cette classe. Différents langages l'emploie : les très populaires Java, Python, C++, etc.

En Go, nous n'utilisons pas ce terme classe, mais plutôt des structures (structs). Les structures remontent à C et sont probablement antérieures à cela. Mais l'idée d'une structure est qu'une structure n'est composée que de données. Il s'agit donc des différents types de données que vous souhaitez associer.

Pour reprendre notre classe de points, vous auriez une structure ponctuelle avec un x, un y et un z, peut-être que ce sont les trois virgules flottantes. Ainsi, seules les données sont liées entre elles. Mais vous pouvez également associer des fonctions à ces structures. Ainsi, la structure finit par ressembler à ce que vous appelleriez une classe dans un langage orienté objet classique.

Vous avez donc les structures contenant des données, des champs de données associés et des méthodes que vous souhaitez définir.

L'implémentation des structures par Go est simplifiée par rapport à l'implémentation traditionnelle des classes :

  • Vous n'avez pas d'héritage ;
  • Vous n'avez pas de constructeurs ;
  • Vous n'avez pas de généricité, rien de tout cela.

On peut dire que cela facilite le codage et le rend efficace à exécuter. Donc, il fonctionne généralement plus vite. Mais cela peut faciliter le codage à moins que vous n'aimiez ces fonctionnalités. Maintenant, si vous voulez l'héritage, les génériques et les constructeurs. Alors, vous pouvez voir que c'est un inconvénient. Mais Go est différent. Il comporte des objets mais est différent de l' implémentation orientée objet traditionnelle et d'une implémentation orientée objet linéaire.

◁ Précédent | ⌂ Retour au sommaire | Suivant ▷

cours/informatique/dev/golang/demarrer_avec_go/115_objets.txt · Dernière modification : 2024/05/02 19:07 de yoann