DEV Community

Cover image for Diagrama de classes
João Pedro V
João Pedro V

Posted on

Diagrama de classes

O básico - Encapsulamento e tipos

Tomando este diagrama com uma única classe como base, podemos afirmar que:

  • NomeDaClasse é o nome da classe (uau)
  • atributo1 é um atributo público do tipo inteiro
  • atributo2 é um atributo privado do tipo coleção de Real (float). (obs: note que eu disse COLEÇÃO, generalizando mesmo, não cabe ao diagrama definir o tipo da coleção)
  • atributo3 é um atributo protegido do tipo string
  • atributo4 é um atributo público e estático do tipo boolean
  • metodo1() é um método público sem retorno e sem parâmetros
  • metodo2() é um método privado que recebe uma string como parâmetro e retorna um Real
  • metodo3() é um método estático e público que não recebe nenhum parâmetro e nem retorna nada

Especificamente sobre a notação de encapsulamento, e uma breve revisão do que cada um significa:

  • Privado - - Acessível no escopo da classe
  • Protegido # - Acessível no escopo da classe e descendentes
  • Público + - Acessível em qualquer escopo

Relacionamentos

"Relacionamentos" é o termo que usamos para descrever a forma como as classes se relacionam. Criativo, não? Por exemplo, você pode ter uma classe que instância um objeto de outra, ou que simplesmente usa algum método ou atributo dela, ou até mesmo classes herdando características umas das outras através de herança. A esmagadora maioria desses relacionamentos que você conseguir pensar, nós já definimos uma forma de ilustrar ele em um diagrama, sem precisar escrever o código pra explicar ele pra alguém.

Vamos ver um pouco dessas notações agora.

Associação

Usamos o termo associação para descrever o relacionamento entre duas classes que se dá da seguinte forma: uma classe tem um atributo do tipo de outra classe.

class Processador {
   String marca;
}

class Computador {
   Processador cpu;
}
Enter fullscreen mode Exit fullscreen mode

Note duas coisas importantes:

  1. Eu não escrevi - cpu dentro de Computador, o nome do atributo (quando é um atributo) fica na setinha.

  2. A setinha está apontando de computador para processador, e não o contrário.

Importante

Apesar de você não colocar - cpu: Processador na definição dos atributos de Computador, você deve colocar a classe como tipo dessa forma (cpu: Processador) se e somente se ela for parâmetro ou retorno de algum método.

Também é possível definir a cardinalidade, da seguinte forma:

O * significa que esperamos que um objeto de Turma tenha uma quantidade de Aluno. Essa quantidade pode variar de 0 a n (é a mesma coisa que comentei anteriormente sobre coleção de objetos).

Outra coisa importante de ressaltar, é que nós não colocamos métodos getters e setters (getNome(): String, setIdade(int idade): void) no diagrama, já é de se esperar que as classes tenham esses métodos, portanto acrescentá-los no diagrama apenas polui visualmente e não nos trás nenhum benefício.

Dependência

Falamos em dependência quando uma classe precisa conhecer outra, pois precisa dela para a implementação de no mínimo um de seus métodos.

Por exemplo, se um método de uma classe depende da existência de um outro objeto para ser implementado.

[[falta exemplo]]

Herança

Quando falamos em herança estamos falando de uma classe base que herda características de uma classe derivada. Como no seguinte exemplo:

Composição e Agregação

Em associação vimos que podemos fazer uma classe ter outra como um atributo. Entretanto, ficaram em aberto algumas questões. Quem cria o objeto? É ela mesma? É outra classe?

Quando falamos em Agregação e Composição, estamos falando de um relacionamento onde uma classe pode até receber um objeto como atributo, entretanto, ela não é responsável pela criação desse objeto. Ao mesmo tempo que outra classe, essa sim é responsável pela criação.

No exemplo, temos um objeto de Seguro criado pela Seguradora e que é atribuído ao Motorista

[[exemplo de código]]

Todos as imagens de diagramas presentes neste artigo foram geradas com código através do Mermaid, quem tiver curiosidade em como fazer isso também, vejam a documentação.

Top comments (0)