enero 09, 2011

Múltiples referencias al mismo objeto (Referencias entre objetos)

Definción de referencia: Una referencia es un valor en tiempo de ejecución que está: o vacío o conectado.

Caso ejemplo:
Tenemos una clase que nos permite almacenar libros, es así que un libro se compone de la siguiente información:


-Titulo
-Año de publicación
-No paginas
-Autor
-Fecha Nacimiento
-Pais de Origen


De tal modo que cuando necesitamos crear más de un objeto Libro para los cuales se trata del mismo autor se veria de la siguiente forma:




Asi que por ello es la referencia entre objetos, es decir; en el objeto Libro habrá un apuntador que referncia al objeto Autor:






En el Diagrama de Clases lo podemos ver en la navegación, en donde la clase Libro tiene un apuntador a la case Autor:


Y en la implemantación en C# como una aplicación de consola:

using System;
class Libro
{
public string Titulo;
public Int16 AñoPublicacion;
public Int16 NoPaginas;
public Autor AutorLibro; //esta es la variable para hacer la refencia la objeto Autor
}

using System;
class Autor
{
public string Nombre;
public string FechaNacimiento;
public string PaisOrigen;
}

Y el programa cliente que hace uso de las clases y las relaciona através de referencias entre objetos:

using System;
class Program
{
static void Main(string[] args)
{
//creamos 2 libros que tienen mismo autor
Libro Libro1 = new Libro();
Libro1.Titulo = "Ensayo de la ceguera";
Libro1.AñoPublicacion = 1998;
Libro1.NoPaginas = 234;

Libro Libro2 = new Libro();
Libro2.Titulo = "El Evangelio Segun Jesucristo";
Libro2.AñoPublicacion = 1992;
Libro2.NoPaginas = 334;

//genereamos el autor
//Cuando se realiza una instancia de una clase (mediante new) se reserva en la memoria un espacio
//para un conjunto de datos como el que definen los atributos de la clase que se indica en la instanciación.
//A este conjunto de variables se le denomina variables de instancia.
Autor Autorlibro = new Autor();
Autorlibro.Nombre = "José Saramago";
Autorlibro.FechaNacimiento = "22/07/1948";
Autorlibro.PaisOrigen = "Portugal";

//Los 2 libros los escribió el mismo autor de tal modo que la referencia es al mismo objeto autor.
//las variables AutorLibro de cada Libro apuntan ambas al mismo Autor que es la variable de instancia creada arriba con new.
Libro1.AutorLibro = Autorlibro;
Libro2.AutorLibro = Autorlibro;

//Ahora vamos a imprimir los libros con su respectivo autor para identificar que se trata del mismo.
Console.WriteLine("Impresión del libro 1:");
Console.WriteLine("Titulo: " + Libro1.Titulo);
Console.WriteLine("Año de Publicación: " + Libro1.AñoPublicacion);
//ahora exponemos los datos del autor que apuntan desde el objeto libro al objeto autor.
Console.WriteLine("Autor : " + Libro1.AutorLibro.Nombre);
Console.WriteLine("Fecha de Nacimiento : " + Libro1.AutorLibro.FechaNacimiento);
Console.WriteLine("Pais de Origen: : " + Libro1.AutorLibro.PaisOrigen);

Console.WriteLine("");
Console.WriteLine("Impresión del libro 2:");
Console.WriteLine("Titulo: " + Libro2.Titulo);
Console.WriteLine("Año de Publicación: " + Libro2.AñoPublicacion);
//ahora exponemos los datos del autor que apuntan desde el objeto libro al objeto autor.
Console.WriteLine("Autor : " + Libro2.AutorLibro.Nombre);
Console.WriteLine("Fecha de Nacimiento : " + Libro2.AutorLibro.FechaNacimiento);
Console.WriteLine("Pais de Origen: : " + Libro2.AutorLibro.PaisOrigen);
Console.WriteLine("");
Console.WriteLine("Enter para terminar");
Console.ReadLine();//espera un Enter para continuar.
}
}
La salida:


Y asi, si el mismo autor tiene 100 libros todos los objetos Libro tendrán una refencia al mimo objeto Autor. Y este mismo esquema aplica para muchos casos por ejemplo tenemos muchas Facturas expedidas al mismo Cliente, no tenderemos un objeto Cliente por cada objeto Factura, habrá muchas Facturas todas apuntando al mismo Cliente.

No hay comentarios.: