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;
}
Note duas coisas importantes:
Eu não escrevi
- cpudentro deComputador, o nome do atributo (quando é um atributo) fica na setinha.A setinha está apontando de computador para processador, e não o contrário.
Importante
Apesar de você não colocar
- cpu: Processadorna definição dos atributos deComputador, 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)