Boa noite!
Senti um ponto de interrogação quanto a explicação de composição de objetos, poderia exemplificar melhor, quando utilizar uma composição?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Boa noite!
Senti um ponto de interrogação quanto a explicação de composição de objetos, poderia exemplificar melhor, quando utilizar uma composição?
Oi Walquiria, tudo bem?
A composição é obtida usando variáveis de instância que se referem a outros objetos. Por exemplo, uma Pessoa possui um Emprego:
public class Emprego{
private String cargo;
private long salario;
}public class Pessoa{
// composição: uma pessoa tem um emprego
private Emprego emprego;
}A composição pode ser usada quando você tiver procurando por reutilização de código e o relacionamento entre essas duas classes for "tem um", no nosso exemplo: uma Pessoa tem um Emprego.
Olá Walquiria,
como no exemplo, o Paulo decide criar uma nova classe quando ele percebe que a classe Conta começa a ficar muito grande. Além disso, ele percebe que alguns atributos na verdade não seria de responsabilidade da Conta e sim de outra classe, nesse caso Cliente.
Assim, ele cria outra classe, Cliente. A partir daí, a classe Conta será composta por outra classe, a classe Cliente.
Isso é a composição, utilizar classes para compor outras, ou quando uma classe tem referências a objetos de outras classes como membros.
Pense no exemplo de uma classe Veículo. Você poderia ter vários tipos de veículos; moto, carro, etc. Todos tem um motor.
Desta forma poderia fazer uma classe Motor que iria compor sua classe Veículo, pois em cada veículo o motor teria uma configuração distinta.
Não sei se vc já estudou um pouco de banco de dados, relacionamentos... Mas pode-se dizer que quando existe um relacionamento tem-um vc tem uma composição. Como no exemplo, Veiculo tem-um Motor.
Mais ou menos isso:
class Motor {
double potencia;
public Motor (double potencia){
this.potencia = potencia;
}
}
class Carro{
Motor motor; // composição, carro tem-um motor.
public void setMotor(Motor motor){
// implementação
}
}