
En ingeniería de software , un diagrama de clases [ 1 ] en el Lenguaje Unificado de Modelado (UML) es un tipo de diagrama de estructura estática que describe la estructura de un sistema mostrando las clases del sistema , sus atributos, operaciones (o métodos) y las relaciones entre los objetos.
El diagrama de clases es el componente básico del modelado orientado a objetos . Se utiliza para el modelado conceptual general de la estructura de la aplicación y para el modelado detallado, traduciendo los modelos a código de programación . Los diagramas de clases también pueden utilizarse para el modelado de datos . [ 2 ] Las clases en un diagrama de clases representan tanto los elementos principales y las interacciones en la aplicación como las clases que se van a programar.
En el diagrama, las clases están representadas con cajas que contienen tres compartimentos:
- El compartimento superior contiene el nombre de la clase. Está impreso en negrita y centrado, y la primera letra está en mayúscula.
- El compartimento central contiene los atributos de la clase. Están alineados a la izquierda y la primera letra está en minúscula.
- El compartimento inferior contiene las operaciones que la clase puede ejecutar. Además, están alineadas a la izquierda y la primera letra está en minúscula.

En el diseño de un sistema, se identifican varias clases y se agrupan en un diagrama de clases que ayuda a determinar las relaciones estáticas entre ellas. En el modelado detallado, las clases del diseño conceptual a menudo se dividen en subclases. [ 3 ]
Para describir con mayor detalle el comportamiento de los sistemas, estos diagramas de clases pueden complementarse con un diagrama de estados o una máquina de estados UML . [ 4 ]
Miembros
UML proporciona mecanismos para representar los miembros de una clase, como atributos y métodos, e información adicional sobre ellos, como constructores.
Visibilidad
Para especificar la visibilidad de un miembro de clase (es decir, cualquier atributo o método), estas notaciones deben colocarse antes del nombre del miembro: [ 5 ]
Una propiedad derivada es una propiedad cuyo valor (o valores) se produce o calcula a partir de otra información, por ejemplo, utilizando valores de otras propiedades.
Una propiedad derivada se muestra con su nombre precedido por una barra inclinada '/'. [ 6 ]
Alcance
UML especifica dos tipos de ámbito para los miembros: instancia y clase . El nombre de la clase aparece como una concatenación subrayada del nombre de la instancia (si la hay), dos puntos (':') y el nombre de la clase propiamente dicho. [ 1 ]
- Los miembros de una instancia están restringidos a una instancia específica.
- Los valores de los atributos pueden variar entre instancias.
- La invocación del método puede afectar el estado de la instancia (es decir, cambiar los atributos de la instancia).
- En muchos lenguajes de programación, los miembros de una clase se consideran comúnmente "estáticos". El ámbito de aplicación está delimitado por la propia clase.
- Los valores de los atributos son iguales para todas las instancias.
- La invocación del método no afecta al estado del clasificador.
Para indicar el ámbito de un clasificador, su nombre debe ir subrayado. De lo contrario, se asume el ámbito de instancia por defecto.
Relaciones

Una relación es un término general que abarca los tipos específicos de conexiones lógicas que se encuentran en los diagramas de clases y objetos. UML define las siguientes relaciones:
Relaciones a nivel de instancia
Dependencia
Una dependencia es un tipo de asociación donde existe una conexión semántica entre elementos dependientes e independientes del modelo. [ 7 ] Existe entre dos elementos si los cambios en la definición de uno de ellos (el servidor o destino) pueden provocar cambios en el otro (el cliente o origen). Esta asociación es unidireccional. Una dependencia se representa con una línea discontinua con una flecha abierta que apunta del cliente al proveedor.
Asociación

Una asociación representa una familia de vínculos estructurales. Una asociación binaria se representa con una línea continua entre dos clases. Una asociación reflexiva es una asociación binaria entre la clase y sí misma. Una asociación entre más de dos clases se representa con un rombo conectado con una línea continua a cada una de las clases asociadas. Una asociación entre tres clases es una asociación ternaria. Una asociación entre más de tres clases se denomina asociación n-aria.
Se puede nombrar una asociación, y sus extremos pueden adornarse con nombres de roles, indicadores de agregación, multiplicidad, visibilidad, navegabilidad y otras propiedades. La notación de punto, por ejemplo, permite representar con un pequeño punto al lado de una clase que el extremo de la asociación pertenece a la otra clase. [ 8 ]
Existen tres tipos de asociación: asociación simple, agregación compartida y agregación compuesta (composición). Una asociación puede ser navegable en una o más direcciones. La navegabilidad no tiene que especificarse explícitamente. Una flecha abierta en el lateral de una clase indica que se puede acceder a ella de forma eficiente en tiempo de ejecución desde el lado opuesto. La navegación unidireccional se muestra con una pequeña cruz en la línea de asociación del lado de la clase que no es accesible. Por ejemplo, una clase de vuelo se asocia bidireccionalmente con una clase de avión.
Agregación

La agregación es una variante de la relación de asociación "tiene un"; sin embargo, es más específica que la asociación. Representa una relación de parte-todo o parte-de. Como se muestra en la imagen, un profesor "tiene" una clase que impartir. Al igual que una asociación, una agregación puede nombrarse y tener los mismos adornos que una asociación. No obstante, una agregación no puede involucrar más de dos clases; debe ser una asociación binaria. Además, durante la implementación, apenas existe diferencia entre agregaciones y asociaciones, y el diagrama puede omitir por completo las relaciones de agregación. [ 9 ]
La agregación puede ocurrir cuando una clase es una colección o contenedor de otras clases, pero las clases contenidas no tienen una fuerte dependencia del ciclo de vida del contenedor. El contenido del contenedor sigue existiendo cuando este se destruye.
En UML , se representa gráficamente como un rombo hueco en la clase contenedora, con una sola línea que lo conecta a dicha clase. El agregado es semánticamente un objeto extendido que se trata como una unidad en muchas operaciones, aunque físicamente está compuesto por varios objetos más pequeños.
Composición

La relación de agregación compuesta (o simplemente composición) es una forma más fuerte de agregación donde el agregado controla el ciclo de vida de los elementos que agrupa. Su representación gráfica consiste en un rombo relleno en el extremo de la línea que conecta las clases contenidas con la clase contenedora.
Diferencias entre composición y agregación
- Relación de composición
- 1. Al intentar representar relaciones de todo-parte del mundo real, por ejemplo, un motor es una parte de un automóvil.
- 2. Cuando se destruye el contenedor, también se destruye su contenido, por ejemplo, una universidad y sus departamentos.
- Relación de agregación
- 1. Al representar una relación de software o base de datos, por ejemplo, el motor del modelo de automóvil ENG01 forma parte de un modelo de automóvil CM01, ya que el motor, ENG01, también puede formar parte de un modelo de automóvil diferente. [ 10 ]
- 2. Cuando el contenedor se destruye, el contenido generalmente no se destruye, por ejemplo, un profesor tiene estudiantes; cuando el profesor deja la universidad, los estudiantes no se van con el profesor.
Por lo tanto, la relación de agregación suele ser una contención de "catálogo" para distinguirla de la contención "física" de la composición. UML 2 no especifica ninguna semántica para la agregación en comparación con la asociación simple.
Relaciones a nivel de clase
Generalización/Herencia

La relación de generalización —también conocida como herencia o relación "es un" — refleja la idea de que una clase, la llamada subclase , es una forma especializada de la otra (la superclase , supertipo o clase base ). Cuando se cumple esta relación, la superclase se considera una generalización de la subclase. En la práctica, esto significa que cualquier instancia de la subclase es también una instancia de la superclase. Un ejemplo de árbol de generalizaciones de esta forma se encuentra en la clasificación biológica , donde, por ejemplo, el ser humano es una subclase del simio , que a su vez es una subclase del mamífero , y así sucesivamente. La relación se comprende mejor con la frase "un A es un B " (un ser humano es un mamífero, un mamífero es un animal).
La representación gráfica UML de una generalización es un triángulo hueco situado en el extremo de la superclase de la línea (o árbol de líneas) que la conecta con uno o más subtipos.
símbolo de generalización (subclase) ———————▻ (superclase)
Dual a la generalización es la relación de especialización . Otros términos para una subclase (especializada) de una superclase más general incluyen subtipo , clase derivada , tipo derivado , clase heredada , tipo heredado , hijo y clase hija .
Cabe señalar que esta relación, si bien es similar a la relación biológica entre padres e hijos, es distinta de ella. El uso de los términos padre/madre e hijo/a es sugerente, pero puede resultar engañoso.
- A es un tipo de B
- Por ejemplo, "un roble es un tipo de árbol", "un automóvil es un tipo de vehículo".
La generalización solo puede mostrarse en diagramas de clases y en diagramas de casos de uso .
Realización/Implementación
En el modelado UML, una relación de realización es una relación entre dos elementos del modelo, en la que un elemento del modelo (el cliente) realiza (implementa o ejecuta) el comportamiento que especifica el otro elemento del modelo (el proveedor).
La representación gráfica UML de una Realización es un triángulo hueco en el extremo de la interfaz de la línea discontinua (o árbol de líneas) que la conecta con uno o más implementadores. Se utiliza una punta de flecha simple en el extremo de la interfaz de la línea discontinua que la conecta con sus usuarios. En los diagramas de componentes, se utiliza la convención gráfica de rótula (los implementadores muestran una rótula o piruleta, mientras que los usuarios muestran un enchufe). Las Realizaciones solo se pueden mostrar en diagramas de clases o componentes. Una realización es una relación entre clases, interfaces, componentes y paquetes que conecta un elemento cliente con un elemento proveedor. Una relación de realización entre clases/componentes e interfaces muestra que la clase/componente realiza las operaciones ofrecidas por la interfaz.
símbolo de realización (implementador) -------▻ (interfaz)
Relación general

Dependencia
La dependencia puede ser una forma más débil de vínculo que indica que una clase depende de otra porque la utiliza en algún momento. Una clase depende de otra si la clase independiente es una variable de parámetro o una variable local de un método de la clase dependiente. A veces, la relación entre dos clases es muy débil. No se implementan con variables miembro en absoluto, sino que se implementan como argumentos de funciones miembro.
Multiplicidad
Esta relación de asociación indica que (al menos) una de las dos clases relacionadas hace referencia a la otra. Esta relación se suele describir como "A tiene un B" (una gata madre tiene gatitos, y los gatitos tienen una gata madre).
La representación UML de una asociación es una línea que conecta las dos clases asociadas. En cada extremo de la línea hay notación opcional. Por ejemplo, podemos indicar, mediante una punta de flecha, que el extremo puntiagudo es visible desde el extremo opuesto. Podemos indicar la propiedad colocando una esfera, el rol que desempeñan los elementos de ese extremo proporcionando un nombre para dicho rol, y la multiplicidad de instancias de esa entidad (el rango de objetos que participan en la asociación desde la perspectiva del otro extremo).
Análisis de estereotipos

Entidades
Las clases de entidades modelan la información persistente que maneja el sistema y, en ocasiones, el comportamiento asociado a dicha información. No deben identificarse como tablas de bases de datos ni otros almacenes de datos.
Se representan como círculos con una línea corta unida a la parte inferior. Alternativamente, pueden representarse como clases normales con la notación de estereotipo «entidad» encima del nombre de la clase.
Véase también
- Diagramas relacionados
Referencias
- 1 2 "Clases". Lenguaje Unificado de Modelado 2.5.1 . Número de documento OMG formal/2017-12-05. Organización de Desarrollo de Estándares del Grupo de Gestión de Objetos (OMG SDO). Diciembre de 2017. pág. 194.
- ↑ Sparks, Geoffrey. "Modelado de bases de datos en UML" . Consultado el 8 de septiembre de 2011 .
- ↑ Flatt, Amelie; Langner, Arne; Leps, Olof (2022), "Fase I: Mapeo de conceptos legales a objetos técnicos" , Desarrollo dirigido por modelos de perfiles de aplicaciones de Akoma Ntoso , Cham: Springer International Publishing, pp. 13–17 , doi : 10.1007/978-3-031-14132-4_3 , ISBN 978-3-031-14131-7, consultado el 7 de enero de 2023
- ↑ Scott W. Ambler (2009) Diagramas de clases UML 2. Webdoc 2003-2009. Consultado el 2 de diciembre de 2009.
- ↑ Tarjeta de referencia UML, versión 2.1.2 , Holub Associates, agosto de 2007 , consultado el 12 de marzo de 2011
- ↑ "Una propiedad derivada de UML es aquella cuyo valor se produce o calcula a partir de otra información, por ejemplo, mediante el uso de otras propiedades" . www.uml-diagrams.org . Consultado el 24 de enero de 2019 .
- ↑ Fowler (2003) UML Distilled: A Brief Guide to the Standard Object Modeling Language
- ↑ Selic, Bran (18 de abril de 2013). "Acertar en el clavo" (PDF) . www.omg.org . Object Management Group . Recuperado el 26 de noviembre de 2023 .
- ↑ "Tutorial UML parte 1: diagramas de clases" (PDF) . Archivado del original (PDF) el 3 de enero de 2007. Consultado el 18 de julio de 2015 .
- ↑ Goodwin, David. "Modelado y simulación, pág. 26" (PDF) . Universidad de Warwick . Consultado el 28 de noviembre de 2015 .
Enlaces externos
- Introducción a los diagramas de clases UML 2
- Directrices para diagramas de clases UML 2
- Introducción al diagrama de clases de IBM
- "Clases". Lenguaje Unificado de Modelado 2.5.1 . Número de documento OMG formal/2017-12-05. Organización de Desarrollo de Estándares del Grupo de Gestión de Objetos (OMG SDO). Diciembre de 2017. pág. 194.
- Diagramas de clases UML 2
- Diagramas del Lenguaje Unificado de Modelado