jueves, junio 11, 2009

UML Relaciones, Asociacion, Compocicion, Agregacion II



Aclaración


He tratado de explicar, muy generalmente, cual es la diferencia entre asociación, composición, y agregación, pero creo haber pecado de los mismo que criticaba a los post que leía. No he sido los suficientemente claro, además se me ha solicitado que explique un poco mas.. je.
Debo de destacar que cada modelo diseñado no es prescriptivo, ni intenta ser absoluto hay otras formas de diseñarlo, o por lo menos a mi se me ocurren otras además de estas.
Pero creo que la pricipal, duda viene por lado de la Composición y la Agregación. Cabe destacar, que la composición, surge como un refinamiento de la Agregación, en la búsqueda de implementar la buena practica de programación de hacer a las clases mas "coercitivas", es decir de asignarle responsabilidades.

Explicación del Modelo Representado


Asociacion: Es la relación que existe entre la clase Persona y la Clase Foto, es decir que que existe una variable de instancia (o atributo) en la clase Persona del tipo Foto. Solo un obeto, el cual se setea a partir del método setFoto(), como variable de instancia a la cual se le crea un setter. Este puede ser instanciado (new Foto()) en cualquier otra parte del código.
Agregación: Es la relación que existe entre la clase Persona y la clase Lugar atravez del atributo "lugaresFrecuentes", que es una colección (array, colection, vector, etc) de objetos Lugar. Y que además, la clase Persona cuenta con un método "agregarLugaresFrecuentes(Lugar lugar)" Mediante el cual se agregan un solo objeto del tipo Lugar a la colección "lugaresFrecuentes". Estos objetos, que son pasados como parámetros a dicho metodo, son instanciados fuera de la clase Persona. No debe confundirse con el método setLugaresFrecuentes(Lugar[] lugaresFrecuentes), que tiene solo por ser un propiedad.
Composición: Es la relación que existe entre la clase Persona y la clase Perfil a travez de la propiedad "perfiles" que es una coleccion del tipo Perfil. Además, de ser una relación estructural, es meramente semántica, ya que lo que pretende es darnos la idea de la responsabilidad que tiene la clase Persona sobre el ciclo de vida del objeto de la clase Perfil. Es por ello que también en el ejemplo grafique una Dependencia (esta no se grafica generalmente, con la composición basta. Pero UML sirve para comunicarnos.)
Es idéntica a la agregación pero con la diferencia que la clase Persona se hace responsable de la creacion del objeto Perfil. Es decir que la instancia (new Perfil()) se crea dentro del método agregarPerfil(), y despues de ello, dicho objeto se guarda en la colección "perfiles". El modelo nos esta diciendo, que en ninguna otra parte del código deberíamos escribir un new Perfil() . Ya que coloquialmente, el perfil (sea este psicologico, personal, etc) de una persona solo existe a partir de la persona, muerta la persona el perfil no sirve de nada, y solo a partir de la existencia de la misma se puede crear uno, por lo que este metodo de creacion debe de ser un metodo de instancia.

Es todo una cuestión, de lo que la persona que escribió el modelo (y teniendo en cuenta que la misma sepa utilizar UML, nos quiso transmitir), si existe la duda, hay que preguntarle que quiso decir con lo que graficó.
Espero haber limpiado algunas dudas
Saludos
Ariel Diaz Molina.

8 comentarios:

Anónimo dijo...

Es bueno que hayan personas que con sus propias palabras expliquen este tema, ya que a veces en los libros no se encuentra este tipo de respuestas.

aro dijo...

Thx...

aro dijo...

Esa es la idea, tratar de encontrar lugarcitos donde podamos compartir experiencias... ya que libros con ejemplos teoricos abundan por todos lados.
Gracias y Saludos.

Anónimo dijo...

si podes publicar el codigo referente a ese modelo, seria gran ayuda! =)

Anónimo dijo...

No me parece correcta la explicacion de

aro dijo...

Anonimo 1: no se si lo tengo... no creo, ya voy a ver si puedo hacerlo cuando tenga un poco de tiempo. Gracias
Anonimo 2: ???

Anónimo dijo...

fue de muucha ayuda tu articulo! gracias x tu aporte y aclarar estas dudas respecto de POO

aro dijo...

u r welcome! :) saludos