jueves, 1 de mayo de 2014

UML Diagrama de Clases

DEFINICIÓN.
Un diagrama de clases es un gráfico que ilustra clases conectadas por medio de relaciones estáticas. 
OMG Unified Modeling Language Specification, 2000.

En la siguiente sección se abordaran las relaciones entre clases, la creación de clases se explicó en la entrada Programación OO - Clases de este mismo blog. Las clases se relacionan entre sí de varias maneras diferentes, en este apartado se destacan, la asociación, agregación, composición y especialización / generalización, estas relaciones serán explicadas con mayor profundidad a continuación.

Asociación.

Una asociación representa una relación entre clases, y aporta la semántica común y la estructura de muchos tipos de «conexiones» entre objetos.

Las asociaciones son los mecanismos que permite a los objetos comunicarse entre sí. Describe la conexión entre diferentes clases (la conexión entre los objetos reales se denomina conexión de objetos o enlace). Las asociaciones pueden tener un papel que especifica el propósito de la asociación y pueden ser unidireccionales o bidireccionales (indicando si los dos objetos participantes en la relación pueden intercambiar mensajes entre sí, o es únicamente uno de ellos el que recibe información del otro). Cada extremo de la asociación también tiene un valor de multiplicidad, que indica cuántos objetos de ese lado de la asociación están relacionados con un objeto del extremo contrario.

En UML, las asociaciones se representan por medio de líneas que conectan las clases participantes en la relación, y también pueden mostrar el papel y la multiplicidad de cada uno de los participantes. La multiplicidad se muestra como un rango [mín...máx] de valores no negativos, con un asterisco (*) representando el infinito en el lado máximo.

Fuente: http://docs.kde.org/stable/es/kdesdk/umbrello/uml-elements.html

La multiplicidad por su parte fija el número de instancias que participan en la relación, a continuación se muestra la tabla que muestra la cardinalidad en una asociación.

1
uno y solo uno
0..1
cero o uno
*
muchos
0..*
cero o muchos
1..*
uno o muchos


Ejemplo de asociación

 


Agregación.

Las composiciones son tipos especiales de asociaciones que representan un nivel de acoplamiento más fuerte, las relaciones que se tratan de modelar son del tipo “tiene un” o “es parte de” donde una de las clases juega el rol de "completa" y las otras son las "partes".

La notación para representar las agregaciones es una línea con un rombo vació en el extremo apuntando a la clase completa. En la agregación las partes puedes existir aun cuando la clase completa haya dejado de hacerlo.                     





Composición.

Las composiciones, son tipos especiales de asociaciones que representan un nivel de acoplamiento más fuerte que las agregaciones, las relaciones que se tratan de modelar son del tipo “se compone de”, con la composición solo se puede pertenecer a un todo en consecuencia si se elimina el todo se eliminan las partes.

La notación para representar las composiciones, es una línea con un rombo lleno en el extremo apuntando a la clase todo. En la composición la clase todo maneja el ciclo de vida de los objetos que la componen, de esta manera se asegura que cuando el todo se destruye también sus partes.  
                



Si se observa detenidamente, el numero 54 no hace parte de las opciones de cardinalidad, sin embargo es valido poner un valor numérico si se sabe de ante mano que es estático por ejemplo el mazo de cartas americano tiene 54 figuras compuestas por 13 cartas por cada símbolo y 2 comodines, dicha configuración no cambia entonces es posible poner el numero de cartas como valor de la multiplicidad de la clase carta.


Herencia.

La herencia consiste en crear clases genéricas llamadas súper clases o clases padre, con los elementos comunes a un conjunto de subclases. Las subclases heredan (recogen) los atributos y comportamiento de la clase padre pudiendo agregar atributos y comportamiento propios, y modificar los atributos y comportamiento que vienen del padre.

La herencia cumple con el principio de sustitución de Liskov que afirma que: si S es un subtipo de T, entonces los objetos de tipo T en un programa de computadora pueden ser sustituidos por objetos de tipo S.


A pesar de que la herencia es una herramienta poderosa justificada por el re-uso de componentes comunes presentes en súper clases, también presenta problemas en el control de tipos como la covariación y el ocultamiento en los descendientes, temas que no se trataran en esta sección.                  







No hay comentarios:

Publicar un comentario