Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

1.4K
Visualizações
¿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í

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

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.

over 4 years ago · Santiago Trujillo Relatório

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.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda