Professional Documents
Culture Documents
Vemos tambin que cada clase del tipo parte es agregada como un atributo
en la clase del tipo todo, de forma similar a la asociacin (recordar que la
agregacin es un caso particular de la asociacin). Entonces, ahora s
definamos a la agregacin.
Relacin de AGREGACIN
Definicin
La relacin de agregacin es una relacin que indica que un objeto de una
clase (conocida como "PARTE") es parte de otro objeto de otra clase
(conocida como "TODO"). En esta relacin si el TODO es eliminado, las
PARTES no necesariamente sern eliminadas.
Notacin
Se representa con una lnea continua que tiene en uno de sus extremos un
rombo con un color de relleno blanco. A la clase A se le conoce como
parte, y a la clase B como todo.
ClaseA
ClaseB
Formas de lectura
Un objeto de la clase A es parte de un objeto de la clase B
Un objeto de la clase A conforma a un objeto de la clase B
Un objeto de la clase B posee a un objeto de la clase A
Forma de implementacin
Por medio de un atributo de un objeto de la clase B en la clase A.
Tambin, aunque no es obligatorio pero s recomendable, es una buena
Ejemplo
Tenemos el siguiente contexto: Una fbrica de autos est construyendo un
nuevo prototipo de un auto, en particular se est enfocando en mejorar el
tiempo de vida de las llantas. Como sabemos que un auto est conformado
por cuatro llantas, podemos representar esta realidad de la siguiente
manera:
Notar como es que hemos agregado los mtodos add, get y remove.
No confundir el mtodo getLlanta con el de getLlantas.
Clase Llanta.java
public class Llanta{
private String tiempoDeVida;
public Llanta(){
}
public String getTiempoDeVida() {
return tiempoDeVida;
}
public void setTiempoDeVida(String tiempoDeVida) {
this.tiempoDeVida = tiempoDeVida;
}
}
Clase Auto.java
public class Auto{
private String modelo;
private Llanta[] llantas;
public Auto(){
llantas = new Llanta[4];
}
/*MTODOS DE LA AGREGACIN (NO SON OBLIGATORIOS)*/
public void addLlanta(Llanta llanta){
if(llantas.length < 4){
llantas[llantas.length] = llanta;
}else{
System.out.println("Las cuatro llantas estn puestas");
}
}
En este caso, como el contexto del problema es una fbrica de autos que
est haciendo pruebas para mejorar el tiempo de vida de sus llantas,
podemos deducir que si el auto en general es destruido, las llantas no
necesariamente sern destruidas, ya que pueden cambiarse a otro auto, por
lo tanto hacemos bien en usar una relacin de AGREGACIN para
representar el contexto del problema.
Por ejemplo, podemos crear una clase llamada Programa en el cual veamos
actuar a la agregacin:
Clase Programa.java
public class Programa{
public static void main(String[] args){
/*Creamos cuatro
Llanta llanta1 =
Llanta llanta2 =
Llanta llanta3 =
Llanta llanta4 =
llantas*/
new Llanta();
new Llanta();
new Llanta();
new Llanta();
/*Creamos un auto*/
Auto auto = new Auto();
/*Colocamos las llantas en el auto*/
auto.addLlanta(llanta1);
auto.addLlanta(llanta2);
auto.addLlanta(llanta3);
auto.addLlanta(llanta4);
/*Destruimos el auto*/
auto = null;
System.out.println("Auto destruido");
/*Las llantas an existen*/
System.out.println("Llanta 1:
System.out.println("Llanta 2:
System.out.println("Llanta 3:
System.out.println("Llanta 4:
"+llanta1);
"+llanta2);
"+llanta3);
"+llanta4);
Relacin de COMPOSICIN
Definicin
La relacin de agregacin es una relacin que indica que un objeto de
una clase (conocida como "PARTE") es parte de otro objeto de otra clase
(conocida como "TODO"). Si el "TODO" llegase a ser eliminado,
necesariamente las "PARTES" tambin deben de ser eliminadas.
Notacin
Se representa con una lnea continua que tiene en uno de sus extremos un
rombo con un color de relleno oscuro. A la clase "A" se le conoce como
"parte", y a la clase "B" como "todo".
Prof. Alonso Ral Melgarejo Galvn
Formas de lectura
"Un objeto de la clase A es parte de un objeto de la clase B"
"Un objeto de la clase A conforma a un objeto de la clase B"
"Un objeto de la clase B posee a un objeto de la clase A"
Formas de implementacin
Por medio de un atributo de un objeto de la clase "B" en la clase "A".
Tambin, aunque no es obligatorio pero s recomendable, es una buena
prctica que para las agregaciones de 1 a muchos se aada a la clase "B" un
mtodo llamado "agregar" o "add", el cual tiene como finalidad agregar un
elemento de la "parte" al "todo", otro denominado "get" u "obtener", el cual
obtiene una "parte" del "todo" y otro denominado "remove" el cual elimina
una "parte" del "todo", aunque no es obligatorio.
Ejemplo
Continuemos con el ejemplo anterior para entender este concepto. Tenemos
el siguiente contexto: Una fbrica de autos est construyendo un nuevo
prototipo de un auto, en particular se est enfocando en verificar que tan
rpido puede ir el auto hasta que el motor se sobrecaliente y explote. Como
El cdigo en Java, tanto para la clase Llanta como para la clase Auto ser
el mismo que en la AGREGACIN, sin embargo para ver el funcionamiento de
la COMPOSICIN crearemos un nuevo main:
Clase Programa.java
public class Programa{
public static void main(String[] args){
/*Creamos cuatro
Llanta llanta1 =
Llanta llanta2 =
Llanta llanta3 =
Llanta llanta4 =
llantas*/
new Llanta();
new Llanta();
new Llanta();
new Llanta();
/*Creamos un auto*/
Auto auto = new Auto();
/*Colocamos las llantas en el auto*/
auto.addLlanta(llanta1);
auto.addLlanta(llanta2);
auto.addLlanta(llanta3);
auto.addLlanta(llanta4);
/*Destruimos el auto*/
auto = null;
llanta1 = null;
llanta2 = null;
llanta3 = null;
llanta4 = null;
System.out.println("Auto destruido");
/*Las llantas an existen*/
System.out.println("Llanta 1: "+llanta1);
System.out.println("Llanta 2: "+llanta2);
System.out.println("Llanta 3: "+llanta3);
System.out.println("Llanta 4: "+llanta4);
System.out.println("Llantas destrudas");
}
}
Clase Llanta.java
public class Llanta{
private String tiempoDeVida;
public Llanta(){
}
public String getTiempoDeVida() {
return tiempoDeVida;
}
public void setTiempoDeVida(String tiempoDeVida) {
this.tiempoDeVida = tiempoDeVida;
}
}
Clase Auto.java
public class Auto{
private String modelo;
private Llanta[] llantas;
public Auto(){
llantas = new Llanta[4];
/*Creamos internamente las llantas*/
for(int i=0; i<4; i++){
llantas[i] = new Llanta();
}
}
/*MTODOS DE LA AGREGACIN (NO SON OBLIGATORIOS)*/
public void addLlanta(Llanta llanta){
Clase Programa.java
public class Programa{
public static void main(String[] args){
/*Creamos un auto, internamente se crean tambin las llantas*/
Auto auto = new Auto();
/*Destruimos el auto*/
auto = null;
System.out.println("Auto y llantas destruidos");
}
}
Por ltimo, hay que tener en cuenta que mientras que un contexto usamos la
relacin de AGREGACIN entre auto y llanta, bajo otro contexto usamos la
relacin de COMPOSICIN, por lo tanto la eleccin del uso de una o de la
otra relacin depender del problema y del contexto que all se presente.