DEV Community

Emanoel Carvalho
Emanoel Carvalho

Posted on

1

Associação entre Classes ou Objetos em Java

Na programação orientada a objetos (POO), a associação entre classes ou objetos é um relacionamento onde um objeto de uma classe se refere a outro objeto de outra classe. Essa associação pode ser simples ou complexa e pode ser representada de diversas maneiras. Três tipos principais de associação são usados para modelar o relacionamento entre objetos:

  • Composição
  • Agregação
  • Multiplicidade

1. Composição (Composição Forte)

A composição é um tipo de associação mais forte, onde um objeto "parte" de outro objeto. Se o objeto "pai" for destruído, seus objetos "filhos" também serão destruídos. Em outras palavras, o ciclo de vida dos objetos componentes depende do ciclo de vida do objeto que os contém.

Características da Composição:

  • Relacionamento forte: O objeto "pai" contém o objeto "filho" e controla seu ciclo de vida.
  • Destruição: Quando o objeto "pai" é destruído, o objeto "filho" também é destruído.
  • Exemplo: Uma casa e seus cômodos. Se a casa for destruída, os cômodos também serão destruídos, pois não existem independentemente.

Exemplo de Composição:

class Cômodo {
    private String nome;

    Cômodo(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

class Casa {
    private Cômodo cozinha;
    private Cômodo sala;
    private Cômodo quarto;

    // Construtor que cria os cômodos como parte da casa
    Casa() {
        this.cozinha = new Cômodo("Cozinha");
        this.sala = new Cômodo("Sala");
        this.quarto = new Cômodo("Quarto");
    }

    public void mostrarCômodos() {
        System.out.println("Cômodos da casa: ");
        System.out.println(cozinha.getNome());
        System.out.println(sala.getNome());
        System.out.println(quarto.getNome());
    }

    // A Casa destrói automaticamente seus Cômodos quando a Casa é destruída.
}

public class TesteComposicao {
    public static void main(String[] args) {
        Casa casa = new Casa();
        casa.mostrarCômodos();
        // Se a casa for destruída, os cômodos também seriam.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação:

  • A Casa tem instâncias de Cômodo. No exemplo acima, quando a instância de Casa for destruída, os Cômodos (cozinha, sala, quarto) também seriam destruídos, pois são componentes da Casa e não existem independentemente.
  • A relação entre Casa e Cômodo é uma composição forte.

2. Agregação (Composição Fraca)

A agregação é uma forma de associação mais fraca em que o objeto "pai" pode conter objetos "filhos", mas esses objetos podem existir independentemente do "pai". Ou seja, se o objeto "pai" for destruído, os objetos "filhos" podem continuar existindo.

Características da Agregação:

  • Relacionamento mais fraco: O objeto "pai" contém o objeto "filho", mas não é responsável por seu ciclo de vida.
  • Existência independente: Os objetos "filhos" podem existir sem o objeto "pai".
  • Exemplo: Um departamento e seus funcionários. O departamento pode existir sem os funcionários, e os funcionários podem existir sem o departamento.

Exemplo de Agregação:

class Funcionario {
    private String nome;

    Funcionario(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

class Departamento {
    private String nome;
    private Funcionario funcionario;

    Departamento(String nome, Funcionario funcionario) {
        this.nome = nome;
        this.funcionario = funcionario;
    }

    public void exibirInformacoes() {
        System.out.println("Departamento: " + nome);
        System.out.println("Funcionario: " + funcionario.getNome());
    }

    // Mesmo que o Departamento seja destruído, o Funcionário pode continuar existindo.
}

public class TesteAgregacao {
    public static void main(String[] args) {
        Funcionario funcionario = new Funcionario("Maria");
        Departamento departamento = new Departamento("RH", funcionario);
        departamento.exibirInformacoes();
        // O Departamento pode ser destruído, mas o Funcionário ainda existe.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação:

  • A agregação é uma associação mais fraca entre Departamento e Funcionario. Mesmo que o Departamento seja destruído, o Funcionario pode continuar existindo, já que ele é uma entidade independente.
  • A relação entre Departamento e Funcionario é uma agregação.

3. Multiplicidade

A multiplicidade descreve quantas instâncias de uma classe podem estar associadas a uma instância de outra classe. Ela indica o número de objetos que podem estar relacionados entre si.

Tipos de Multiplicidade:

  • 1:1: Um objeto de uma classe está relacionado a exatamente um objeto de outra classe.
  • 1:N: Um objeto de uma classe pode estar relacionado a vários objetos de outra classe (um para muitos).
  • N:M: Vários objetos de uma classe podem estar relacionados a vários objetos de outra classe (muitos para muitos).

Exemplo de Multiplicidade 1:N:

class Autor {
    private String nome;

    Autor(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

class Livro {
    private String titulo;
    private Autor autor; // Um autor para muitos livros

    Livro(String titulo, Autor autor) {
        this.titulo = titulo;
        this.autor = autor;
    }

    public void exibirInformacoes() {
        System.out.println("Livro: " + titulo);
        System.out.println("Autor: " + autor.getNome());
    }
}

public class TesteMultiplicidade {
    public static void main(String[] args) {
        Autor autor = new Autor("J.K. Rowling");
        Livro livro1 = new Livro("Harry Potter e a Pedra Filosofal", autor);
        Livro livro2 = new Livro("Harry Potter e a Câmara Secreta", autor);

        livro1.exibirInformacoes();
        livro2.exibirInformacoes();
        // Um autor pode escrever vários livros, mas cada livro tem exatamente um autor.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação:

  • A relação entre Autor e Livro é de 1:N. Um Autor pode escrever vários Livros, mas cada Livro tem exatamente um Autor.
  • Este tipo de associação é um exemplo de multiplicidade 1:N.

Exemplo de Multiplicidade N:M:

class Estudante {
    private String nome;

    Estudante(String nome) {
        this.nome = nome;
    }

    public String getNome() {
        return nome;
    }
}

class Curso {
    private String nome;
    private List<Estudante> estudantes = new ArrayList<>();

    Curso(String nome) {
        this.nome = nome;
    }

    public void adicionarEstudante(Estudante estudante) {
        estudantes.add(estudante);
    }

    public void exibirInformacoes() {
        System.out.println("Curso: " + nome);
        for (Estudante estudante : estudantes) {
            System.out.println("Estudante: " + estudante.getNome());
        }
    }
}

public class TesteMultiplicidadeNM {
    public static void main(String[] args) {
        Estudante estudante1 = new Estudante("Ana");
        Estudante estudante2 = new Estudante("Carlos");

        Curso curso = new Curso("Matemática");
        curso.adicionarEstudante(estudante1);
        curso.adicionarEstudante(estudante2);

        curso.exibirInformacoes();
        // Muitos estudantes podem estar matriculados em muitos cursos.
    }
}
Enter fullscreen mode Exit fullscreen mode

Explicação:

  • A relação entre Estudante e Curso é de N:M. Muitos Estudantes podem estar matriculados em muitos Cursos, e um Curso pode ter muitos Estudantes.
  • A multiplicidade N:M implica que o relacionamento é mais complexo, e frequentemente exigirá uma classe intermediária (como uma tabela de relacionamento em banco de dados).

Conclusão

  • Composição: Relacionamento forte, onde o ciclo de vida do objeto "filho" depende do objeto "pai". Se o objeto "pai" for destruído, o objeto "filho" também será.
  • Agregação: Relacionamento mais fraco, onde o objeto "pai" pode conter objetos "filhos", mas esses objetos podem existir independentemente.
  • Multiplicidade: Refere-se à quantidade de objetos de uma classe que podem ser associados a objetos de outra classe. Pode ser 1:1, 1:N, ou N:M.

Speedy emails, satisfied customers

Postmark Image

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up

Top comments (0)