Forum Clubic

[C++]Attributs publics ou getters?

Bonjour, j’ai une question un peu bêbête.

J’ai une Classe1 qui agrège une Classe2. Cette dernière possède pour attribut (privés) plusieurs std::map de taille importante (plusieurs dizaines voire quelques centaines de milliers d’éléments).
Des méthodes de ma Classe1 ont besoin d’accéder au contenu de ces maps. Comme ces maps sont de très grande taille, j’hésite à passer par un accesseur en lecture (recopie de dizaines de milliers d’éléments, bofbof).

Je soumets le problème à un collègue qui me dit que les getters ne servent à rien :heink: , que d’ailleurs, sur le projet en cours, il y’en avait très peu puisque 90% des attributs des classes étaient déclarés avec le statut public. :ouch:

Questions : est-ce vraiment être trop strict que de structurer ses données? Et que puis-je faire pour accéder à mes maps à partir de Classe1?

Merci. :slight_smile:

A priori, si tu indique bien que la propriété est constante (pas forcément son contenu), y a déjà moins de danger à mettre les dîtes propriétés en publique.

Du moins, c’est ce que je pense.

Maintenant pour être propre, les getters sont conseillés, c’est sûr. par contre, me poserais des questions sur le pourquoi tu as autant de variables?

Y a peut-être de la réflexion à faire derrière pour rendre tes objets plus petits…

(combien exactement?)

(sinon le D c’est bien :D)

Le nombre de données à mémoriser ne dépend pas de moi. Je parcours une série de fichiers xml et je stocke uniquement les attributs qui m’intéressent dans 5 ou 6 maps différentes. Les fichiers xml qui me sont envoyés et leur contenu ne dépendent pas de moi, je ne fais que les utiliser.

Tu parles de mettre mes maps en const? C’est pas possible. Lorsque je lance ma moulinette qui parcours ces fichiers xml, je remplis mes maps. :neutre: Donc je ne peux les mettre en const. :confused:

Bonjour,
j’ai du mal à comprendre: c’est la Map qui contient plusieurs milliers d’éléments, ce ne sont pas des attributs, donc tu devrais avoir un seul “getter” get(String attributeName) qui en fait “délègue” le get sur la Map.

C’est plus propre parce que tu rajoute une couche d’abstraction, qui te permettrait d’ajouter du traitement sur le get, ou de changer la forme de la Map, ajouter un cache etc… sans changer l’utilisation de la classe.

maintenant en Java, c’est vrai qu’on nous fait tout mettre en protected, même pour le “Bean” qui ne sont que de structure de stockage, donc la règle est aucun attribut public, sauf pour des constantes (en Majuscules)

Oui, tout à fait, je suis parti sur cette voie là. :slight_smile:
Ca se passe vraiment tellement bizarrement à mon boulot que j’en perds mon latin. :??: :pt1cable:
Merci pour la confirmation et les explications. :slight_smile: