À medida que vamos acrescentando classes, e relações entre classes, ao nosso sistema, vai-se tornando mais difícil a compreensão do todo e das partes. Isto dificulta grandemente a manutenção e a evolução do nosso software.
A utilização de abstrações gráficas para os vários componentes do nosso sistema permite-nos representá-lo de uma forma em que sobressaem as entidades e relações que nos interessam a dado instante.
A linguagem UML – Unified Modeling Language – dá-nos esta capacidade, permitindo a representação dos sistemas usando variados graus de abstração/pormenor.
A forma de representar uma classe, na linguagem UML, é através de um retângulo, que pode ser dividido de modo a representar os vários elementos da classe – nome da classe, atributos, métodos. A cada elemento que constitui a classe pode-se ainda juntar informação vária – visibilidade, tipo, etc.
No nosso caso particular temos duas classes – Jogador
e Jogo
– cada uma definindo os seus atributos (de instância e de classe) e os seus métodos.
A primeira divisória do retângulo que representa uma dada classe, apresenta o nome da classe.
A segunda divisória apresenta os atributos, tanto os de classe (static
), que aparecem sublinhados, como os de instância. Os sinais –
e +
significam que o atributo é private
ou public
, respetivamente.
Um atributo de tipo primitivo é representado na divisória dos atributos através do seu nome. Podemos acrescentar-lhe o tipo e outros elementos descritivos mais.
Para representar, numa classe A
, um atributo de um tipo não primitivo B
, usa-se uma seta com a cabeça preta, na direção da classe A
para a classe B
. A relação existente entre A
e B
diz-se relação de composição. Mais adiante veremos outros tipos de relações entre classes.
No nosso caso, como Jogador
é um tipo não primitivo, o atributo jogadores
, que é um array de elementos do tipo Jogador
, é apresentado através de uma seta na direção da classe Jogador
; etiquetamos a seta com o nome do atributo e com o caráter *
, que significa que cada objeto do tipo Jogo
está relacionado com uma coleção de zero ou mais elementos do tipo Jogador
.
É usual não representar explicitamente através de elementos gráficos UML os tipos de dados não primitivos pertencentes à biblioteca do Java – como, por exemplo, String
, Random
, etc – que não são criados por nós. Representamo-los através dos seus nomes.
A última divisória apresenta as assinaturas dos métodos. Optámos por apresentar somente os métodos public
e por não apresentar nem os construtores nem os métodos que revelam os valores dos atributos.
Anterior: 11.8. A classe Jogo completa.
Seguinte: 12. Tipos enumerados