Diagrama de Clase


Diagramas de Clase en UML
Información sobre la plantilla
UMLDC.jpg
Desarrollador"Grady Booch, James Rumbaugh, Ivar Jacobson"

Diagramas de Clase en UML . El UML (Lenguaje Unificado de Modelado), es una de las herramientas mas emocionantes en el mundo actual del desarrollo de sistemas. Esto se debe a que los creadores de sistemas generar diseños que capturen sus ideas en forma convencional y bacín de aprender para comunicarlas a otras personas. El UML es la creación de Grady Booch, James Rumbaugh e Ivar Jacobson. “Los tres Amigos” como se apodaron estos tres grandes utilizaban metodologías diferentes para el diseño de software hasta que en los años 90 decidieron unirse y trabajar en conjunto en una solo metodología, el UML está compuesto pro diversos elementos gráficos que se combinan para conformar diagramas, con las mismas finalidades que es presentar diversas perspectivas de un sistema a las cuales se conoce como modelo. En este artículo nos estaremos refiriendo principalmente al Diagrama de Clases.

Diagrama de Clases

Un diagrama de clases sirve para visualizar las relaciones entre las clases que involucran el sistema, las cuales pueden ser asociativas, de herencia, de uso y de agregación, ya que una clase es una descripción de conjunto de objetos que comparten los mismos atributos, operaciones, métodos, relaciones y semántica; mostrando un conjunto de elementos que son estáticos, como las clases y tipos junto con sus contenidos y relaciones. Un diagrama de clases esta compuesto por los siguientes elementos: Clase: atributos, métodos y visibilidad. Relaciones: Herencia, Composición, Agregación, Asociación y Uso.

Notación de Clase

Las clases se representan por rectángulos que muestran el nombre de la clase y opcionalmente el nombre de las operaciones y atributos. Los compartimientos se usan para dividir el nombre de la clase, atributos y operaciones. Adicionalmente las restricciones, valores iniciales y parámetros se pueden asignar a clases.

En el siguiente diagrama la clase contiene el nombre de la clase en el compartimiento más alto, el compartimiento siguiente detalla los atributos, con el atributo del “centro” mostrando los valores iniciales. El último compartimiento muestra las operaciones, las operaciones setWidth, setLength y setPosition mostrando sus parámetros.

La notación que precede el nombre del atributo u operación indica la visibilidad del elemento, si se usa el símbolo + el atributo y la operación tienen un nivel público de visibilidad, si se usa un símbolo – el atributo u operación es privado. Además, el símbolo # permite definir una operación o atributo como protegido y el símbolo ~ indica la visibilidad del paquete.

Tablas

Una tabla es una clase estereotipada. Esto se dibuja con un pequeño icono de la tabla en la esquina superior derecha. Los atributos de la tabla son «columnas» estereotipadas. La mayoría de las tablas tendrán una clave primaria, siendo uno o más campos los que forman una combinación única usada para acceder la tabla, más una operación de clave primaria que es «PK» estereotipada. Algunas tablas tendrán una o más claves foráneas, siendo uno o más campos que juntos trazan a una clave foránea en una tabla relacionada, más una operación de clave foránea que es «FK» estereotipada.

Atributos y Métodos

Los atributos o características de una Clase pueden ser de tres tipos, los que definen el grado de comunicación y visibilidad de ellos con el entorno, estos son:

  • public (+,): Indica que el atributo será visible tanto dentro como fuera de la clase, es decir, es accsesible desde todos lados.
  • private (-,): Indica que el atributo sólo será accesible desde dentro de la Clase (sólo sus métodos lo pueden accesar).
  • protected (#,): Indica que el atributo no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de las subclases que se deriven (ver Herencia).

Los métodos u operaciones de una clase son la forma en como ésta interactúa con su entorno, éstos pueden tener las características:

  • public (+,): Indica que el método será visible tanto dentro como fuera de la Clase, es decir, es accsesible desde todos lados.
  • private (-,): Indica que el método sólo será accesible desde dentro de la clase (sólo otros métodos de la clase lo pueden accesar).
  • protected (#,): Indica que el método no será accesible desde fuera de la clase, pero si podrá ser accesado por métodos de la clase además de métodos de las subclases que se deriven (ver herencia).

Relaciones

Ahora ya definido el concepto de Clase, es necesario explicar como se pueden interrelacionar dos o más clases (cada uno con características y objetivos diferentes). Antes es necesario explicar el concepto de cardinalidad de relaciones: En UML, la cardinalidad de las relaciones indica el grado y nivel de dependencia, se anotan en cada extremo de la relación y éstas pueden ser: – uno o muchos: 1..* (1..n) – 0 o muchos: 0..* (0..n) – número fijo: m (m denota el número).

Herencia

Indica que una subclase hereda los métodos y atributos especificados por una superclase, de esta forma la subclase además de poseer sus propios métodos y atributos, poseerá las características y atributos visibles de la superclase (public y protected), ejemplo:

Agregación

Para modelar objetos complejos, no es suficiente con los tipos de datos básicos que proveen los lenguajes:

  • Enteros, reales y secuencias de caracteres. Cuando se requiere componer objetos que son instancias de clases definidas por el desarrollador de la aplicación, tenemos dos posibilidades:
  • Por Valor: Es un tipo de relación estática, en donde el tiempo de vida del objeto incluido esta condicionado por el tiempo de vida del que lo incluye. Este tipo de relación es comúnmente llamada Composición (el Objeto base se construye a partir del objeto incluido, es decir, es "parte/todo").
  • Por Referencia: Es un tipo de relación dinámica, en donde el tiempo de vida del objeto incluido es independiente del que lo incluye. Este tipo de relación es comúnmente llamada Agregación (el objeto base utiliza al incluido para su funcionamiento).

Asociación

La relación entre clases conocida como Asociación, permite asociar objetos que colaboran entre si. Cabe destacar que no es una relación fuerte, es decir, el tiempo de vida de un objeto no depende del otro.

Dependencia o Instanciación

Representa un tipo de relación muy particular, en la que una clase es instanciada (su instanciación es dependiente de otro objeto/clase). Se denota por una flecha punteada. El uso más particular de este tipo de relación es para denotar la dependencia que tiene una clase de otra, como por ejemplo una aplicación Gráfica que instancia una ventana (la creación del Objeto Ventana esta condicionado a la instanciación proveniente desde el objeto Aplicación):

Ventajas y Desventajas

Ventajas

  • Genera un código automáticamente.
  • Propone soluciones a algunos errores.
  • Representa las relaciones entre las clases de sistema.
  • Se diseña los componentes de los sistemas.
  • Se protegen los datos.
  • Se posibilita una reducción de acoplamiento.
  • Mas fácil la comunicación entre los programadores, descubrimiento de fallas del sistema en el diseño Mejor diseño del sistema ofrece más documentación.

Desventajas

  • Los diagramas de clases especifican qué clases hay y cómo están relacionadas, pero no cómo interactúan para alcanzar comportamientos particulares.
  • El método tiende hacer muy lento.
  • La instalación es muy costosa

Fuentes