Programmation • IoT

Résumé : Chap 2 – L’encapsulation

Ce chapitre a pour objectif d’approfondir l’encapsulation en construisant progressivement une classe représentant un vecteur dans le plan.

Une première version de la classe expose directement les composantes x et y. Cette solution est simple, mais elle permet à toutes les parties du programme de consulter et de modifier librement la représentation interne de l’objet.

Le problème ne réside pas seulement dans le risque d’enregistrer des valeurs invalides. Des membres publics rendent également le programme dépendant des noms et de l’organisation interne des données.

L’encapsulation consiste à rendre cette représentation privée et à proposer une interface publique composée uniquement des opérations utiles aux utilisateurs de la classe.

Le constructeur permet de fournir les composantes lors de la création du vecteur, tandis que les getters autorisent leur consultation sans donner d’accès direct aux membres privés.

Le chapitre souligne qu’il n’est pas nécessaire d’ajouter automatiquement un setter pour chaque donnée privée. L’interface d’une classe doit être conçue selon les opérations pertinentes et non comme une simple reproduction publique de son contenu interne.

La classe est ensuite enrichie avec des méthodes réalisant des opérations vectorielles, notamment l’addition de deux vecteurs, le calcul de la norme, le produit scalaire et la construction d’un vecteur unitaire.

Ces exemples montrent qu’une méthode peut recevoir un autre objet de la même classe et accéder à ses membres privés. Le mot-clé private limite l’accès au niveau de la classe, et non entre ses différentes instances.

Les références constantes permettent de transmettre efficacement un autre vecteur sans le copier ni autoriser sa modification. Le mot-clé const placé après une méthode garantit parallèlement que l’objet qui appelle cette méthode ne sera pas modifié.

Certaines opérations construisent un nouvel objet sans changer leurs opérandes, tandis que d’autres retournent un nombre. Le type de retour doit donc correspondre à la nature du résultat mathématique obtenu.

Le chapitre explique également qu’une information calculable, comme la norme ou la direction, ne doit pas nécessairement être enregistrée dans l’objet. Son stockage créerait une donnée redondante qu’il faudrait maintenir en accord avec les composantes.

La notion de précondition est enfin introduite avec le calcul du vecteur unitaire. Cette opération exige un vecteur non nul, car une division par une norme égale à zéro serait impossible.

Le but général est donc d’apprendre à séparer la représentation interne d’un objet de la manière dont il est utilisé, afin de concevoir des classes cohérentes, évolutives et dotées d’une interface claire.