Diagramas estáticos en el Modelamiento de Datos

0

 Autor: Mauro Benito Montoya Arenas (mauro2017pre@gmail.com) 

DIAGRAMAS ESTÁTICOS EN EL MODELAMIENTO DE DATOS

Diagrama de clases

Es uno de los diagramas mas comunes. Es estático (nos dice la cantidad de componentes que tiene la clase). Para trabajar con este diagrama usamos lo que se conoce como un clasificador. En el clasificador colocamos el nombre de la clase (parte superior), los atributos (parte del medio) y las operaciones (en la parte de abajo). Ejemplo:


Objeto:

Se puede dar el caso que necesitemos denotar un objeto. Tenemos 3 formas de hacerlo: primero colocando el nombre de la instancia (objeto) y después de 2 puntos el nombre de la clase, o poniendo 2 puntos y el nombre de la instancia o igual que la segunda manera pero sin la raya separadora (esta forma y la anterior indica que los objetos son anónimos).


Atributos:

Los atributos son propiedades, datos que guarda la clase para su funcionamiento. El signo que va antes del atributo corresponde a su visibilidad. Después se le pone un nombre, seguido de 2 puntos y el tipo de la variable. Ejemplo:

Operaciones:

Después tenemos a las operaciones, que corresponden a las funciones que el objeto va a hacer. Las operaciones vendrían a hacer los métodos de la clase. Primero va la visibilidad, el nombre, seguido de 2 puntos y el tipo de retorno. Ejemplo:

Visibilidad:


-> + público: Cualquier objeto desde el exterior puede tener acceso a ese atributo u operación.
-> - privado: Solamente el mismo objeto puede tener acceso a ese atributo u operación.
-> # protegido: Los objetos que no formen parte de la cadena de herencia de esa clase van a ver las operaciones o los atributos. 
-> ~ paquete: Las clases definidas en el mismo paquete pueden ver a ese producto u operación

Estereotipos:

Permiten extender UML. La nomenclatura es: <<nombre>> (el nombre indica como se esta especializando). Nos permite definir nuestros propios elementos. Lo usamos en elementos que no forman parte de UML. pero que son similares a alguno de UML.  Los estereotipos de las clases van en la parte de arriba del nombre de la clase. Ejemplo:

Asociación:

La asociación se lee como: "tiene un". Se muestra con una línea y a veces con una flecha abierta. Se puede indicar por un verbo el tipo de asociación (la direccion se determina con el > o <).  Ejemplos: La segunda imagen se lee Maestro enseña Alumno; la tercera imagen se lee Alumno Aprende de Maestro.

La asociación también se puede dar de una clase a varias clases. Ejemplo:

Multiplicidad:

También se le llega a llamar cardinalidad e indica el numero de objetos en una asociación. Puede haber distintos rangos: ->1 (uno), * (muchos) y 1...* (uno a muchos). Ejemplo: la primera imagen señala que un maestro tiene un alumno, la segunda relación señala que un maestro tiene muchos alumnos y la tercera relaciona señala que un maestro tiene de uno a muchos alumnos.

Asociación Reflexiva:

Se usa cuando el objeto de una clase puede actuar den mas de un rol. Ejemplo: El Coordinador de una academia también puede actuar como Maestro. Ejemplo:


Clase Asociada:

Se da cuando existe una asociación entre 2 clases. Aunque esa asociación se va a llevar a cabo a través de otra clase (que tiene sus propios atributos y operaciones). Ejemplo: 

Agregación:

La agregación lo denotamos con una línea que finaliza en un rombo que esta blanco por dentro. En la agregación nosotros tenemos un objeto contenedor y un objeto que forma parte del contenedor. El Contenedor y la Parte tienen existencia por separado (si uno deja de existir el otro sigue existiendo). Ejemplo: Si se destruye una biblioteca los libros siguen existiendo. (Es parte de - esta hecho de)

Composición:

Es similar a la agregación. Pero si el contenedor se destruye también se destruyen las partes. Ejemplo: Si se destruye el edificio los departamentos también se destruyen.

Generalización:

Sirven para describir la herencia. Lo denotamos con una flecha vacía y se lee como "es un". Ejemplo: El Reptil es un Animal, el Perro es un Mamífero.

Realización:

Muestra un implementación (nos va a demostrar la relación entre una interfaz y una componente). Se dibuja con una flecha en línea punteada. Se lee como "Implementa a". Ejemplo:

Dependencia:

Una clase usa otra clase de alguna manera. Se lee como "Usa a" y para denotarlo usamos una flecha simple punteada. Ejemplo: Cliente usa a proveedor (un cambio en el proveedor va a afectar al cliente).

Notas:

Nos sirven para dar aclaraciones sobre algo. Unimos la nota a la clase aclarada con una linea punteada. Se lee como "Esta nota es para" 

Restricciones:

Muestra limitaciones o condiciones de un objeto en un diagrama. Podemos indicar precondiciones o postcondiciones. Pueden colocarse en notas, o en algunos casos en el mismo elemento. La multiplicidad es un tipo de restricción y se usan "{}" para indicar la restricción. Ejemplo: Motor usa Gasolina (condición: gasolina > 0).

Clase Abstracta:

Es un tipo especial de clase que puede ser instanciada (pero otras clases pueden heredar de ella). Necesitamos clases que desciendan de esta para que se lleve a cabo la instanciación. El titulo de la clase abstracta tiene que estar en itálica (aplica lo mismo para los métodos y objetivos). Ejemplo: Herramienta es una clase abstracta (Taladro y sierra son 2 herramientas distintas) y también la función trabajar (el método de trabajo es distinto en el taladro y sierra)

Interfaz proveedor:

La clase va a proveer una implementación a la interfaz en particular. Podemos denotarlo mediante un lollipop. Ejemplo:

Interfaz requerida:

La clase requiere una interfaz para alguna funcionalidad (requiere de otra clase que lo implemente. Ejemplo:

Relación entre interfaz requerida y proveedor:

Lo podemos denotar de dos maneras:

Templates:

Es un elemento parametrizado que puede generar otros elementos parametrizados. Cuando creamos una clase y hacemos uso de atributos u operaciones debemos indicar de que tipo son (entero, flotante, etc.). Digamos que yo creo una clase para sumar variables enteras, pero requiero crear otra clase para sumar variables de tipo float. Entonces, en lugar de crear 2 clases podemos crear una clase y aplicar Template. En lugar de definir variables como int, float, etc. Definimos una variable T (template) que puede convertirse en int, float, etc. (según convenga). Ejemplo: Se puede denotar de las dos maneras (izquierda la manera larga y derecha la manera corta)

Diagrama de objetos (instancias)

Va a complementar el diagrama de clases. En este diagrama vemos los objetos y como interactúan entre ellos. Va a estar enfocado a la parte lógica del objeto. Así se puede ver los objetos:


El diagrama de objetos nos muestra como los objetos interactúan entre ellos. Los objetos se conectan por un alinea que es nombrada. Cuando hay una relación entre objetos y clases, esta debe mostrarse en ambos diagramas.

Ejemplo: 
- Primero veamos la siguiente relación de clases:

Ahora veamos como las instancias de estas clases interactúan entre si:

Tenemos que distribuidor va a tener de uno a muchos automóviles (Ana tiene 3 y Aldo tiene 1). Comprador va a comprar de uno a muchos automóviles (Susana compra 2, Nayeli compra 1 y Luis renta 1). 

Diagrama de despliegue (Deployment)

Nos da una vista (visualización de la topología) física del sistema. Es un mapa que nos dice que software va a ejecutarse en que hardware. Entonces, nos va a mostrar la configuración en tiempo de ejecución. Además, modela los elementos lógicos a los elementos físicos y como se comunican. Tenemos 2 elementos principales en el diagrama de despliegue: Los nodos (ejecutan los artefactos) y los artefactos (archivos ejecutables o bibliotecas/librerías). El diagrama de despliegue también nos va a servir para identificar las dependencias de un sistema con otro sistema. Ejemplo  de un diagrama de despliegue:


Nodo

El nodo es un recurso físico que va a contener software. Se muestra como una caja. Podemos hacer uso de dos estereotipos: 
<<device>>: Algún tipo de hardware 
<<execution environment>>: Software que contiene a otro software, como un sistema operativo. 

Artefactos

Van a ser archivos que se despliegan (ejecución adentro de los nodos) en el sistema (jar, dll, exe, bin, config). Se denota por <<artifact>> y/o un icono. Ejemplo: Podemos representar el nodo y artefacto de las 3 maneras que ven en el dibujo (izquierda, medio y derecha).

Manifestación

Los artefactos implementan a los componentes como una manifestación. Ejemplo: Tengo el componente administrador que lo va a implementar un artefacto en particular (Accesos .dll esta implementando aquello del componente Administrador).

Caminos/rutas de Comunicación

Se usa un estereotipo con el protocolo de comunicación. Se coloca entre los nodos que se comunican. Indica como se comunican. Puede ser: HTTP, TCP/IP, RMI,JDBC, ODBC, RPC, asynchronous, synchronous, web services. Ejemplo:


Diagrama de paquetes

Nos sirve para organizar el sistema (creamos una estructura al agrupar los elementos relacionados entre si o que sean similares). Además, nos permite tener una vista de alto nivel del sistema: vemos cuales son sus componentes principales, podemos observar como se relacionan esos componentes y un sistema complejo queda dividido en módulos que son fáciles de manejar. Ayuda a ver fácilmente las dependencias y se pueden empaquetar gran variedad de elementos.

En el diagrama de paquetes podemos tener paquetes dentro de otros paquetes. Se pueden empaquetar entidades de datos o de negocios. Las clases que se encuentran en la misma cadena de herencia deben de estar en el mismo paquete. Ejemplo de un paquete y debajo un anidamiento de paquetes: 

En la siguiente imagen se muestra 3 clases relacionadas (Aritmética, Trigonometría y Calculo) unidas con una línea y circulo con una cruz (lo que se conoce como conector de contenedor) a un paquete Matrix o Matemáticas. Este enunciado se puede expresar de 3 maneras (izquierda, derecha o como en la parte de abajo).

Los paquetes también pueden contener casos de uso:

Los paquetes también van a tener visibilidad:
Publico => puede ser usado por alguien afuera del paquete
Privado => Solo puede ser usado adentro del paquete, se recomienda para clases de ayuda

Relaciones entre paquetes

Podemos tener 3 tipos de relaciones entre paquetes: Dependencia, Generalización y Refinamiento. 

Dependencia:
Un paquete depende de otro paquete para que haga su trabajo. Ejemplo: Automóvil depende de caminos. 

Generalización:
Es un uso de la herencia. Se lee "es un tipo de, es un". Se denota con una flecha con una cabeza vacía. Ejemplo: Mamífero es un animal.

Refinamiento:
Un paquete refina (mejora), tiene los mismos elementos pero provee mas detalles. Se denota con una flecha punteada con una cabeza abierta. Ejemplo: Alfa refina a prototipo.

Acceso

Un paquete puede hacer uso de los elementos públicos de otro paquete a través de access. Ejemplo: Aplicación:: Cálculo2

Importación

Los elementos se hacen disponibles para el otro paquete. Trae todos los elementos. Ejemplo: Importamos todo el paquete Aplicación a Calculo2.

Merge de paquetes

Tenemos 2 paquetes: Source (fuente) y Target (objetivo). Vamos a llevar la unión de 2 objetivos. Define una generalización implícita entre los elementos en el paquete source y los elementos en el paquete target que tiene el mismo nombre. Source depende de target para expandir las definiciones de sus elementos.

Reglas del Merge:
- Los elementos privados del target no se unen con el source.
- UML permite tener herencia múltiple cuando se hacen merge de paquetes, cuidado con eso en algunos lenguajes de programación.
- Cualquier subpaquete dentro del target es adicionado al resultado final.
- Si el source y el target tienen el mismo subpaquete con el mismo nombre, se hacen merge entre los dos.

Ejemplo: Tenemos el paquete Estudiantes y el paquete Alumnos. En el paquete Estudiantes tengo la clase Estudiante y el  paquete Alumnos tiene una  clase llamado Estudiante.

Si hacemos el merge entre estos paquetes tenemos que la clase Estudiante tiene como atributos: Nombre y Edad. Como operaciones tendremos: ObtenerPromedio() y ListarActividades(). Se han combinado los atributos y operaciones de ambos. Las uniones con las otras clases tampoco se modifican.


Diagrama de Máquina de Estados

Nos sirve para mostrar el comportamiento del sistema, ya sea: Caso de uso, Clase y Sistema completo. Estos diagramas descienden de las Máquinas de estado finitos. 

Hay 2 tipos de diagramas de estado: - Comportamiento (especifica la implementación de objetos) y de Protocolo (No será implementado y describe una secuencia de eventos son mostrar el comportamiento especifico del objeto).

El estado lleva en su interior actividades. La transición lleva una etiqueta que se conoce como firma. Ejemplo: 
<gatillo>[<guarda>]/<efecto>  => Gatillo es el evento
                                                  => Guarda es la condición
                                                  => Efecto es la actividad que sucede durante la transición

Denotación de los estados:
- Lo hacemos mediante cuadramos con esquinas redondeadas

Los estados pueden tener actividad (puede estar activo o inactivo). Si la maquina de estados tiene concurrencia puede estar activo uno o mas estados al mismo tiempo. Si la maquina de estados no tiene concurrencias solo un estado puede estar activo. 
Dentro del estado podemos tener 3 actividades:
- Entry: Es la actividad que se lleva a cabo cuando se arranca esa actividad
- Do: Es la actividad normal que lleva el estado cuando permanece activo
- Exit: Es la actividad que se lleva cuando termina el estado

Ejemplo:

Pseudoestados

Los pseudoestados no son estados como tal del objeto. Adiciona información sobre lo que sucede durante las transiciones. No es el estado actual del objeto, solo muestra algo que sucede cuando se va de un estado a otro.

Initial y Terminate:
Initial o Inicial es un vértice que nos sirve como punto de entrada a la maquina (nos lleva al primer estado del sistema). Lo representamos como un circulo relleno. 
Terminate o Terminación indica que la maquina ha finalizado su ejecución. Lo representamos con una X.

Junction:
La unión permite que varias transiciones converjan en una sola o también que la transición tome determinado estado basado en condiciones.
Ejemplo: En la primera imagen 3 estados convergen a uno, en la segunda imagen un estado se divide en 2 (basado en condiciones).

Choice:
Es un punto de decisión. Se selecciona entre 2 o mas estados basado en condiciones. Se representa como un diamante. Ejemplo:

Estados compuestos:
Es un estado que contiene otros estados. Final nos indica que se ha completado el trabajo interno del estado compuesto. Ejemplo:

Estados compuesto ortogonal:
Lo usamos cuando queremos que 2 cosas sucedan al mismo tiempo. Ejemplo:

Fork Join:
Los usamos para sincronizar una concurrencia. Fork divide para tener dos o mas estados que suceden concurrentemente. Join es usado para unir esas concurrencias y tener un solo hilo de ejecución, no puede ir al siguiente estado hasta que no estén presentes todos los estados. Ejemplo: Estado 15 y 17 tienen que haber finalizado para que se efectúe el Join.

Historia

Es un elemento que recuerda los estados pasados. Si el estado compuesto es interrumpido, la historia le permite regresar a un estado. Tenemos 2 tipos de historia:

Deep: Profunda, regresa al estado mas reciente que estaba activado y su símbolo es un circulo con H*.
Shallow: Regresa al estado mas exterior o inicial y se representa con un circulo con H.

Ejemplo: En la primera imagen después del apagón la historia Shallow te lleva al inicio (H). Y en la segunda imagen regresa a la Escanea (el ultimo estado antes que pasara el apagón).

Maquinas de estados de protocolo

- No modelan comportamiento sino una secuencia de estados y sus transiciones.
- No se muestran las actividades del elemento o las transiciones.
- Es importante colocar Nombre {protocol}
- No son para implementar
- Se usan mucho para modelar interfaces.

Entradas que pueden interesarte

Sin comentarios

Artículos populares

Procesamiento digital de señales (ejemplos usando matlab)

Procesamiento digital de señales (ejemplos usando matlab)

Autor: Mauro Montoya Arenas   PROCESAMIENTO DIGITAL DE SEÑA…

¿Como configurar un microcontrolador PIC? - Primer Hola Mundo

¿Como configurar un microcontrolador PIC? - Primer Hola Mundo

Configuración de un PIC - Hola Mundo En esta oportunidad ap…

PROYECTO: SISTEMA DE TRÁFICO VEHICULAR UTILIZANDO EL PIC 18F4550

PROYECTO: SISTEMA DE TRÁFICO VEHICULAR UTILIZANDO EL PIC 18F4550

Autor: Alexis                                       Contac…

¿Qué son los Sistemas embebidos?

¿Qué son los Sistemas embebidos?

Sistemas embebidos  🔴 En este articulo encontrarás: - Func…