miércoles, 29 de agosto de 2007

Relación de agregación vs Composición II

Vamos a ver en esta ocasión las relaciones de agregación y composición tal y como se codifican. Lo vamos a hacer en php aunque la calidad de este lenguaje es inversamente proporcional a su popularidad.

Veamos el código:

class A
{
function Ver()
{
echo "Hola"."\n";
}
}

class B
{
private $InstanciaA;
function Ver()
{
$InstanciaA = new A;
$InstanciaA->Ver();
}
}

class C
{
function Ver($InstanciaA)
{
$InstanciaA->Ver();
}
}

$InstanciaA = new A();
$InstanciaB = new B();
$InstanciaC = new C();

$InstanciaB->Ver();
$InstanciaC->Ver($InstanciaA);
$InstanciaA->Ver();


Tenemos tres clases A, B y C , como ven no me he matado eligiendo los nombres. Las relaciones que se dan entre ellos son las siguientes:
Entre A y B hay una relación de composición. El tiempo de vida de la instancia $InstanciaA está limitado por el tiempo de vida de la instancia que lo contiene.
Entre A y C hay una relación de agregación. El tiempo de vida de la instancia $InstanciaA no está limitado por el tiempo de vida dela instancia que hace uso de él.

Si ejecutásemos el script mediante "php test.php" el resultado sería el siguiente:
Hola
Hola
Hola

Tan cordial salida es debida a que la $InstanciaB hace uso de la $InstanciaA para ejecutar la salida por pantalla, una vez termina el tiempo de vida de $InstanciaB ambas desaparecen.
El segudo 'Hola' viene dado por la $InstanciaC que usa la $InstanciaA para la producir la salida , el último saludo proviene de $InstanciaA que ha sobrevivido a $InstanciaC.

No hay comentarios: