martes, 1 de septiembre de 2009

diagramas de clases


Diagrama de clases



Un diagrama de clases es un tipo de diagrama estático que describe la estructura de un
sistema mostrando sus clases, atributos y las relaciones entre ellos. Los diagramas de clases son utilizados durante el proceso de análisis y diseño de los sistemas, donde se crea el diseño conceptual de la información que se manejará en el sistema, y los componentes que se encargaran del funcionamiento y la relación entre uno y otro.

Definiciones

Propiedades también llamados atributos o características, son valores que corresponden a un objeto, como color, material, cantidad, ubicación. Generalmente se conoce como la información detallada del objeto. Suponiendo que el objeto es una puerta, sus propiedades serían: la marca, tamaño, color y peso.

Operaciones son aquellas actividades o verbos que se pueden realizar con/para este objeto, como por ejemplo abrir, cerrar, buscar, cancelar, acreditar, cargar. De la misma manera que el nombre de un atributo, el nombre de una operación se escribe con minúsculas si consta de una sola palabra. Si el nombre contiene más de una palabra, cada palabra será unida a la anterior y comenzará con una letra mayúscula, a excepción de la primera palabra que comenzará en minúscula. Por ejemplo: abrirPuerta, cerrarPuerta, buscarPuerta, etc.

Interfaz es un conjunto de operaciones y/o propiedades que permiten a un objeto comportarse de cierta manera, por lo que define los requerimientos mínimos del objeto.

Herencia se define como la reutilización de un objeto padre ya definido para poder extender la funcionalidad en un objeto hijo. Los objetos hijos heredan todas las operaciones y/o propiedades de un objeto padre. Por ejemplo: Una persona puede subdividirse en Proveedores, Acreedores, Clientes, Accionistas, Empleados; todos comparten datos básicos como una persona, pero además tendrá información adicional que depende del tipo de persona, como saldo del cliente, total de inversión del accionista, salario del empleado, etc.

Al diseñar una clase se debe pensar en cómo se puede identificar un objeto real, como una persona, un transporte, un documento o un paquete. Estos ejemplos de clases de objetos reales, es sobre lo que un sistema se diseña. Durante el proceso del diseño de las clases se toman las propiedades que identifican como único al objeto y otras propiedades adicionales como datos que corresponden al objeto. Con los siguientes ejemplos se definen tres objetos que se incluyen en un diagrama de clases:

Ejemplo 1: Una persona tiene número de documento de identificación, nombres, apellidos, fecha de nacimiento, género, dirección postal, posiblemente también tenga número de teléfono de casa, del móvil, FAX y correo electrónico.

Ejemplo 2: Un sistema informático puede permitir administrar la cuenta bancaria de una persona, por lo que tendrá un número de cuenta, número de identificación del propietario de la cuenta, saldo actual, moneda en la que se maneja la cuenta.

Ejemplo 3: Otro objeto pueden ser "Manejo de Cuenta", dónde las operaciones bancarias de una cuenta (como en el ejemplo 2) se manejarán realizando diferentes operaciones que en el diagrama de clases sólo se representan como operaciones, que pueden ser:

Abrir

Cerrar

Depósito

Retiro

Acreditar Intereses

Estos ejemplos constituyen diferentes clases de objetos que tienen propiedades y/u operaciones que contienen un contexto y un dominio, los primeros dos ejemplos son clases de datos y el tercero clase de lógica de negocio, dependiendo de quién diseñe el sistema se pueden unir los datos con las operaciones.

El diagrama de clases incluye mucha más información como la relación entre un objeto y otro, la herencia de propiedades de otro objeto, conjuntos de operaciones/propiedades que son implementadas para una interfaz.

Diagrama de clases (estructura estática)

Los diagramas de clases son diagramas de estructura estática que muestran las clases del sistema y sus interrelaciones (incluyendo herencia, agregación, asociación, etc). Los diagramas de clase son el pilar básico del modelado con UML, siendo utilizados tanto para mostrar lo que el sistema puede hacer (análisis), como para mostrar cómo puede ser construido (dise no). El diagrama de clases de más alto nivel (main class diagram), será lógicamente un dibujo de los paquetes que componen el sistema. A su vez cada paquete tendrá un main class diagram que muestra las clases del paquete

Las clases se documentan con una descripción de lo que hacen, sus métodos y sus atributos. Las relaciones entre clases se documentan con una descripción de su propósito, su cardinalidad (cuantos objetos intervienen en la relación) y su opcionalidad (cuando un objeto es opcional el que intervenga en una relación). La descripción de clases complejas se puede documentar con diagramas de estados (sección ).

Figura: Diagrama de clases de la máquina de café

>

Supongamos el modelado de una máquina de café. Un diagrama de estructura estática inicial podría ser el representado en la figura 3.2. En dicha figura vemos que la representación gráfica UML para las clases es un rectángulo con compartimentos internos, siendo dichos rectángulos (clases) los elementos fundamentales del diagrama. Los compartimentos de una clase contienen su nombre, atributos y operaciones. En el ejemplo de la figura encontramos las clases Ingrediente, Producto, Maquina, DepositoMonedas y DepositoMonedasIguales. Los atributos, como hemos mencionado, identifican las características propias de cada clase. Generalmente son de tipos simples, ya que los atributos de tipos compuestos se representan mediante relaciones de composición con otras clases. La sintaxis textual UML para un atributo es:

visibility name : type-expression = initial-value { property-string}

Donde visibility puede ser public, protected y private; y type-expression es el tipo del atributo con nombre name. Además puede especificarse un valor inicial y un conjunto de propiedades del atributo. La visibilidad de un atributo (o operación puede ser):

public +: Cualquier clase externa con visibilidad hacia la clase dada puede utilizar la característica (ya se atributo u operación).

protected #: Cualquier descendiente de la clase puede utilizar la característica.

private -: Sólo el propio clasificador puede utilizar la característica.

En el modelo de la máquina de café (fig.), la clase Ingrediente tiene dos atributos: cantidad, de tipo float y con valor inicial 0; y nombre de tipo string sin valor inicial. En la herramienta CASE Rational Rose se utiliza para la representación de la visibilidad los símbolos que se muestran en la figura .

Figura: Símbolos en Rose para visibilidad privada, protegida y pública

La sintaxis de una operación en UML es:

visibility name (parameter-list) : return-type-expression {property-string}

Donde cada uno de los parámetros en parameter-list se denota igual que un atributo. Los demás elementos son los mismos que encontramos en la notación de un atributo.

Otro detalle importante que se puede especificar en los atributos y operaciones de una clase es su alcance. El alcance de propiedad de una característica especifica si la propiedad aparece en cada instancia de la clase o si sólo hay una instancia la propiedad para todas las instancias de la clase. En UML se pueden especificar dos tipos de alcance de propiedad:

instancia: Cada instancia de la clase tiene su propio valor.

clasificador: Sólo hay un valor para todas las instancias del clasificador.

Un atributo u operación con alcance de clasificador se denota subrayando la característica. El alcance de clasificador se corresponde con lo que en C++ son atributos y operaciones estáticas.

Una relación en un diagrama de clases, se representa mediante una línea que une dos o más clases. La línea puede ir acompa nada de diferentes tipos de adornos que definen su semántica y características. Como hemos ido viendo en esta sección las relaciones más comunes entre las clases presentes en un diagrama estático pueden ser: asociación (binaria o n-aria), agregación, generalización, dependencia, composición y clasificación.

Los elementos adicionales que pueden aparecer en la representación de una relación son:

Rol: Identifica con nombres a los elementos que aparecen en los extremos de la línea que denota la relación, dicho nombre describe la semántica que tiene la relación en el sentido indicado. Por ejemplo, la asociación de composición entre Maquina e Ingrediente recibe el nombre de existencias como rol en ese sentido.

Multiplicidad: Indica la cardinalidad de la relación. En el ejemplo se utilizan 1, 1 ..*, 5, *, como indicadores de multiplicidad.

Una asociación binaria se representa mediante una línea sólida que une dos clases, se trata de una relación entre las dos clases no muy fuerte, es decir, no se exige dependencia existencial ni encapsulamiento. Un ejemplo de asociación de este tipo es la que existe entre una compa nía y sus empleados (fig.). En este caso la asociación binaria recibe el nombre Trabaja Para, y en ella intervienen una o más instancias (objetos) de la clase Persona denominadas empleado. Además cada empleado se asocia a un empleador que en este caso es único.

Una agregación de composición o simplemente composición (composite aggregation) es una agregación más fuerte que implica:

Dependencia existencial: El elemento dependiente desaparece al destruirse el que lo contiene y, si es de cardinalidad 1, es creado al mismo tiempo.

Pertenencia fuerte: Se puede decir que el objeto contenido es parte constitutiva y vital del que lo contiene.

No compartición: Los objetos contenidos no son compartidos, esto es, no forman parte del estado de otro objeto.

La composición se representa mediante un rombo relleno del lado de la clase que contiene a la otra en la agregación. En el ejemplo de la máquina de café vemos composiciones entre Maquina y Producto, Maquina y DepositoMonedas y, Maquina y DepositoMonedasIguales. La relación de generalización, denotando herencia entre clases, se representa mediante un triángulo sin rellenar del lado de la superclase. La subclase hereda todos los atributos y mensajes descritos en la superclase. En el ejemplo encontramos generalización entre DepositoMonedas (superclase) y DepositoMonedasIguales (subclase).

Una clase paramétrica (parametrized class) se corresponde con el concepto de clases molde (template) en C++. Se representa acompa nando la clase con un rectángulo en la esquina superior derecha donde estarían los parámetros. Por ejemplo, la clase Lista que utiliza un parámetro formal Tipo se representaría como en la figura, pudiendo representar una lista de diferentes tipos de objetos dependiendo del valor del parámetro.

En UML los paquetes se representan como carpetas (fig ) que pueden presentar relaciones de dependencia o de generalización entre ellos.



En el ejemplo de la figura
1.11 existen tres paquetes (que aparecen vacíos, es decir, con su contenido encapsulado), con dos de ellos dependiendo del Modelo del Mundo. Una dependencia puede ir acompa nada de una explicación del tipo de dependencia de que se trate, utilizando estereotipos (ver ).

Una interfaz (interface) especifica un conjunto de operaciones en un elemento del modelo, en este clase, que describe el comportamiento visible de dicho elemento fuera del elemento. La representación gráfica es una línea terminada en un círculo. En el ejemplo de la figura , la clase String se utiliza dentro de hastable, gracias a que implementa la interfaz Hashable (el método hash) y la interfaz Comparable (el método isEqual). Ejemplo de interfaz

>

En algunas ocasiones es necesario describir que una clase está relacionada bien con un objeto de una o bien (exclusivo) con un objeto de otra. Este tipo de relación xor exclusiva se representa es una línea punteada que une dos asociaciones junto con la aclaración de la restricción que rige sobre ellas. En la figura 3.8 un automovil puede tener como due no una persona o una empresa, pero no ambos.

Una clase asociación (association class) es un elemento de modelado que tiene propiedades tanto de asociación como de clase. Una clase asociación puede ser vista tanto como una asociación que también tiene propiedades de clase, o como una clase que también tiene propiedades de asociación. Se representa gráficamente como una clase unida por una línea punteada a una asociación.


En la figura 3.9 existe una relación entre Muro y Ventana, la cual tiene como detalle un objeto de la clase Posición. Cabe notar que este objeto no podría tomarse como atributo de Muro o Ventana, ya que el contexto de su existencia está dado precisamente por la relación entre las dos clases.

Aunque las asociaciones suelen ser binarias la forma más general de asociación es una asociación n-aria (n-ary association). Se trata de una forma de expresar una relación entre tres o más clases. Cada instancia de la asociación es una n-tupla de valores de las clases respectivas. Se representa como un rombo del cual salen líneas de asociación a las clases. En la figura 3.10 podemos ver una relación ternaria entre las clases Year, Team y Player. A cada terna de objetos a no, equipo, jugador corresponde un objeto de tipo Record (clase de asociación).


No hay comentarios:

Publicar un comentario