Conhecendo os diagramas de classe da UML
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.
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.
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.
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.
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.
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
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
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
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
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
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.
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.