• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

1.1K
Views
¿Cómo modelo enumeraciones en UML para que expresen una relación clave-valor?

Quiero representar algunos pares clave-valor en un tipo de enumeración UML. Por ejemplo, digamos que tenemos algunos elementos y su símbolo:

 ROAD => 'R' CAR => 'C' NOTHING => ' '

En Java sería algo similar a lo siguiente:

 public enum AsciiCodes { ROAD ('R'), CAR ('C'), NOTHING (' '); private final char code; private AsciiCodes(char code) { this.code = code; } }

¿Cómo puedo representar eso en UML?

Lo que tengo hasta ahora:

ingrese la descripción de la imagen aquí

about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

En UML ROAD, CAR y NOTHING son EnumerationLiteral y en un diagrama de clase se muestran en los literales de compartimiento mostrando su nombre, y nada más de ellos.

Una enumeración que es un tipo de datos puede tener una propiedad, sin embargo, el código de atributo de su Java no puede ser compatible con una propiedad como lo hizo porque no se refiere a la enumeración sino al EnumerationLiteral .

Por supuesto, un EnumerationLiteral no es una propiedad de la enumeración ni una instancia de la enumeración, sino una InstanceSpecification .

Por lo tanto, no hay nada estándar que permita modelar el código y su valor para cada literal de enumeración hasta que extienda la enumeración a través de un estereotipo para agregar código como StructuralFeature , en ese caso, los valores del código se especificarán a través de una ranura .

En formal/2017-12-05 ver :

  • § 10.5.3 Enumeración página 175
  • § 10.5.4 EnumerationLiteral página 175 y 176
  • § 9.9.9 Especificación de instancia página 140

[editar]

Representación alternativa en UML inspirada en la lectura de la respuesta de Christophe .

Otra forma es olvidarse por completo de UML EnumerationLiteral y modelar cada literal de enumeración de Java a través de una instancia dedicada disponible a través de un atributo estático de solo lectura.

AsciiCodes puede ser todavía una enumeración UML.

ingrese la descripción de la imagen aquí

Tenga en cuenta que en su definición de Java y más arriba, el valor del código no está disponible desde el exterior, y finalmente es inútil hasta que se agrega una operación para devolverlo como se propone en la respuesta de Christophe .

Por cierto así sigo implementando las enumeraciones en la API del plug-out de BoUML para Java, usando el estereotipo enum_pattern especialmente manejado por el generador de código Java. Empecé a distribuir BoUML en 2005 cuando la enumeración aún no existía en Java.

about 3 years ago · Santiago Trujillo Report

0

Me gustaría agregar algunos matices a la excelente e inspiradora respuesta de Bruno .

¿Puede una enumeración tener propiedades y operación en UML?

Una enumeración UML es un clasificador. Como tal, puede tener perfectamente sus propias propiedades y operaciones, incluso si la mayoría de las veces solo define enumeraciones literales (ver también esta respuesta SO ). Esto está muy cerca de las enumeraciones de Java.

Las enumeraciones de Java proporcionan, sin embargo, algo de azúcar sintáctico que permite asociar uno o varios valores constantes a cada literal de enumeración. El lenguaje le permite definir un constructor privado que usa estos valores constantes para inicializar el objeto enumerado. Esto significa que muy bien podría representar su enumeración en UML de la siguiente manera:

ingrese la descripción de la imagen aquí

¿Qué sucede con los valores constantes asociados con los literales enum?

Nada en UML le permite modelar los valores constantes asociados a un literal de enumeración. Pero nada tiene por qué : esto es simplemente un detalle de implementación. Si desea las constantes en el modelo, puede documentarlas en una nota (yo no iría de esa manera porque solo abarrota el diagrama con detalles de implementación que no ayudan a comprender el diseño).

Tiene dos opciones para aclarar la inicialización:

  1. Define un constructor explícito con la misma firma que en su código, con la ventaja de que está cerca de su código. Pero UML no es una alternativa al código, ¿no es así? . El inconveniente es que es engañosamente confuso para un lector de UML: da la impresión de que estos parámetros de inicialización son gratuitos;
  2. Confías en un constructor sin parámetros. La ventaja es que refleja la realidad del diseño: los parámetros del constructor no son libres ya que Java invoca al constructor con los valores constantes que se deducen directamente del enum litteral.

Aconsejaría 2, porque transmite la verdadera intención del diseño. Sin el azúcar sintáctico, probablemente escribiría una declaración de case muy larga para inicializar las propiedades con los valores correctos dependiendo de la enumeración literal.

¿Qué pasa con las otras funciones de enumeración de Java?

La enumeración UML no proporciona nada más allá de lo que define explícitamente.
Pero todas las enumeraciones de Java se especializan en java.lang.Enum , que ofrecen operaciones como name() u operaciones de clase como values() .

Si desea transmitir la disponibilidad de dichas funciones específicas del idioma, puede definir su propio estereotipo «Java enum» que se especialice en el elemento de metamodelo de enumeración UML estándar.

about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error