Modelado Estructural

Introducción

El modelado estructural sirve para describir los diferentes tipos y relaciones estáticas existentes entre los diferentes objetos de un sistema. Al igual que un arquitecto crea los planos de un edificio antes de su construcción, a la hora de desarrollar software, debemos modelar correctamente el sistema previamente al desarrollo, pudiendo incorporar el patrón o los patrones de diseño que nos ayuden a optimizar la solución a un determinado problema. La principal forma de emplear el modelado estructural es mediante el uso de:

  • Diagramas de clases, normalmente están formados por Clases, Interfaces y Relaciones (de dependecia, de realización, de generalización, de asociación -agregación y composición-, etc).
  • Diagramas de casos de uso, que describen las relaciones y las dependencias entre un grupo de casos de uso y los actores participantes en el proceso.
  • Diagramas de Secuencia, que muestran la secuencia de intercambio de mensajes, datos u operaciones del sistema o de ciertos componentes en un momento dado.

A continuación, pasaremos a describir los principales elementos de los diferentes diagramas de modelado estructural.


Diagrama de Clases

Los diagramas de clases son una parte mas del modelado estructural de software, nos servirán para modelar las clases de un sistema, incluyendo el modelado de patrones, forman parte de la denominada vista estática del diseño del sistema y son usados para dar forma a distintos aspectos como:

  • - Vocabulario del Sistema (identificar clases para abstracciones relevantes del problema).
  • - Colaboraciones (identificar clases e interfaces cuya interacción produzca el comportamiento deseado).
  • - Esquema lógico de Bases de Datos.

Además, pueden presentar diferentes perspectivas o fines:

  • - Modelado conceptual, en el que se representan los conceptos del dominio en cuestión del problema.
  • - Diagrama de especificación, en el cual representamos los distintos tipos de entidades que se representan en una interfaz.
  • - Diagrama de implementación, donde se representan las clases tal y como serán implementadas.

Los elementos principales de un diagrama de clase, como ya hemos comentado anterirmente, serían:

  • Clases: Una clase es la unidad básica que encapsula la descripción abstracta de una agrupación de objetos y define los atributos y los métodos de esa serie de objetos. Todos los objetos de esta clase (instancias de esa clase) tienen el mismo comportamiento y el mismo conjunto de atributos (cada objeto el suyo propio).

    A modo de ejemplo podriamos definir una clase llamada Coche para representar de forma abstracta todos los objetos coche, un objeto coche es la representación concreta de la clase Coche, así tendríamos por ejemplo un objeto coche con el propietario Luis, modelo BMW y precio 50.000. La representación de la clase Coche puede verse a continuación.

    Clase coche

    Las clases se representan por cuadrados o rectángulos, con el nombre de la clase y, según sea necesario, los atributos y operaciones, todo ello en compartimentos diferenciados.

  • Atributos: Lo normal para representar los atributos de una clase es mostrar su nombre y valor, pero también puede mostrarse su valor inicial, privacidad (+ Indica atributos públicos; # Indica atributos protegidos; - Indica atributos privados) u otras propiedades.
  • En el ejemplo del coche, tendríamos como atributos de la clase Coche: propietario, modelo y precio.

  • Operaciones: Las operaciones o métodos también se muestan al menos con su nombre, pudiendo mostrar sus parámetros y valores de retorno, así como su privacidad.
  • En el ejemplo del coche, tendríamos como operaciones o métodos, una sola operación, cambiarPropietario() que será un método que servirá para cambiar el atributo propietario de la clase Coche. A modo de resumen:

    Resumen

  • Interfaces: Las interfaces son clases abstractas, por lo que no puede haber objetos o instancias que sean creadas directamente a partir de ellas, por lo que contendrán métodos u operaciones, pero no atributos. Esto hace que haya clases que sí que pueden heredarse de las interfaces pudiendo así instanciar objetos que realicen las operaciones recogidas en las interfaces.

    En el siguiente ejemplo podemos ver la forma de representación, una interface no tiene atributos, sólo métodos.

    Interface vehiculo

  • Asociaciones: Una asociación representa una relación entre clases, pero además aporta la semántica y la estructura de las conexiones y relaciones entre objetos, por lo que podría decirse que las asociaciones son los mecanismos que permiten a los objetos comunicarse entre sí. Además, pueden especificar el proposito de la asociación, pudiendo ser unidireccionales o bidireccionales. En cada extremo de la asociación se incluye 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.
    Los diferentes tipos de asociaciones son:
  • Herencia (Especialización/Generalización): Esta relación indica que una subclase hereda los métodos y atributos especificados por una superclase, la subclase además de contar con sus propios métodos y atributos, tendrá los atributos y métodos visibles de la superclase.
    Se representa por una línea terminada en un triángulo en el lado de la superclase.
  • Agregación: Usada cuando se requiere componer objetos cuyo tipo sea la unión de otros tipos definidos por el desarrollador.
    Se representa por una línea terminada en un rombo blanco en el lado del agregador.
  • Composición: Es un caso de agregación, pero con una relación más potente, de forma que el agregador no tiene sentido sin el agregado.
    Se representa por una línea terminada en un rombo negro en el lado del agregador.
  • Asociación: Representada por una linea que une las clases, permite asociar objetos que colaboran entre si. No es una relación fuerte, por lo que el tiempo de vida de un objeto no depende del otro.
  • Dependencia o Instanciación: Se denota por una flecha punteada y su uso más habitual es denotar la dependencia que tiene una clase de otra.

A continuación de muestran ejemplos de los diferentes tipos de asociaciones en el modelado de clases.

ejemplos asociaciones


Diagrama de Casos de Uso

Como ya comentamos más arriba, los diagramas de casos de uso forman parte del modelado estructural de software de un sistema, describen las relaciones y las dependencias entre un grupo de acciones que se pueden realizar en el sistema y los actores participantes en dicho proceso. Cabe destacar que los diagramas de casos de uso no están pensados para representar el diseño en sí del sistema, por lo que no puede describir sus elementos internos. Por lo tanto, sirven para facilitar la comunicación con los futuros usuarios del sistema, y con el cliente, siendo muy útiles para determinar las características necesarias que tendrá el sistema: describen qué es lo que debe hacer el sistema, pero no la forma en que lo hace.

Visto esto, sus componentes principales serían:

  • Caso de Uso: Describe un grupo de actividades del sistema que produce un resultado concreto y tangible, siempre desde el punto de vista de los actores. Podrían verse como descriptores de las interacciones típicas entre los usuarios y el sistema, representando el interfaz externo del mismo y especificando qué requisitos de funcionamiento debe tener.
    A la hora de diseñar un diagrama de casos de uso hay que tener en cuenta las siguientes reglas:

    • - Cada caso de uso está relacionado como mínimo con un actor.
    • - Cada caso de uso es un iniciador de una secuencia más amplia de acciones del sistema.
    • - Por lo tanto, cada caso de uso lleva al desarrollo de un resultado relevante con valor intrínseco.
    Además, los casos de uso pueden tener relación con otros casos de uso:

    • Include: Especifica una situación en la que un caso ocurre dentro de otro.
    • Extends: Señala que un caso de uso será extendido por otro en algún momento de la ejecución.
    • Generalización: Un caso de uso hereda las características del "Super Caso", de forma similar a la herencia de clases.
  • Actor: Un actor es una entidad externa al sistema que interacciona con él mediante un caso de uso. Los actores pueden ser gente real, otros ordenadores o algún evento externo. Hay que tener claro que los actores representan los diferentes roles de los posibles usuarios del sistema y no a personas o maquinas en concreto.

Para verlo mejor, a continuación podemos ver el diagrama de casos de uso de un cajero automático.

ejemplo casos de uso


Diagrama de Secuencia

Otra parte del modelado estructural son los diagramas de secuencia, son diagramas que muestran la forma o secuencia en que se invocan las acciones, métodos o paso de mensajes entre ciertos componentes del sistema en un momento dado.

Los diagramas de secuencia ponen especial énfasis en el orden y el momento en que se envían los mensajes a los objetos, representandose visualmente la creación de objetos en el tiempo. En los diagramas de secuencia, los objetos están representados por líneas intermitentes verticales (emulando al eje temporal), con el nombre del objeto en la parte más alta.

Estos mensajes son enviados de un objeto a otro en forma de flechas con los nombres de la operación (o método) y los parámetros.

Si se prentende que el diagrama sea una herramienta para el desarrollador, es importante que los nombres de clases, objetos, métodos y argumentos se correspondan con los nombres que llevarán en el propio código.

En el siguiente diagrama de secuencia, se puede ver como se van creando los objetos, teniendo en cuenta que el paso del tiempo se propaga hacia abajo en el diagrama, para este ejemplo se muestra la creación de un laberinto con dos habitaciones y una puerta que une ambas habitaciones.

ejemplo diagrama de secuencia