Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

COMPOSIÇÃO X HERANÇA

Eu fiquei um pouco confuso em relação a utilização da composição. Basicamente você cria um ponteiro para outra classe para que seja possível acessar todos os valores dela através desse ponteiro que você criou. Então ao meu ver, resumidamente, você através do ponteiro "herda" todos os atributos da outra classe.

Exemplo:

public class Cliente {

    String nome;
    String cpf;
    String profissao;

}
public class Conta{

    double saldo;
    int agencia;
    int numero;
    Cliente titular;
}
Conta contaDaMarcela = new Conta();

contaDaMarcela.titular = new Cliente();
contaDaMarcela.titular.nome = "Marcela";

Então é que vem minha dúvida. Não usamos a herança com a mesma finalidade? Pois utilizando a herança você alcança o mesmo propósito e ainda por cima a classe "filha" herda todos os atributos automaticamente, sem a necessidade de criar "setas". Em quais casos eu devo usar um e não o outro?

Obs: Ressalto que ainda sou consideravelmente novato, então se eu estiver falando asneiras, por favor explique melhor o conceito tanto de herança quanto de composição. Pode ser que eu não tenha compreendido muito bem.

3 respostas
solução!

Mateus

Vamos as definições para que, talvez, torne mais claro seu entendimento:

herança --> é quando você tem uma relação de classe mãe e filha. Quando uma classe herda de outra , ela no contexto é a filha ou subclasse. Ela terá como obrigação a implementação de todos módulos da mãe e também terá os atributos A herança permite você na classe filha a definição de novos atributos e métodos. A grande vantagem disso é não ter que partir do zero para especializar uma classe existente e você reutiliza código.

composição --> A composição usa o termo TEM UM. Por exemplo, podemos dizer que um cliente TEM UMA conta. É um conceito de extensão de uma classe, de composição de objetos de maneira que as classes separadas compõe um objeto todo.

Por exemplo: a classe banco seria composta pelas classes: conta corrente e conta poupança. Uma vez que o objeto da classe banco fosse destruído, as demais também deverão ser.

No geral, ambas tem prós e contras.

Espero ter ajudado ;)

Mais informações : https://www.devmedia.com.br/abstracao-encapsulamento-e-heranca-pilares-da-poo-em-java/26366

http://www.macoratti.net/11/05/oop_cph1.htm

Oi Mateus, tudo tranquilo?

É normal ter dúvidas em relação à utilização da herança e composição já que ambos são usadas para reutilizar funcionalidades. Mas vamos lá, você já pegou o conceito de herança, como você mesmo disse: a classe "filha" herda os atributos e métodos da classe "mãe". Mas é aí que vem o pulo do gato, quando você diz que a classe Cliente HERDA a classe Conta, é o mesmo que dizer que a classe Cliente É também uma classe Conta, afinal ela possui os mesmos atributos e métodos que foram herdados da classe mãe Conta, soa um pouco errado dizer que um Cliente é uma Conta, já que eles nem deveriam possuir os mesmos atributos e métodos.

Mas a composição, por sua vez, é a transferência de trabalho para outra classe, ou seja, você delega um objeto como parte da composição de outra classe. No exemplo dado em aula, o professor, inicialmente, passou os atributos da classe Cliente na classe Conta:

public class Conta {

    double saldo;
    int agencia;
    int numero;
    String titular;
    String cpf;
    String profissao;

}

Só para depois criar a classe Cliente que serviria agora como um tipo dentro de Conta, ou seja, o Cliente agora COMPÕE a Conta:

public class Conta {

    double saldo;
    int agencia;
    int numero;
    Cliente titular;
}

Lembra de quando eu disse que quando uma classe herda a outra, você está dizendo que a classe filha (Cliente, no exemplo) É a classe mãe. Bom, na composição, basta trocar o É por TEM. Ficaria algo como, a Conta TEM Clientes. Espero ter ajudado, se ficou alguma dúvida é só avisar!

Muito obrigado, essa explicação tirou completamente minhas dúvidas.