Algo de UML básico

Este viernes en la oficina uno de mis compañeros y yo estábamos comentando uno de los tweets de una amiga, en el que decía que no entendía cual es la diferencia entre agregación y composición en UML. Después de algunos minutos hablando comprobamos que aunque supiésemos diferenciar entre los dos, nosotros tampoco podíamos dar una definición técnica correcta de ambos términos. Por esta razón voy a crear una entrada en la que tras documentarme trataré de dejar claro que es composición y que es agregación. Demostrando por otro lado que siempre es interesante volver a las bases de vez en cuando, tanto para refrescarlas como para verlas desde otro nuevo punto de vista.

Definición de libro.

Para empezar utilizaré las definiciones del libro de Tim Weilkiens y Bernd Oestereich, "UML 2 Certification Guide".

"An aggregation is an association expanded by the semantically noncommittal comment that the participating classes have no equal-ranking relationship; instead they represent a whole-parts hierarchy. An aggregation is used to describe how something whole is logically composed of its parts."

"A composition is a strict form of aggregation, where the existence of its parts depends on the whole. The whole is the owner of its parts. It describes how something whole is composed of individual parts."

Vamos, aunque se entiende lo que dicen, después de leer esto me quedo un poco confuso (más que nada porque todavía estoy pescando con lo de noncommital comment; nota mental, tengo que mejorar mi inglés), vamos a ver que dice Martin Fowler en su libro, "UML Distilled Third Edition".

Bueno pues, decir decir no dice mucho, pero los diagramas utilizados por el señor Fowler clarifican bastante.

Agregación
Composición
A ver, tras leer las definiciones y ver los diagramas de ambos libros tenemos una idea bastante concreta de que es cada termino. Utilizamos agregación cuando queremos hablar de una asociación entre clases en la que ambas tienen "vida propia", es decir que ambas forman parte del modelo de negocio por si mismas independientemente de la existencia de la otra. En cambio, utilizamos composición cuando queremos hablar de una clase que hace uso de otras más "pequeñas" para formar un solo concepto del modelo de negocio, es decir una serie de clases que no tienen sentido fuera de ese concepto más general y que no existirían en otro caso dentro del modelo de negocio.

Nota sobre UML.

Para acabar y aunque no está totalmente relacionado con la entrada, me gustaría citar una frase que leí en un "retweet" y que lamentablemente no me acuerdo de su autor, aunque estaría encantado que alguien me lo dijese.
"UML no es malo, lo malo es creer que es la magia para que luego un mono te haga el código"
Cito esta frase porque yo soy de esas personas que creen que UML es una buena herramienta de comunicación (directa, cara a cara a ser posible) pero ni remotamente permite definir de forma completa un sistema en un diseño real (al fin y al cabo en realidad el código fuente es el diseño, ¿o no?).

Bibliografía :-)

Comentarios

Yurena ha dicho que…
Para empezar muchas gracias Yeray por publicar este post : )
El concepto creo que lo tengo claro hasta que me pongo a aplicarlo, por ejemplo: tengo que crear una relación entre "Turnos de operarios" y "Partes de trabajo" ¿de qué tipo es esto?
Yeray Darias ha dicho que…
Buena pregunta Yurena :-) La teoría y la práctica no tienen porque coincidir siempre :-P

En este caso concreto yo diría que es una relación de agregación porque creo que es probable que en tú modelo de negocio los "Turnos de operarios" y los "Partes de trabajo" tengan sentido por si solos (existirán independientemente de las relaciones entre ellos), es decir que son clases del "core de negocio" (leer algo de DDD; Eric Evans).

De todas maneras para cualquier duda, solo tienes que comentarlo y Pablo y yo lo discutiremos hasta dar con una solución aceptable :-D
Yurena ha dicho que…
Un día de estos os enseño mi "modelo de datos" y a ver si hacemos y/o coloreamos rombitos :D
Gregorio Mena ha dicho que…
Lento pero seguro, voy vaciando la pila de lecturas pendientes y tocaba esta ;)

Hace tiempo que no toco UML y creo que me voy a tener que pelear otra vez con eso, así que me ha venido bien.

P.D.: he tenido problemillas con las imágenes, no acabo de verlas bien. Igual es cosa de mi equipo.

Un abrazo!
Yeray Darias ha dicho que…
Ahora acabo de cargar la entrada y a mi tampoco se me vieron, pero he recargado la página y se ven correctamente. Puede que sea problema de blogger :-S

Un saludo.

P.D: al final me voy al AOS2010 :-) ya te contaré
Gregorio Mena ha dicho que…
¿Vas a proponer algún tema? En las cervecitas pendientes ya nos contarás qué tal. Seguro que lo pasan genial.
Yeray Darias ha dicho que…
Pues le he dado alguna vuelta a alguno que no parece estar propuesto por nadie como por ejemplo Integración Continua con Base de Datos en Producción, o por ejemplo contratación de personal. Algo así como la manera de encontrar a personal válido e interesado o similar, pero no lo tengo claro, le daré algunas vueltas más en el vuelo :-) además tengo que hablar con Fran.

A la vuelta quedamos todos y te cuento.

Un saludo.

Entradas populares de este blog

Log4j - JMS Appender con ActiveMQ

¿Cómo hacer uso de SASS en proyectos Java?

#informáticaSoluciónYA