
import java.util.List;
public class Persona {
private String nombre;
private String apellido;
private Foto foto;
private List lugaresFrecuentes;
private List comunicaciones;
public String getNombre() {return nombre;}
public void setNombre(String nombre) {this.nombre = nombre;}
public String getApellido() {return apellido;}
public void setApellido(String apellido) {this.apellido = apellido;}
//Asociacion Foto
public Foto getFoto() {return foto;}
public void setFoto(Foto foto) {this.foto = foto;}
//public List getLugaresFrecuentes() {return lugaresFrecuentes;}
//public void setLugaresFrecuentes(List lugaresFrecuentes) {this.lugaresFrecuentes = lugaresFrecuentes;}
//Agregacion
public void agregarLugar(Lugar lugar){
lugaresFrecuentes.add(lugar);
}
public boolean quitarLugar(Lugar lugar){
return lugaresFrecuentes.remove(lugar);
}
//Asociación
public void setComunicaciones(List comunicaciones) {
this.comunicaciones = comunicaciones;
}
public List getComunicaciones() {
return comunicaciones;
}
}
Las diferencias principales son que:
- ¡La Agregación son siempre colecciones, o arrays! O algo que sirva de contenedor para "agregar" más de un objeto, aunque agreguemos uno solo. (si no sería settear y no agregar, add)
- La Agregación cuenta con dos métodos: uno para "agregar" un solo objeto a la lista, y el otro para quitarlo de la misma.
- La agregación puede, como no, tener los metodos setter y getter, mientras que la Asociación siempre los tiene, que ponen y obtienen una variable de referencia del mismo tipo de la variable de instancia o de clase, en este caso List
.
Bueno, espero haber limpiado alguna duda, y abrir otras ;) Saludos.
7 comentarios:
Una clase puede agregarse a si misma, es decir si estoy haciendo uso un diagrama de clases para representar un metamodelo e indicar que una clase plantilla se agrega a si misma
En realidad, y a mi entender, vos podes hacer que cualquier clase se relaciones en forma "asociativa" consigo misma. Y como una agregación no es mas que una asociación con esteroides ergo, sip! se puede
Yo creo que se podría interpretar lo que sucede con los métodos Agregar/Quitar (Add/Remove) en LugaresFrecuentes como consecuencia de una asociación con multiplicidad de 1 a muchos (1, *). Así, si se habla de un único elemento en la relación se usan los getters/setters, y si se habla de varios elementos, de add/remove. Todo depende de la multiplicidad. En conclusión la diferencia entre el uso de una agregación o una asociación es más conceptual que de código.
I totally agree with you!! si, también se la puede interpretar como tu lo dices. Es una cuestión de interpretación. Al fin y al cabo, tanto la agregación como la composición derivan de la asociación. Los setter y los getters estan siempre presentes, mas alla de la multiplicidad, por que forman parte de las "propiedades" de un objeto (no confundir con los atributos de una clase). Coincido, contigo, en que lo podemos expresarlo con asociaciones, pero la "conceptualidad",en mi puto de vista, debe ser expresada en código. Saludos
Interesante! Este lunes tengo parcial y tu publicación me ha ayudado bastante a aclarar algunas diferencias.
He leído en otro lugar que la diferencia principal entre ellas depende de "qué tan fuerte" es la relación entre las clases. Una Asociación se presenta cuando la relación entre ellas es muy básica. Por ejemplo cuando en un método de la clase 'A' utiliza una instancia de la clase 'B'. Esta es una relación muy básica (creo que la más básica).
Tanto en la Asociación como en la composición tienen una relación más fuerte, como se ve en tus ejemplos.
Hola "Anonimo" (je) hay pocas cosas mmuuy claras en UML, pero una de esas pocas cosas es que: una asociacion, es siempre una relación IS-A, por lo que no se podria utilizar este tipo de relación, para graficar la llamada desde un METODO de una instancia. En este caso se utiliza una relacion de "Uso" llamada "Dependencia". (La de las lineas punteadas) Saludos
Hola, después de 7 años desde esta publicación, sigue siendo la mejor respuesta que he encontrado. Gracias!! muy buen contenido
Publicar un comentario