Comment Ca Marche - Communauté informatique  
   
Accueil - Encyclopédie informatiqueTélécharger l'encyclopédieContribuer à cet article

Langage C++ - Accesseurs et mutateurs

Accesseurs et mutateurs Encyclopédie


La protection des données membres

L'un des aspects les plus essentiels du concept « orienté objet » est l'encapsulation, qui consiste à définir des étiquettes pour les données membres et les fonctions membres afin de préciser si celles-ci sont accessibles à partir d'autres classes ou non...

De cette manière, des données membres portant l'étiquette private ne peuvent pas être manipulées directement par les fonctions membres des autres classes. Ainsi, pour pouvoir manipuler ces données membres, le créateur de la classe (vous en l'occurrence) doit prévoir des fonctions membres spéciales portant l'étiquette public, permettant de manipuler ces données.

  • Les fonctions membres permettant d'accéder aux données membres sont appelées accesseurs, parfois getter (appellation d'origine anglophone)
  • Les fonctions membres permettant de modifier les données membres sont appelées mutateurs, parfois setter (appellation d'origine anglophone)

La notion d'accesseur

Un accesseur est une fonction membre permettant de récupérer le contenu d'une donnée membre protégée. Un accesseur, pour accomplir sa fonction :

  • doit avoir comme type de retour le type de la variable à renvoyer
  • ne doit pas nécessairement posséder d'arguments

Une convention de nommage veut que l'on fasse commencer de façon préferrentielle le nom de l'accesseur par le préfixe Get, afin de faire ressortir sa fonction première.

La syntaxe d'un accesseur réduit à sa plus simple expression ressemble donc à ceci :

class MaClasse{
	private :
		TypeDeMaVariable MaVariable;

	public :
		TypeDeMaVariable GetMaVariable();

};

TypeDeMaVariable MaClasse::GetMaVariable(){
	return MaVariable;

}

Sur l'exemple précédent, l'accesseur minimal de la donnée membre age pourrait être le suivant :

class Toto{
	private :
		int age;

	public :
		int GetAge();

};

int Toto::GetAge(){
	return age;

}

La notion de mutateur

Un mutateur est une fonction membre permettant de modifier le contenu d'une donnée membre protégée. Un mutateur, pour accomplir sa fonction :

  • doit avoir comme paramètre la valeur à assigner à la donnée membre. Le paramètre doit donc être du type de la donnée membre
  • ne doit pas nécessairement renvoyer de valeur (il possède dans sa plus simple expression le type void)

Une convention de nommage veut que l'on fasse commencer de façon préferrentielle le nom du mutateur par le préfixe Set.

La syntaxe d'un mutateur réduit à sa plus simple expression ressemble donc à ceci :

class MaClasse{
	private :
		TypeDeMaVariable MaVariable;

	public :
		void SetMaVariable(TypeDeMaVariable);

};

MaClasse::SetMaVariable(TypeDeMaVariable MaValeur){
	MaVariable = MaValeur;

}

Sur l'exemple précédent, le mutateur minimal de la donnée membre age pourrait être le suivant :

class Toto{
	private :
		int _age;

	public :
		void SetAge(int);

};

void Toto::SetAge(int age){
	_age = age;

}

L'intérêt principal d'un tel mécanisme est le contrôle de la validité des données membres qu'il procure. En effet, il est possible (et même conseillé) de tester la valeur que l'on assigne à une donnée membre, c'est-à-dire que l'on effectue un test de validité de la valeur de l'argument avant de l'affecter à la donnée membre. Le mutateur ci-dessus peut par exemple vérifier si l'âge de Toto est correct (on considérera pour cela que Toto ne peut pas vivre plus de 200 ans... c'est avec des hypothèses telles que celle-ci que peuvent apparaître des bogues... ah les progrès de la génétique !).

class Toto{
	private :
		int _age;

	public :
		int SetAge(int);

};

int Toto::SetAge(int age){
	if (age < 200) {
	 	_age = age;

		return 1;

	}
	else return 0;

}

Trucs & astuces pertinents trouvés dans la base de connaissances

09/01 20h26 C/C++ Erreur de segmentation (Langage C)
30/11 22h37 Comment débuter, quel langage? (Langages)
15/11 02h50 Langage informatique=Langage de programmation (Mythes et légendes)
21/09 09h44 Critères de choix d'un langage/framework (Programmation)
21/01 03h06 Envoyer un mail avec pièce jointe (Langages)
22/11 23h49 Ecrire en alphabet arabe (Windows)
04/11 15h50 Rediriger en fonction de la langue du visiteur (PHP)
Langage C++ Plus d'astuces sur « Langage C++ »

Discussions pertinentes trouvées dans le forum

29/03 02h24 barre langues affichage [barre de langues] probleme d'affichage Windows 14/02 10h21->rafik46
15/09 20h11 suse langue Suse langue Linux/Unix 21/09 17h31->Yoan27
28/12 12h44 ajouter langue arabe clavier français ajouter une langue arabe au clavier français Windows 21/02 23h50->marouen26
03/06 12h59  [Forum] Langage SMS Suggestions 12/06 02h18->Clarckos16
20/11 14h20 choix langage base donnée projet Choix d'un langage+base de donnée pour projet Développement 21/11 21h12->sebsauvage14
30/03 09h35 langage pointeurs liste. Langage C pointeurs, creation de liste. Développement 08/04 00h34->mamiemando12
03/09 02h58 langage remplacer for if [langage C] comment remplacer[for] par [if] Développement 05/09 23h07->mamiemando12
16/02 12h22 langage c jeu [Langage C] Jeu Développement 16/02 20h28->UNIX/VI/SHELL11
06/04 17h39 logiciel xsd xml gui quel langage [Logiciel XSD XML avec GUI]Quel langage Développement 08/04 13h42->sebsauvage9
28/06 15h02 quel language choisir quel language choisir ?? Développement 29/06 18h42->sebsauvage9
Discussion fermée Problème résolu Langage C++ Plus de discussions sur « Langage C++ »

Ce document intitulé « Langage C++ - Accesseurs et mutateurs » issu de l'encyclopédie informatique Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.