Referencia (informática)

Una referencia, en términos informáticos, es un indicativo hacia un objeto. Al igual que el puntero, una referencia es un alias para una entidad, en otras palabras, una variable cualitativa que contiene la dirección de otra variable cualitativa. En contraposición en los punteros explícitos, la dirección no se puede alterar y está oculta. Por ello, operaciones con la dirección (conocido como aritmética de punteros), a menudo fuente de errores, no son posibles. Las referencias se utilizan para pasar parámetros, cuando por medio de una subrutina, los valores de un objeto se han de cambiar de forma continua.

En el lenguaje de programación Java se distingue entre referencias fuertes y blandas. Dado que en este caso los objetos no se eliminan de forma explícita para devolver la memoria disponible, de esta tarea se encarga el recolector de basura de forma implícita. Un objeto que no se ha referenciado de forma fuerte, puede ser eliminado por el recolector de basura, incluso aunque tenga referencias blandas. Las referencias blandas son, por ejemplo, para la implementación de un búfer de datos.

Ejemplo en C++

1. Funcionamiento de una referencia

int nOriginal = 5;
int& nReferencia = nOriginal; // Se crea un objeto de referencia // la referencia apunta al original // 
nReferencia = 20; // se asigna a la referencia, y por consiguiente al original, el valor 20
int nCopia = nOriginal; // nCopia = 20

2. Ejemplo en el que se pasa un parámetro como referencia, conocido como Call by reference.

int cuadrar(int& valor) { // Definición de la función
    valor = valor * valor;
    return valor;
}

int main() {
    int nNumero = 5;
    cout << cuadrar(nNumero) << endl;          // Llamada de la función - entonces nNumero == 25
    return 0;
}

Se trabaja con las variables originales, independientemente de si el nombre de la variable en la función es idéntico con el nombre de las variables que se llaman.

3. Ejemplo de referencias de objetos

Bank& nBanco = DirectorioBancos::nachBLZ("76543210"); // se crea una referencia a un objeto de banco
Konto& nCuenta1 = nBanco.accesoCuenta("1234567"); // se crea un referencia a un objeto cuenta determinado
Konto& nCuenta2 = nBanco.accesoCuenta("1111111"); // se crea una referencia adicional a otro objeto cuenta
nCuenta1.alineacion(100.00, "EUR", nCuenta2); // Un método llama a nCuenta1

Las referencias nBanco, nCuenta1 y nCuenta2 referencian a un objeto distinto. El símbolo & describe estas variables como referencias para el lenguaje de programación.

Ejemplo en Pascal

1. Se pasa by reference (se cambia el valor de las variables que se han pasado):

function cuadra(var valor: integer): integer;
begin
    valor := valor * valor;
    cuadra:= valor;
end;

A esta rutina solo se le puede pasar una variable, ninguna expresión. 'valor' es el nombre local de las variables que se pasan como referencia; con la asignación de un valor se cambia de forma directa el contenido de las variables pasadas.

2. Se pasa by value (es decir, sólo el valor, no la propia variable; el valor de la variable pasada no se cambia):

function cuadrat(valor: integer): integer;
begin
    Resultado := valor * valor;
end;

Incluso aunque se diear una asignación a 'valor', ésta no cambiaría el contenido de una variable pasada: sólo se pasa el valor; el descriptor 'valor' es una variable local, que sólo es válida dentro de la función.

Enlaces externos