Diagramas de clases

Diagramas de clases.

Un diagrama de clases es una herramienta fundamental en el modelado de sistemas orientados a objetos, permitiendo visualizar la estructura estática de un sistema de software. En otras palabras, representa las "piezas" que componen el sistema y cómo se relacionan entre sí.

Elementos

  1. Clases: Las clases son los bloques fundamentales del diagrama, representando conjuntos de objetos que comparten características y comportamientos similares. Se representan como rectángulos con el nombre de la clase en la parte superior.
  2. Atributos: Los atributos definen las propiedades o características individuales de cada objeto dentro de una clase. Se representan dentro del rectángulo de la clase y se escriben como nombre_atributo: tipo_dato.
  3. Operaciones: Las operaciones, también conocidas como métodos, representan las acciones que pueden realizar los objetos de una clase. Se representan dentro del rectángulo de la clase y se escriben como nombre_operacion(): tipo_retorno(parámetros).
  4. Relaciones: Las relaciones representan las conexiones o interacciones entre las clases. Existen diferentes tipos de relaciones, como:

    1. Asociación: Una relación entre dos clases donde una instancia de una clase puede estar relacionada con cero o más instancias de la otra clase. Se representa por una línea simple entre las clases.


    2. Agregación: Una relación de asociación donde una clase (parte) pertenece a una clase (todo), pero puede existir independientemente de ella. Se representa por una línea con un diamante en el extremo de la parte.


    3. Composición: Una relación de agregación fuerte donde la parte no puede existir independientemente del todo. Se representa por una línea con un diamante negro en el extremo de la parte.


    4. Herencia: Una relación donde una clase (clase hija) hereda las características y comportamientos de otra clase (clase padre). Se representa por una flecha triangular que apunta desde la clase hija a la clase padre.


Visibilidad.

La visibilidad se refiere a si un elemento de la clase es visible desde fuera de la clase, como se muestra en la Figura. Representar la visibilidad es opcional en un diagrama de clases.
  • La visibilidad pública, indicada con un símbolo +, significa que el elemento es visible desde fuera de la clase. 
  • La visibilidad privada, indicada con el símbolo –, significa que el elemento es visible sólo desde dentro de la clase que lo define y, por lo tanto, está oculto a otras clases. 
  • La visibilidad protegida, indicada con el símbolo #, significa que el elemento es visible desde dentro de la clase que lo define y dentro de todas las subclases de la clase.


Ejemplo.


En este diagrama de clases de ejemplo, hay dos formas de relación de agregación:
  1. La forma pálida indica que la Cuenta de clase usa AddressBook, pero no necesariamente contiene AddressBook
  2. La forma oscura de Agregación compuesta indica la propiedad o contención por parte de las Clases de destino (en el extremo del diamante) de las Clases de origen.

Clase.

Se representa mediante un rectángulo con 3 secciones; en la parte superior se encuentra el nombre, en el centro los atributos o propiedades y en la última los métodos.


Conectores.

Asociación.

Una Asociación implica que dos elementos del modelo tienen una relación, generalmente implementada como una variable de instancia en una o ambas Clases.

Generalización.

Una generalización se utiliza para indicar herencia.


Composición.

Una Composición se utiliza para representar un elemento que se compone de componentes más pequeños, normalmente en un diagrama de Clase o Paquete.


Agregación.

Un conector de Agregación es un tipo de asociación que muestra que un elemento contiene o está compuesto


Composición vs agregación.

Tanto la composición como la agregación son tipos de relaciones entre objetos en la programación orientada a objetos (POO), que permiten modelar la forma en que las partes de un sistema se relacionan entre sí. Sin embargo, existen diferencias clave entre ambas:

Composición:

  • Definición: Una relación fuerte donde un objeto ("parte") forma parte integral de otro objeto ("todo") y no puede existir de forma independiente. La existencia del "todo" implica la existencia de la "parte".
  • Características:
    • Dependencia de existencia: La "parte" se crea y destruye junto con el "todo". Si se elimina el "todo", la "parte" también se elimina.
    • Relación biunívoca: Un objeto "parte" solo puede pertenecer a un único objeto "todo" a la vez.
    • Ejemplo: Un coche se compone de ruedas, un motor y un chasis. Si se destruye el coche, las ruedas, el motor y el chasis también dejan de existir. Un coche no puede tener ruedas, motor y chasis que pertenezcan a otro coche al mismo tiempo.

Agregación:

  • Definición: Una relación débil donde un objeto ("parte") pertenece a otro objeto ("todo"), pero puede existir de forma independiente. La existencia de la "parte" no depende de la existencia del "todo".
  • Características:
    • Dependencia de existencia: La "parte" puede existir independientemente del "todo".
    • Relación unidireccional: Un objeto "parte" puede pertenecer a varios objetos "todo" al mismo tiempo.
    • Ejemplo: Un estudiante puede tomar varios cursos. Un curso puede tener varios estudiantes inscritos. Un estudiante puede estar inscrito en varios cursos a la vez. Si un alumno se da de baja, el curso seguirá existiendo.

En resumen:

CaracterísticaComposiciónAgregación
Dependencia de existenciaFuerteDébil
Relación entre partesBiunívocaUnidireccional
Ciclo de vidaLas partes se crean y destruyen con el todoLas partes pueden existir independientemente del todo

Utilidad de los diagramas de clase.

Los diagramas de clases son herramientas muy útiles para:

  1. Visualizar la estructura de un sistema: Permiten comprender de forma clara y organizada las clases que componen el sistema, sus atributos, operaciones y relaciones.
  2. Comunicar el diseño del sistema: Facilitan la comunicación entre desarrolladores, analistas y otros interesados en el proyecto, ya que proveen una representación visual del sistema.
  3. Documentar el sistema: Sirven como documentación del diseño del sistema, siendo un recurso valioso para futuras modificaciones o mantenimientos.
  4. Encontrar y corregir errores de diseño: Al visualizar las relaciones entre las clases, pueden identificarse errores o incoherencias en el diseño del sistema.
  5. Generar código: Algunas herramientas permiten generar código a partir de diagramas de clases, lo que agiliza el proceso de desarrollo.

Resumen.

Los diagramas de clases son una herramienta esencial para el diseño, análisis y documentación de sistemas orientados a objetos. Permiten visualizar la estructura estática del sistema, facilitando la comprensión, comunicación y mantenimiento del mismo.

Bibliografía.

Hassan Gomaa. (2011). Software Modeling and Design : UML, Use Cases, Patterns, and Software Architectures. Cambridge University Press.

Comentarios

Entradas más populares de este blog

UML

Modelado de clases