Conhecendo os diagramas de classe da UML

Lucas Ruiz Dirani
Fora de assunto
Published in
5 min readJul 27, 2022

--

Os diagramas de classes nos permitem modelar o conteúdo estático e os relacionamentos entre as classes. Em um diagrama de classes podemos mostrar as variáveis membro e as funções de uma classe específica. Ademais, há a possibilidade de mostrar se uma classe herda de outra ou se contém uma referência para outra.

Diagrama de classes com as classes Shape, Circle, Triangle e Rectangle
Uma representação do diagrama de classes. Retirado de: https://dhtmlx.com/blog/

Conforme veremos nas próximas seções do artigo, a Unified Modeling Language oferece ao analista inúmeras notações e particularidades com o intuito de que este represente da forma mais rica os módulos do seu projeto. Assim como na publicação sobre as máquinas de estado, abordarei apenas as características de maior valor dos diagramas de classe, de modo a simplificar o seu uso e entendimento.

As classes

O símbolo da classe no diagrama pode ser subdividido em compartimentos. O nível superior contém o nome da classe, enquanto o segundo possui as suas variáveis e o terceiro apresenta os seus métodos.

Diagrama de classes mostrando os atributos e métodos de um tipo identificado como Item.
Diagrama de classes mostrando os atributos e métodos de um tipo identificado como Item

Os atributos e funções costumam ter caracteres na frente de seus nomes. Um traço denota acesso privado, ou seja, somente integrantes dentro da própria classe estão autorizados a consultar o membro em questão. Por outro lado, o jogo da velha corresponde ao acesso protegido, que é bastante similar ao privado, com a diferença de que as subclasses também podem utilizar as variáveis e métodos correspondentes. Enfim, o sinal de adição significa que o campo ou método são públicos, expostos para qualquer cliente consumir.

Esse tipo de detalhe às vezes é útil, mas alguns autores como Robert C. Martin (Uncle Bob) aconselham a não usá-lo com muita frequência. As declarações de variáveis e funções devem ser aplicadas apenas quando elas forem essenciais para o propósito do diagrama.

Associação

As associações entre classes reproduzem variáveis de instância que contêm referências para outros objetos. A direção da seta indica que uma classe possui uma referência para outra classe. O nome próximo à seta é a identificação da variável de instância, e o número revela quantas referências são armazenadas.

Diagrama de classes no qual a classe Item se associa com a classe Dimension
A classe Item possui uma associação direta com a classe Dimension

Herança

As setas de herança apontam diretamente para a classe base, de acordo com as especificações da UML. No caso de interfaces, as setas são desenhadas com um tracejado, embora esta especificidade não seja tão relevante de ser seguida pelo desenvolvedor.

Diagrama de classes no qual a classe ItemRepositoryDatabase implementa (herda) da interface ItemRepository
A classe ItemRepositoryDatabase implementa (herda) da interface ItemRepository

Estereótipos de classe

Os estereótipos de classe aparecem entre dois caracteres semelhantes aos sinais de menor e maior, normalmente acima do nome da classe.

Diagrama de classes representando a classe estática RandomCodeGenerator, decorada com o estereótipo utility
Classe RandomCodeGenerator com o estereótipo utility

O estereótipo interface indica que todos os métodos de uma classe são abstratos. Já o estereótipo utility indica que todos os métodos e variáveis são estáticos.

Classes abstratas

Diagrama de classes em que a classe concreta HolidayCoupon está herdando da classe abstrata Coupon
Classe concreta HolidayCoupon herdando da classe abstrata Coupon

Existem duas maneiras de retratar que uma classe ou método é abstrato na UML. Há a possibilidade de escrever o nome em itálico ou usar a propriedade abstract, representada entre chaves.

Agregação

Diagrama de classes em que a classe OrderItem é um agregado da classe Order
A classe OrderItem é um agregado da classe Order

A agregação é uma forma especial de associação que significa um relacionamento todo/parte. A única regra que a UML fornece com relação às agregações é que um todo não pode ser sua própria parte. Logo, um objeto não pode ser agregado de si mesmo.

Composição

Diagrama de classes em que a classe OrderCode compõem de maneira exclusiva a classe Order
A classe OrderCode compõem de maneira exclusiva a classe Order

A composição, do mesmo modo que a agregação, compartilha das características propostas pela associação. A regra aplicada à agregação também está presente na composição: não pode haver ciclos de instâncias. Entretanto, a UML expõe muito mais detalhes para este outro tipo de associação.

  • Uma instância de objeto não pode pertencer simultaneamente a mais de um objeto do mesmo tipo;
  • O objeto contêiner é responsável pela duração do objeto de composição. Se o objeto contêiner é destruído, o objeto de composição deve ser destruído com ele.

Multiplicidade

Diagrama de classes em que a multiplicidade da associação entre Order e OrderItem é de zero para muitos
A multiplicidade da associação entre Order e OrderItem é de zero para muitos

Os objetos podem conter arrays ou coleções de outros objetos, ou podem conter muitos objetos do mesmo tipo em variáveis de instância distintas. Na UML, isso pode ser mostrado colocando-se uma expressão de multiplicidade na extremidade da associação.

As formas de multiplicidade permitidas são as seguintes:

  • Dígito: o número exato de elementos;
  • * ou 0..*: de zero para muitos;
  • 0..1: zero ou um;
  • 1..*: de um para muitos;
  • 3..5: de três a cinco.

Estereótipo de associação

Diagrama de classes em que a a classe Order delega a execução para a classe ShippingCalculator
A classe Order delega a execução para a classe ShippingCalculator

As associações podem ser rotuladas com estereótipos que alteram os seus significados.

  • O estereótipo create indica que o destino da associação é criado pela origem;
  • O estereótipo local é usado quando a classe de origem cria uma instância do destino e a mantém em uma variável local;
  • O estereótipo parameter mostra que a classe de origem obtém acesso à instância de destino por meio do parâmetro de uma de suas funções;
  • O estereótipo delegate é usado quando a classe de origem encaminha a chamada de uma função membro para o destino.

Classes associativas

As associações com multiplicidade nos informam que a origem está ligada a muitas instâncias do destino, mas o diagrama não nos informa que tipo de classe contêiner é usada. Isso pode ser representado pelo uso de uma classe associativa.

Diagrama de classes em que a classe OrderItem atua como uma classe associativa no relacionamento entre Order e Item
A classe OrderItem atua como uma classe associativa no relacionamento entre Order e Item

As classes associativas mostram como uma associação específica é implementada. No diagrama, elas aparecem como uma classe normal ligada à associação.

O suficiente para começar

Caso tenha absorvido todos os conceitos retratados nas seções anteriores, saiba que você já possui a base suficiente para começar a desenhar os seus próprios diagramas de classes quando precisar, seja em projetos pessoais ou profissionais.

Assim como os outros modelos da UML, o diagrama de classes também possui vários conceitos e componentes adicionais. Entretanto, dificilmente eles são aplicados no dia a dia e é muito provável que você nunca sentirá falta de usá-los.

--

--

Lucas Ruiz Dirani
Fora de assunto

Sou desenvolvedor .NET há mais de três anos. Atualmente trabalho como Analista de Engenharia de TI no Itaú Unibanco.