Article image
Joel Oliveira
Joel Oliveira22/03/2023 17:35
Compartilhe

Programação Orientada a Objetos: Herança x Associação

  • #Java

Associação e herança são dois dos principais conceitos da programação orientada a objetos (POO).

Associação é um relacionamento entre duas ou mais classes, em que uma classe usa objetos de outra classe como parte de suas operações. Esses objetos são normalmente passados para a classe que usa através de parâmetros de método ou variáveis de instância. A associação pode ser de dois tipos: unidirecional ou bidirecional. Na associação unidirecional, uma classe usa objetos de outra classe, mas a outra classe não usa objetos da primeira classe. Na associação bidirecional, as duas classes usam objetos um do outro.

Por exemplo, uma classe Carro pode estar associada com uma classe Motor, pois um carro precisa de um motor para funcionar. A classe Carro pode ter uma variável de instância do tipo Motor para armazenar o motor do carro. Quando o método ligar() do carro é chamado, ele chama o método ligar() do motor.

public class Carro {
private Motor motor;

public Carro(Motor motor) {
  this.motor = motor;
}

public void ligar() {
  motor.ligar();
}
}

public class Motor {
public void ligar() {
  System.out.println("Motor ligado.");
}
}

// Exemplo de uso
Motor motor = new Motor();
Carro carro = new Carro(motor);
carro.ligar(); // Output: Motor ligado.

Herança é um mecanismo em que uma classe pode herdar as propriedades (métodos e variáveis) de outra classe. A classe que herda é chamada de classe filha ou subclasse, e a classe que é herdada é chamada de classe pai ou superclasse. A herança permite que as classes filhas reutilizem o código da classe pai e adicionem novos recursos. A classe filha pode substituir os métodos da classe pai e adicionar novos métodos e variáveis.

Por exemplo, uma classe Veiculo pode ser a classe pai, e as classes Carro, Moto e Caminhao podem ser classes filhas. A classe Veiculo pode ter propriedades gerais, como velocidadeMaxima e pesoMaximo, e as classes filhas podem adicionar propriedades específicas, como numeroDePortas para a classe Carro e cilindrada para a classe Moto . As classes filhas também podem substituir o método acelerar() da classe pai para ajustar o comportamento específico do veículo.

public class Veiculo {
protected int velocidadeMaxima;
protected int pesoMaximo;

public void acelerar() {
  System.out.println("Acelerando.");
}
}

public class Carro extends Veiculo {
private int numeroDePortas;

public void abrirPorta(int numero) {
  System.out.println("Abrindo porta " + numero);
}

@Override
public void acelerar() {
  System.out.println("Acelerando carro.");
}
}

// Exemplo de uso
Carro carro = new Carro();
carro.velocidadeMaxima = 200;
carro.pesoMaximo = 2000;
carro.numeroDePortas = 4;
carro.acelerar(); // Output: Acelerando carro.
Compartilhe
Comentários (0)