Está en la página 1de 41

Agregación, Composición:

Implementación en Java
V5.0
Junio 2014
Ferreiras

Ferreiras Agregación, Composición: Implementación en


Java 1
Agregación,
• Cuando una clase A contiene referencias a
una clase B, cuyas instancias existen y
son accesibles fuera de dicha clase A,
decimos que A es una agregación de B.

• Por Ejemplo:

Persona 0..1
Celular

Un objeto Persona puede tener cero o un objeto Celular.

Ferreiras Agregación, Composición: Implementación en


Java 2
Agregación,

Pedido Carro
- unMotor: Motor - unMotor: Motor
- unaRueda: Rueda[4]

4
Motor Rueda

Ferreiras Agregación, Composición: Implementación en


Java 3
Agregación,
• En la agregación el objeto contenido
existe fuera del objeto contenedor, es
pasado a este ultimo como un argumento
en su construcción.
• Por ejemplo, Persona -- Carro:
El Carro es creado en un contexto
diferente y entonces se convierte
en una propiedad de Persona

Ferreiras Agregación, Composición: Implementación en


Java 4
/*
Agregacion0.java

Ferreiras / Java / Relaciones entre clases / agregación

Agregación

La agregación es una relación del tipo "tiene-un(a): Un conjunto tiene-una parte

En la relación de agregación, la vida útil de la parte no es administrado por el conjunto.

Es una forma especializada de asociación donde todo objeto tiene su propio ciclo de vida
y el objeto que es parte puede que pertenece a otro conjunto.

Tomemos un ejemplo de la empresa y el empleado.

Como puede verse, la empresa no gestiona el tiempo de vida del empleado. Si se destruye la
empresa, todavía existe Empleado. Este escenario mapea bastante bien con el mundo real.

Un solo empleado puede pertenecer a múltiples compañías (El trabajo a tiempo parcial), si borramos
la Compañía, el empleado no será eliminado, seguirá vivo.

Otro ejemplo:

Supongamos que en una universidad de un solo profesor puede pertenecer a varios departamentos.
Esa es su regla de negocio. Si el departamento de CS es eliminado, no se eliminan sus profesores!

*/
Agregacion0.java

En notación UML

Empresa 1..
Empleado

Modela una agregación en la cual solo a Epresa le interesa saber de


Empleado.

A Empleado no le interesa saber de Empresa, en este modelo.

Veamos, a continuación, el código Java que implementa este modelo.


Agregacion0.java

import java.util.Vector;

class Empleado {

private String nombre;

public Empleado( String nombre) {


this.nombre = nombre;
} Es la forma de
implementar una
public String getNombre() { return nombre; } agregación en Java
}

class Empresa { Para poder enviar a


Empresa los
private String nombre;
public Vector<Empleado> listaEmpleados;
Empleado, al momento
de su creación.
public Empresa(String nombreEmpresa, Vector<Empleado> empleados) {
this.nombre = nombreEmpresa;
listaEmpleados = empleados;
}

public void verListaEmpleados() {


System.out.println("\nEn la empresa " + nombre + " Mis empleados son:\n");
for( int i = 0 ; i < listaEmpleados.size(); ++i ) {
System.out.println( listaEmpleados.get(i).getNombre() );
}
}
}
Ferreiras Agregación, Composición: Implementación en
Java 7
Agregacion0.java

// Tester class

public class Agregacion0 {


public static void main( String[ ] fofi) {

// preparar lista de objetos Empleado


Vector<Empleado> listaEmpleados = new Vector<Empleado> ();
// agragamos empleados a la lista
listaEmpleados.add(new Empleado("Wilfredo Mojica") );
listaEmpleados.add(new Empleado("Raul Mateo"));
listaEmpleados.add(new Empleado("Leoncio Martinez"));
listaEmpleados.add(new Empleado("Kleto Ferrer"));
// Se crea el objeto Empresa y se le pone la lista de empleados
Empresa objEmpresa = new Empresa("4V&F, S.R.L.", listaEmpleados);
// vemos los empleados en la empresa
objEmpresa.verListaEmpleados();
// borramos el objeto empresa, objEmpresa
objEmpresa = null; // empresa eliminada
// Los objetos empleados no son eliminados
System.out.println("\nLa empresa fue eliminada, los empleados aun estan vivos !!. Ellos son:\n");
for( int i = 0 ; i < listaEmpleados.size(); ++i ) {
System.out.println( listaEmpleados.get(i).getNombre() );
}
}
}

Ferreiras Agregación, Composición: Implementación en


Java 8
Agregacion0.java

/*

D:\Ferreiras2\Java, Mi Codigo>javac Agregacion0.java

D:\Ferreiras2\Java, Mi Codigo>java Agregacion0

En la empresa 4V&F, S.R.L. Mis empleados son:

Wilfredo Mojica
Raul Mateo
Leoncio Martinez
Kleto Ferrer

La empresa fue eliminada, los empleados aun estan vivos !!. Ellos son:

Wilfredo Mojica
Raul Mateo
Leoncio Martinez
Kleto Ferrer

D:\Ferreiras2\Java, Mi Codigo>

*/

Ferreiras Agregación, Composición: Implementación en


Java 9
Composición
• Cuando una clase A contiene referencias
a instancias de una clase B y controla todo
el acceso a dichas instancias, decimos que
A es una composición de B.
• Por Ejemplo:
Ejemplo

Persona Corazón

Un objeto Persona posee un objeto Corazón.

Ferreiras Agregación, Composición: Implementación en


Java 10
Composición,
Persona
- unaMano: Mano[0,2]
- unaPierga: Pierna[0,2]

0..2 0..2
Pierna Mano

Ferreiras Agregación, Composición: Implementación en


Java 11
Composición
•   Para implementa la composición en
Java  Se hace mediante el constructor
de la clase que se apropia, que se encarga
de construir el objeto apropiado,
apropiado el cual
se almacenará en la instancia de dicha
clase contenedora.
• De ese modo, cuando sea eliminado el
objeto contenedor, se elimina el objeto
contenido.
Ferreiras Agregación, Composición: Implementación en
Java 12
Composición,
• En la composición el objeto contenido
solo existe o tiene sentido dentro de otro
objeto, como parte de otro.
• Por ejemplo Persona -- Corazón;
No se crea un corazón y luego se le
pasa a una persona !!

Ferreiras Agregación, Composición: Implementación en


Java 13
/*
Composicion0.java
Modela una situación real : Una
Ferreiras / Java / Agregación, Composición
persona tiene un solo Corazon y
Composición: Implementación solo a ésta le interesa saber de
Corazon

Persona Corazón
1
composición

- Es una relación del tipo "parte-de": un objeto es parte-de un todo, un conjunto.


- Es una forma especializada de agregación y podemos llamar a esto como una relación de la
"muerte".
- Es un tipo fuerte de agregación. El objeto parte no tiene su ciclo de vida y si el todo es
eliminado también son eliminados todos los objetos parte.
- Por ejemplo: La relación entre la Casa y los Cuartos. Casa puede contener varios Cuartos;
Los Cuarto no tienen vida independiente y un Cuarto no puede pertenecer a otra Casa; Si la
Casa es eliminadas,

*/

Ferreiras Agregación, Composición: Implementación en


Java 14
/
Composicion0.java

class Corazon {

private String tipoCorazon;

public Corazon( String tc ) {

this.tipoCorazon = tc;
}

public String getTipoCorazon( ) { return tipoCorazon; }


}

Ferreiras Agregación, Composición: Implementación en


Java 15
Cada objeto de la clase
Persona será creado con
un objeto corazón ( es lo
Composicion0.java
normal !! ) del cual es
class Persona { responsable, es
propietario.
private Corazon unCorazon;

public Persona( String tc ) {

this.unCorazon = new Corazon( tc ); // Es creado al momento de crear un objeto Persona


System.out.println("\nHe nacido con un " + tc );
}

public String verCorazon( ) {


return unCorazon.getTipoCorazon();
}

Ferreiras Agregación, Composición: Implementación en


Java 16
Composicion0.java

// Tester class

public class Composicion0 {

public static void main( String [ ] fofi ) {


try, catch Es captura y
Persona p1 = new Persona( "Corazon viejo y cansado"); manejo de errores con
System.out.println("\nTengo un " + p1.verCorazon() ); excepciones, a ver en el
tema 09: Manejo de
p1 = null; // RIP la persona p1 Excepciones
try {
System.out.println("\nTengo un " + p1.verCorazon() );
}
catch( NullPointerException paolita ) {
System.out.println( "\nEl Corazon de p1 esta " + paolita.getMessage() +
", es decir, p1 esta RIP" );
}

Ferreiras Agregación, Composición: Implementación en


Java 17
Composicion0.java

/*

D:\Ferreiras2\Java, Mi Codigo>javac Composicion0.java

D:\Ferreiras2\Java, Mi Codigo>java Composicion0

He nacido con un Corazon viejo y cansado

Tengo un Corazon viejo y cansado

El Corazon de p1 esta null, es decir, p1 esta RIP

D:\Ferreiras2\Java, Mi Codigo>

*/

Ferreiras Agregación, Composición: Implementación en


Java 18
Composición, Agregación

• Luego, vimos que en Java, de manera


implícita, simplemente no se hace la
distinción entre la composición y la
agregación;

Ferreiras Agregación, Composición: Implementación en


Java 19
Composición, Agregación

• Composición y agregación son tipos de


asociaciones.
• Están muy estrechamente relacionadas y
en términos de programación no parecen
tener mucha diferencia entre si, al menos
en Java.

Ferreiras Agregación, Composición: Implementación en


Java 20
Composición, Agregación
• En Java, los objetos son referenciados
sólo por punteros.
• Esto significa que un campo de tipo A es
realmente una referencia a un objeto A.
• También significa que ese campo siempre
se iniciará como un puntero nulo, y que
explícitamente se le debe asignar a este
un new(A) .
Ferreiras Agregación, Composición: Implementación en
Java 21
/*
Por ejemplo, en el código AgregComp0.java

Ferreiras / Java / Agregacion, Composicion

Implementación
1
Persona Corazón

0..1 0..1

Carro Celular

*/

Ferreiras Agregación, Composición: Implementación en


Java 22
class Corazon {

private String tipoCorazon;

public Corazon( String tc ) {

this.tipoCorazon = tc;
}

public String getTipoCorazon( ) { return tipoCorazon; }


}

Ferreiras Agregación, Composición: Implementación en


Java 23
class Carro {

private String marca;

public Carro( String ma ) {

this.marca = ma;
}

public String getMarcaCarro( ) { return marca; }

class Celular {

private int numero;

public Celular( int nu ) {

this.numero = nu;
}

public int getNumeroCelular( ) { return numero; }

Ferreiras Agregación, Composición: Implementación en


Java 24
class Persona {

private Carro unCarro;


private Celular unCelular;
private Corazon unCorazon;

Persona( Carro ca, Celular ce, String tc ) {

this.unCarro = ca; // Agregacion


this.unCelular = ce; // Agregacion
this.unCorazon = new Corazon( tc ); // Composicion
}

public String verCorazon( ) { return unCorazon.getTipoCorazon(); }

Ferreiras Agregación, Composición: Implementación en


Java 25
Estos objetos:
1) Son creados fuera del
objeto Persona; y,
2) Seguirían existiendo
sin el objeto Persona

public class AgregComp0 { La clase Persona


creará un objeto
public static void main( String [ ] fofi ) { Persona con un
objeto Corazón del
Carro ca = new Carro("Toyota"); cual es su único
Celular ce = new Celular( 123456789); propietario.

Persona unaPersona = new Persona ( ca, ce, "Atletico" );

System.out.println( "\n\nEl corazon: " + unaPersona.verCorazon() +


"\nTiene un carro marca: " + ca.getMarcaCarro() +
"\n Tiene un celular numero: " + ce.getNumeroCelular() + "\n");

}
Fíjese que para ver el corazón de Eso significa que la clase
} un objeto Persona tiene que ser contenedora, Persona, controla el
vía un método miembro de dicha acceso al objeto contenido,
clase Corazón

Ferreiras Agregación, Composición: Implementación en


Java 26
/*

C:\Archivos de programa\Java\jdk1.7.0\bin>javac AgregComp0.java

C:\Archivos de programa\Java\jdk1.7.0\bin>java AgregComp0

El corazon: Atletico
Tiene un carro marca: Toyota
Tiene un celular numero: 123456789

C:\Archivos de programa\Java\jdk1.7.0\bin>

*/

Ferreiras Agregación, Composición: Implementación en


Java 27
Asociación>Agregación>Composición
• Agregación es un tipo especial de asociación y
composición es un tipo especial de agregación:
• A diferencia de la
asociación, la Asociación
agregación siempre
insiste en una
dirección. Agregación
• Veamos algunos
tips para luego Composición
entrar en detalles.

Ferreiras Agregación, Composición: Implementación en


Java 28
Asociación>Agregación>Composición

• Agregación es una forma especializada de


asociación que implica contención ( "consiste de“, “se
compone de", "tiene un“, ...
• En la agregación, las instancias de clases existen de
forma independiente y, por lo tanto, los ciclos de vida de
los objetos implicados no están fuertemente acoplados.
• Debido a que la agregación implica contención, por
definición, no es necesario nombrarla con las etiquetas
"se compone de" o "consiste de“, “tiene un”, como en
la asociación

Ferreiras Agregación, Composición: Implementación en


Java 29
Asociación>Agregación>Composición
OK. Validados: A un objeto
• Son formas de agregación1: Carro se le agregan esos
objetos, es ensamblado con
• Un Carro tiene un Motor estos.
Para Ferreiras.
discutir • Un Carro tiene una Transmisión 17-Septiembre-2013
en el
aula • Un Carro tiene Ruedas
• Una Escuela se compone de muchos Profesores
1
: Pero, si consideramos el objeto Carro como un concepto que debe incluir todos
•  esos objetos, entonces es una composición. En el mundo real, es el concepto
aplicado.

Otro criterio es La compartición de objetos: En la agregación un objeto puede ser


utilizado al mismo tiempo por otros objetos, mientras que en la composición no.

Conclusión:
Es una composición, la relación Carro-Motor. ? Ferreiras/15-Junio-2014

Ferreiras Agregación, Composición: Implementación en


Java 30
Asociación>Agregación>Composición

• En la discusión anterior, de si la relación Carro-Motor


es una agregación o una composición, lo importante a
tener en cuenta es que usted escoja la opción que mejor
represente su problema y prepare su modelo sobre esa
base y lo implemente por igual.

• No se preocupe. Hay diferencia de opinión entre


muchos gurúes analistas. Solo tenga claro lo que usted
quiere modelar e implementar, LO QUE MAS SE
APROXIME A LA REALIDAD DE LA QUE USTED ESTA
HACIENDO EL PROCESO DE ABSTRACCION.
Ferreiras Agregación, Composición: Implementación en
Java 31
Asociación>Agregación>Composición
• En la notación UML, el símbolo del diamante se pone en el
extremo de la línea que toca la clase contenedora.
• Si es agregación, el simbolo del diamante no estara relleno:
• Si es composición, el simbolo del diamante estara relleno:
• La decisión de utilizar o no agregación en lugar de asociación es
sutil, debido a que el código de implementación es similar.
• La composición es una forma de agregación en la cual los objetos
de la clase contenida no pueden existir sin los objetos de la clase
contenedora:
• Un libro esta compuesto de muchos capítulos (composición)
• Un capítulo no puede existir si el libro al cual pertenece
deja de existir
Ferreiras Agregación, Composición: Implementación en
Java 32
Asociación>Agregación>Composición
• Un carro tiene cuatro gomas ( agregación )
Una goma puede ser removida del carro y continuar existiendo.
• La multiplicidad en la agregación es reflejada como en la asociación:

Pensum Curso
0..* 1..*

En esta agregación:
• Un Pensum debe estar compuesto de uno o más Curso
• Un Curso puede ser incluido en cero o más Pensum

Ferreiras Agregación, Composición: Implementación en


Java 33
Asociación>Agregación>Composición

Universidad
Rector

Facultad

• Universidad tiene un Rector


• Universidad esta compuesta de Facultad

Ferreiras Agregación, Composición: Implementación en


Java 34
Asociación>Agregación>Composición

• En la agregación “Universidad tiene un Rector”


Un objeto Universidad puede existir sin un Rector,
esto es, el tiempo de vida de una Universidad no esta
unido al tiempo de vida de un Rector.

• En la composición “Universidad contiene Facultad”


Un objeto Facultad no puede existir sin un objeto
Universidad, esto es, el tiempo de vida de una Facultad
(o Facultades) esta unido al tiempo de vida de la
Universidad.

Ferreiras Agregación, Composición: Implementación en


Java 35
Asociación>Agregación>Composición
• Asociación débil

• Un método de la clase A tiene como parámetro un objeto de la clase B:

void metodo1( B objB);

• Un método de la clase A retorna un objeto de la clase B:

B metodo2( int j );

• Una asociación débil es una agregación.

A B
+ metodo1( B objB ):void
+ metodo2( int j ): B

Ferreiras Agregación, Composición: Implementación en


Java 36
Asociación>Agregación>Composición
• Asociación Fuerte.

• La clase A tiene una variable miembro que es una instancia de


la clase B:

private B variableMiembroA;

• Una asociación fuerte es una composición

A
- xB: B B

Ferreiras Agregación, Composición: Implementación en


Java 37
Asociación>Agregación>Composición
• Agregación y Composición son tipos especiales de asociación.
• La Agregación es usada para representar una relación de propiedad o una
relación todo/parte;
• La composición es usada para representar una forma más fuerte de
propiedad: El tiempo de vida del todo y la parte son coincidentes; El todo
tiene la responsabilidad de disponer de sus partes en términos de su creación
y destrucción.
• En la ccomposición el tiempo de vida del objeto contenido ( la parte )
depende del objeto contenedor ( el todo ). No es así con la agregación.

Ferreiras Agregación, Composición: Implementación en


Java 38
Asociación>Agregación>Composición

• En el código anterior AgregComp1.java:


• Asociación Fuerte
• Cuando un objeto Casa es destruido, sus
partes (areaConstruccion, materialPiso)
también son destruidas.
• Asociación Débil
• Los objetos Calle permanecen.

Ferreiras Agregación, Composición: Implementación en


Java 39
Referencias
• Beginning Java Objects: From Concepts to Code; Jacquie Barker, Secon Edition;
Apress; 2005.-
• Recomendado, casi obligatorio, visitar este URL:
http://stackoverflow.com/questions/731802/what-is-the-difference-between-
composition-and-association-relationship
• http://aviadezra.blogspot.com/2009/05/uml-association-aggregation-composition.html

Ferreiras Agregación, Composición: Implementación en


Java 40
Ferreiras Agregación, Composición: Implementación en
Java 41

También podría gustarte