Référence (programmation)

Un article de Wikipédia, l'encyclopédie libre.
(Redirigé depuis Référence (informatique))
Aller à : navigation, rechercher
Page d'aide sur l'homonymie Pour les articles homonymes, voir Référence.

En programmation, une référence est une valeur qui permet l'accès en lecture et/ou écriture à une donnée située soit en mémoire principale soit ailleurs. Une référence n'est pas la donnée elle-même mais seulement une information de localisation. La plupart des langages de programmation permettent l'utilisation de références, que ce soit de façon explicite ou implicite.

Utilisation[modifier | modifier le code]

Généralement, les références sont utilisables via des types de données disjoints du type de la donnée référencée (quand le langage dispose d'un système de typage). Le typage des références permet de manipuler les données référencées de manière abstraite tout en respectant leurs propres contraintes de type.

Le type de référence le plus simple, mais aussi le moins encadré, est le pointeur. Il s'agit simplement d'une adresse mémoire.

Les références sont souvent vues comme de simples noms identifiant une donnée. Plusieurs noms peuvent référencer la même donnée, ce qui peut provoquer des effets de bords indésirés. Le plus classique consistant à libérer l'objet sans invalider ses références, entraînant souvent lors de leur future utilisation une erreur de segmentation.

Exemple[modifier | modifier le code]

En C++, les références sont déclarées avec le nom de la variable suivi du suffixe &. Une référence est utilisée comme une variable classique, sauf que ses données sont contenues dans la variable qu'elle désigne. Elle est donc plus simple à utiliser que les pointeurs.

// Fonction "incrémenter_ref", reçoit une référence sur un entier(int) qui est incrémenté de 1.
void incrémenter_ref(int& ref)
{
ref++;
}
 
// Fonction "incrémenter_ptr", reçoit un pointeur sur un entier(int), qui est incrémenté de 1.
void incrémenter_ptr(int * ptr)
{
(*ptr)++;
}
 
// Fonction main
int main()
{
// Version avec une référence
int a = 5;
incrémenter_ref(a); // a vaut 6
 
// Version avec un pointeur
int b = 5;
incrémenter_ptr(&b); // b vaut 6
}

Disparition[modifier | modifier le code]

De la même manière les références peuvent être supprimées, l'objet non référencé devient alors inaccessible (quel que soit son type). On parle alors de fuite de mémoire dans le cas où le langage n'offre pas un mécanisme de type ramasse-miettes.

En conception de base de données, une référence est une contrainte statique qui assure qu'un attribut X d'une relation A référence (pointe vers) un attribut Y d'une relation B, ce qui revient à dire que X ne peut prendre une valeur V que si au moins un des attributs Y a pour valeur V. On appelle ça une contrainte de référence, et X est alors une clé étrangère dans la relation A.

Notes et références[modifier | modifier le code]