martes, 19 de abril de 2016

Diagrama de clases


¿Qué es un diagrama de clases?
Un diagrama de clases es una representación gráfica que sirve para representar la estructura de un sistema que será implementado utilizando un lenguaje orientado a objetos. Los diagramas de clases se realizan en la fase de diseño del software después de la fase de requisitos. La idea de estos diagramas es representar las clases que tendrá el sistema así como su contenido y sus relaciones con otras clases. La implementación de sistemas medianamente grandes no sería abordable sin este tipo de diagramas, y aunque fuera abordable se tardaría mucho más y sería más fácil cometer errores.

Componentes de un diagrama de clases
Los componentes que describiré son los que se incluyen en UML(Unified Modeling Language) que es el lenguaje de modelado más extendido y más usado en todo el mundo.

Clase
Este es el elemento básico del diagrama de clases. Las clases representan entidades o conceptos. Normalmente cada vez que aparece un sustantivo en un documento de descripción de un sistema ese sustantivo es una clase. En cada clase se definen los atributos y métodos que tendrán los objetos de esa clase. La siguiente imagen es un ejemplo de representación de una clase.

Atributos y métodos
Los atributos y los métodos se muestran con su nombre además de su tipo. En el caso de los métodos también se muestra el tipo de retorno en caso de que retorne algo y el nombre y tipo de sus parámetros. Los atributos pueden tener un valor inicial. Además, los símbolos que se encuentran antes del nombre de los atributos y métodos representan la visibilidad de éstos:
El símbolo – representa atributos privados.
El símbolo + representa atributos públicos.
El símbolo # representa atributos protegidos.

Relaciones
Como he dicho antes las clases se relacionan con otras. En cada relación aparece el nombre del atributo que se usará para representar esa relación y la multiplicidad. Las relaciones que existen son las siguientes: 

Generalización: Esta relación representa la herencia o la extensión de una clase de otra. En la siguiente imagen podemos ver un ejemplo.
 
Asociación: Representa una relación básica entre dos clases. Pueden ser unidireccionales (sólo una de las clases conoce a la otra) o bidireccionales (ambas clases tienen conocimiento de la otra). En la siguiente imagen podemos ver un ejemplo. La primera es una asociación bidireccional que representa que un curso tiene desde 1 hasta varios alumnos y que un alumno puede estar en 0 o varios cursos. La segunda es una asociación unidireccional que representa que una asignatura tiene un único profesor responsable. 

Agregación: Es un tipo de asociación con la que se representa que cada objeto de una de las clases contiene objetos de la otra clase. El objeto contenedor seguirá existiendo aunque los objetos contenidos dejen de existir. 

Composición: Es un tipo de asociación, pero podemos decir que son agregaciones fuertes. La diferencia con las agregaciones es que no tiene sentido que el objeto contenedor siga existiendo si no existen los objetos contenidos.