UML - Artigo Diagramas de Classes da UML

29/01/2019

21

Acompanhando o artigo do DevMedia (Parte 1 e Parte 2)...
* https://www.devmedia.com.br/como-interpretar-diagramas-de-classes-da-uml-parte-1/32481
* https://www.devmedia.com.br/aprenda-a-interpretar-diagramas-de-classes-da-uml-parte-2/32726

Conforme a Figura 1. Diagrama de classes representando o sistema de bilhetes aéreos (Segunda Parte)
existe a representação de Enumeradores, sendo descrita mais abaixo no subtitulo (Codificação do enum TipoBagagemEnum).
Observando a figura e a maneira de codificação, deduzo que no Banco de Dados exista uma tabela que corresponda a
BAGAGEM e uma correspondente ao ENUMERADOR, representando uma Modelo Relacional de Banco de Dados, com a Entidade Bagagem com uma
Chave Estrangeira do Enumerador que por sua vez conterá fisicamente os registro. Não sei se estou interpretando equivocadamente.

Modelo Entidade Relacionamento que estou imaginando:
---------------------------------------                   -------------------------------
|           BAGAGEM                   |                   |     TIPOBAGAGEMENUM         |
---------------------------------------    1 -----  1     -------------------------------
|   IdBagagem INT (PK)                |                   |   IdEnumerador INT (PK)     |
|   IdTipoBagagem INT (FK)            |                   |   Nome VARCHAR(255)         |
|   Peso DOUBLE                       |                   |   PesoMaximo DOUBLE         |
---------------------------------------                   -------------------------------

Estou a realizar um exemplo e ASPNETMVC e EntityFramework e declaro minhas classes da seguinte maneira.
Porém em meu Banco de Dados (SqlServer) não cria duas tabelas. Apenas cria um campo (smallint) na Classe que contém o enumerador,
ficando a descrição do enumerador apenas no fonte. (Conforme dúvida de Wallace Olieira ao final do artigo). Seguem exemplo de classe que estou realizando abaixo:

using System;
using System.ComponentModel.DataAnnotations;

namespace GesCooper.Entities.Models.Veiculo
{
    [Table("VEICULO")]
    public class Veiculo
    {
        [Display(Name = "Descrição")]
        public string Descricao { get; set; }

        [Display(Name = "Tipo de Veículo")]
        public TipoVeiculo Tipo { get; set; }
    }
}


using System.ComponentModel.DataAnnotations;

namespace GesCooper.Entities.Enumaradores.TipoVeiculo
{
    public enum TipoVeiculo : short
    {
        [Display(Name = "Passeio")]
        Passeio = 1,
        [Display(Name = "Carga")]
        Carga = 2,
        [Display(Name = "Corrida")]
        Corrida = 3,
        [Display(Name = "Transporte")]
        Transporte = 4,
    }
}


No entanto fico em dúvida como realizar a representação da UML... O enumerador no artigo, é representado com uma classe (acrescido de <<enum>>) e com atributos(id, nome, pesoMax) e uma Nota para descrever os valores possíveis do Enumerador.

Em meu exemplo disponho de outra classe para representar o enumerador, mas seu valor é apenas adicionado no atributo da classe principal (tipo short). Ele também possui apenas um numero e uma valor associado ao numero (Deveria criar um TipoVeiculoEnum com campos Id e Descrição e Adicionar uma nota com os possíveis valores? Ainda, o nome da classe deve ser TipoVeiculoEnum ou a Propriedade Tipo da minha classe Veiculo?)

Não consegui compreender o conceito para fazer de forma correta a diagramação (em meu exemplo)... Desde já obrigado pela atenção.
Responder

Posts

Neste caso, ao meu ver, você tem dois caminhos: o primeiro é utilizar o Enum, logo, por ser uma lista fixa de valores, não vejo necessidade de mapear essa estrutura como tabela, assim representá-lo apenas como um atributo simples da classe principal é o suficiente. Caso você necessite de mais informações associadas ao TipoVeiculo, aí é o caso de transformar essa estrutura em uma classe, logo, mapeá-la como uma tabela do banco. Assim, na classe principal você terá um atributo relacionado à classe TipoVeiculo, que no banco se transformará numa FK. Em suma, a abordagem a ser utilizada é muito pessoal, e de acordo com o contexto de uso da aplicação. Quanto a nomenclatura a ser utilizada, para a classe sugiro "TipoVeiculo" e caso use enum, mantenha o nome sugerido.

Espero que outros colegas possam dar suas próprias opiniões para enriquecer a discussão.

Forte abraço!
Responder