UML:
Diagrama de Classes e Objetos
Nesta segunda parte da série sobre UML, falarei um pouco
sobre diagramas de classes e de objetos. Os diagramas mostrados aqui foram
criados no Microsoft Visio.
Uma classe é representada por um retângulo. Internamente deve
constar seu nome, em negrito com primeira letra em maiúscula, geralmente é um
substantivo.

Uma classe possui atributos, que são exibidos em sessão
inferior ao nome da classe:

Atributos e operadores possuem
uma visibilidade, que pode ser:
~: de pacote: significa que as
classes de um pacote podem ser usadas
+: publico
#: protegido
-: Privado
Atributos têm um tipo de dado e podem ainda apresentar um
valor padrão, note que na classe abaixo, o atributo Nome é do tipo String é o
valor padrão, representado pelo símbolo de igual, é Fernando:

As operações são representadas em uma terceira sessão do
retângulo, abaixo dos atributos. No diagrama abaixo temos as operações Andar e
Dormir:

Operadores podem ter direção: in,
out, inout.
isQuery: indica que a operação não altera o
valor de nenhum atributo.
Um operador pode ter uma pré-condição, por
exemplo, ser verdadeiro antes da execução.
As operações podem ainda demonstrar sua assinatura, que
são os parâmetros que são passados para a operação, bem como seus tipos e
possíveis tipos de dados de valores de retorno. Na classe abaixo, a operação
andar recebe como parâmetros um tipo direção, e retorna um valor booleano:

Um artifício não muito utilizado é adicionar uma quarta
sessão ao diagrama contendo a responsabilidade da classe, ou seja, o que ela
deve fazer:

Também se podem colocar restrições para a classe, que
normalmente são indicadas entre “chaves”, na lateral da classe, e utilizam
expressões booleanas comuns.

Níveis de abstração para exibição
A classe pode ser exibida em diferentes níveis de
abstração, conforme a finalidade do diagrama.
Em nível de domínio são exibidos apenas os nomes das
classes e seus relacionamentos

Em nível de analise são exibidos os nomes das classes e
seus atributos

Finalmente, em nível de design, são exibidos o nome da
classe, atributos e operações.

Generalização
Generalização é o conceito de herança. Uma classe mais
genérica é herdada por uma classe mais especifica. No exemplo abaixo, veiculo é
uma classe genérica. Ônibus, caminhão e utilitário são classes mais especificas
que herdam veículos.

Classes abstratas
No exemplo anterior, veiculo pode ser instanciado, já que
não é uma classe abstrata. Classes abstratas não podem ser instanciadas, elas
têm características e funcionalidades que serão herdadas por outras classes. No
exemplo abaixo televisor é uma classe abstrata. Uma classe abstrata pode ter métodos
concretos ou abstratos. Métodos abstratos não são implementados na classe
abstrata, dependem de implementação na classe que a herdar. Uma classe abstrata
é identificada com seu nome em itálico.

Associações
Associações entre classes normalmente são binárias,
envolvendo duas classes:

Pode haver associações entre três ou mais classes.
Normalmente a associação é bidirecional, mas pode também
ter uma única direção, a ser indicado através de uma seta na associação:

Associações podem ter uma função, que é descrito sobre a
associação:

Classe de Associação
Uma classe de associação contem informações de
relacionamento entre outras classes. Graficamente fica situada na associação
entre as duas classes relacionadas, conectada através de uma linha pontilhada.

Pode existir ainda uma classe de associação “n-ária”, relacionamento
diversas classes.
Dependências
Conceitualmente a dependência ocorre quando não é possível
existir a classe A sem que a classe B já exista. A dependência é representada
por uma seta pontilhada
Um exemplo clássico é a dependência de um item de um
pedido com o próprio pedido.

Multiplicidade
Uma associação pode demonstrar ainda sua multiplicidade,
o que indica quantas classes pode estar relacionado.

A multiplicidade pode ser representada das seguintes
formas:
·
Um
valor fixo, como 1
·
Um
asterisco, que representa um ou muitos
·
Um
intervalo, como 1..10
·
Um
conjunto de valores, como [1,2,4,5]
Agregações
É um tipo de relacionamento onde uma classe é formada por
diversas outras classes, é representado por uma figura na forma de um diamante

Composição
É outro tipo de agregação, em que a relação é mais forte.
Assim como na agregação, as diferentes classes representam o “todo”, porém
neste caso uma classe sozinha não pode existir. É representado por uma figura
na forma de um diamante “preenchido”.

Interfaces
As interfaces são apenas modelos de
comportamentos, não podendo ser instanciadas. Oferecem serviços a outras
classes. Todos os métodos são públicos.

Diagrama de Objetos
Um diagrama de objeto representa uma instancia de uma
classe especifica. Graficamente falando, é representado pelo nome da classe
seguidos de dois pontos e o nome do objeto, ambos sublinhados. Opcionalmente o
nome da classe pode ser omitido.
