Representação de Classes

Representação de Classes

Um diagrama de classes é um tipo de modelo, mais especificamente um tipo estático de modelo. Descreve uma visão estática do sistema em termos de classes e relacionamentos entre elas. Apesar de apresentar semelhanças com modelos de dados, é importante ressaltar que modelos de classes não só representam as estruturas da informação, mas também seus comportamentos.

Para criar um diagrama de classe, as classes têm de ser identificadas e descritas, e quando um certo número de classes existe, elas podem se relacionar umas com as outras.

Uma classe é desenhada como um retângulo dividido em 3 compartimento. O primeiro representa o nome da classe, o segundo os atributos da classe, e o último as operações (métodos), como mostra a figura.

A sintaxe de cada compartimento varia de acordo com a linguagem que se pretende usar (C++, Java, ...).

Representação de classes em UML de:

  Nome da Classe

  Atributos

  Operações

  Responsabilidades

 

 

Regras para representação do Diagrama de Classes em UML

 

O Nome da Classe:

O primeiro compartimento do retângulo de classe, onde se dispõem o nome da classe, é digitado em negrito e centralizado. Sugere-se que o nome derive do problema a ser resolvido pelo sistema, e deve ser o menos ambíguo possível. Deve também ser um substantivo, por exemplo: carro, débito. Não deve apresentar prefixos ou sufixos.
            Veja a Figura

 

 

Os Atributos

Os atributos descrevem as características dos objetos. Uma descrição correta dos atributos de uma classe contem as informações básicas para identificação e descrição de uma instância da classe. Contudo, somente devem ser incluídos os atributos que interessem ao sistema desenvolvido. Portanto, o objetivo do sistema também influencia em quais atributos devem ser usados.

Um atributo sempre possui um tipo, que normalmente são: integer, boolean, real, point área, e enumeration que são chamados de tipos primitivos de dados. Esses tipos de dados são especificados de acordo com a linguagem e são os mais comuns, contudo, qualquer tipo de dado pode ser usado, até mesmo outra classe.

Os atributos possuem modificadores de acesso, que determinam a visibilidade. Essa visibilidade descreve se o atributo está ou não acessível e se pode ser referenciado por outras classes. Se um atributo é público (public), expresso por um sinal de (+), ele pode ser visto de fora da classe em que foi definido; se for privado (private), expresso por um sinal de menos (-), não se pode acessar de outras classes.  Nessa questão de acessibilidade um atributo pode também ser protegido (protected), que é usado quando se fala de generalização e especialização. Outros tipos de acessibilidade são definidos para linguagens de programação específicas, porém os mais usados são publico e privado.
       
Veja Figura

Um atributo pode ser também estático, ou seja, pertencer a classe. Isso significa que o atributo é compartilhado por todos os objetos da classe, (as vezes é chamado de variável da classe). Um atributo estático é sublinhado.

Uma propriedade de String pode ser usada para identificar quais valores estão disponíveis para um atributo. É usado para especificar tipos de enumeração, como cor, status, direção... A propriedade da String é escrita entre chaves e os valores possíveis para a String são separados por vírgula. A sintaxe é a seguinte:

Nome : tipo = valor_inicial {propriedades da String}

Numa declaração, apenar o nome e o tipo são essenciais, os demais itens são opcionais.
   
         Veja  a Figura

 

 

 

As Operações:

As operações são usadas para a manipulação dos atributos de uma classe, ou para a performance de outras operações. Essas operações são geralmente chamados de funções, mas estão dentro de uma classe e só podem ser chamados por objetos daquela classe específica.

Uma operação é descrita com um tipo de retorno, um nome, e parâmetros que podem ser zero ou mais. Essas características definidas juntas formam o que chamamos de assinatura do método.

As operações da classe descrevem o que a classe pode fazer, ou seja, quais são os “serviços” que ela oferece, assim, eles podem ser vistos como a interface da classe.

Com relação a visibilidade e status, as operações são classificadas de forma semelhante aos atributos. Pode ser público, privado, protegido; e ser estático ou não. Operações estáticas de uma classe podem ser chamadas sem que se tenha um objeto criado, mas é restrito aos atributos estáticos. As operações estáticas são definidas para casos de operações genéricas, como a criação de objetos, e procura de um objeto, quando um objeto em específico não está envolvido.

A sintaxe formal é a seguinte:

nome (Lista_de_Parâmetros): tipo de retorno { Propriedades da String}

Nem todos os métodos precisam de um tipo de retorno, parâmetros ou propriedade de String, mas a assinatura de cada um deve ser única.

         Em alguns métodos é possível especificar os valores do parâmetro previamente, nesse caso, quando ele for chamado não é necessário especificar o valor (já é chamado o valor padrão do método automaticamente).
   
       Veja a Figura

 

   

 

 

        Responsabilidades

         Responsabilidade é um com trato ou obrigação de uma determinada classe. Quando se cria uma classe, todos os objetos que pertencem a ela possuem o mesmo estado, ou tipo de comportamento. Os atributos e operações são apenas as características com as quais as responsabilidades das classes são executadas.

        Quando se modela uma classe um bom ponto de partida é especificar as responsabilidades dos itens existentes em seu vocabulário. Cada classe em  um sistema grande, e bem modelado possui pelo menos uma responsabilidade definida, mas pode possuir inúmeras.

        As responsabilidades são apenas um texto de formato livre. Podem ser uma expressão, oração, ou um breve parágrafo.

        As responsabilidades podem ser representadas como um quadro abaixo, separado, do quadro da classe.
           Veja a Figura