AULA 06
MÓDULO 1
relacionamentos
⏱ 50 min
Composição e Agregação
HAS-A em dois sabores: composição (ciclo compartilhado) e agregação (independente). ArrayList para 1:N. Conexão direta com modelagem de BD.
composiçãoagregaçãoArrayList1:NHAS-Afor-each
HAS-A vs IS-A
Há dois tipos de relacionamento entre classes: HAS-A (tem um) e IS-A (é um). Composição e agregação são ambos HAS-A — a diferença está no ciclo de vida da parte em relação ao todo.
conexão com Banco de Dados
Você já modelou 1:N em BD: um Departamento tem muitos Funcionários. O mesmo relacionamento em Java: Departamento tem uma ListComposição vs Agregação
◆ Composição (losango cheio)
Parte NÃO existe sem o todo.
Ciclo de vida compartilhado.
Ex: Coração dentro de Corpo.
Se o Corpo morre, o Coração também.
Ciclo de vida compartilhado.
Ex: Coração dentro de Corpo.
Se o Corpo morre, o Coração também.
◇ Agregação (losango vazio)
Parte PODE existir sem o todo.
Ciclos de vida independentes.
Ex: Professor em Turma.
Se a Turma dissolve, Professor continua.
Ciclos de vida independentes.
Ex: Professor em Turma.
Se a Turma dissolve, Professor continua.
ArrayList — primeira coleção
ArrayList<T> é a coleção mais usada em Java. Internamente é um array redimensionável. Perfeito para a maioria dos relacionamentos 1:N.
preview: custo de ArrayList
ArrayList usa array interno. Inserir no FIM é O(1) amortizado. Remover do MEIO é O(n) — precisa deslocar todos os elementos à direita. Veremos outras coleções na Aula 9.
java
// Composição: Endereco pertence a Pessoa (ciclos compartilhados) public class Endereco { private String rua, cidade, cep; public Endereco(String rua, String cidade, String cep) { this.rua=rua; this.cidade=cidade; this.cep=cep; } public String toString() { return rua+", "+cidade+" - "+cep; } } public class Pessoa { private String nome; private Endereco endereco; // composição public Pessoa(String nome, Endereco endereco) { this.nome=nome; this.endereco=endereco; } public String toString() { return nome+" — "+endereco; } } // Agregação: Departamento agrega Funcionarios (independentes) public class Departamento { private String nome; private List<Funcionario> funcionarios = new ArrayList<>(); public void adicionarFuncionario(Funcionario f) { funcionarios.add(f); } public void removerFuncionario(Funcionario f) { funcionarios.remove(f); // O(n) — deslocamento! } public void listar() { // for-each: idioma Java para iterar coleções for (Funcionario f : funcionarios) System.out.println(" • " + f); } public int tamanho() { return funcionarios.size(); } }
quiz · aula 06
Teste seus conhecimentos em Java
0/3 respondidas
QUESTÃO 01
Qual é a diferença entre composição e agregação?
QUESTÃO 02
ArrayList.remove(indice) no meio da lista tem qual complexidade?
QUESTÃO 03
Como representar 1:N (um Departamento, muitos Funcionários) em Java?
0/3