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 List. A chave estrangeira vira um atributo de tipo Funcionario.

Composiçã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.
◇ Agregação (losango vazio)
Parte PODE existir sem o todo.
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