Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Interfaces

Estou com uma dúvida em relação á interfaces na verdade...

No mesmo exemplo da aula... em que temos vários tipos de impostos.

Quando criamos o método RealizarCalculo(Orcamento orcamento, Imposto imposto) , este recebe no segundo parâmetro, o tipo de uma interface, ou seja, qualquer objeto que implemente o método daquela interface, pode ser passado como parâmetro desse método já que obrigatoriamente aquele objeto terá a implementação concreta.

Desde que programo OO, isso nunca fez sentido pra mim. Já li diversos artigos na internet porém nunca fica tão claro. Por que eu devo definir o tipo de uma interface como parâmetro de um método ou como um tipo de uma variável de uma classe?

Eu entendo que quando eu for atribuir uma referência ao tipo da interface, a implementação será a daquela referência, mas e se eu quiser manipular qualquer outra informação? O tipo da interface não vai me permitir isso por que eu não tenho o acesso aos atributos daquele objeto e nem vou saber quais são. Se eu passasse um tipo concreto, teria acesso. Não sei se consegui ser claro na minha dúvida.

1 resposta
solução

Boa noite, Leonardo! Como vai?

Desde que programo OO, isso nunca fez sentido pra mim. Já li diversos artigos na internet porém nunca fica tão claro. Por que eu devo definir o tipo de uma interface como parâmetro de um método ou como um tipo de uma variável de uma classe?

Esse tipo de coisa é feito quando vc quer utilizar um recurso muito conhecido chamado de polimorfismo! Com ele, vc ganha flexibilidade, pois, como vc mesmo disse, é possível passar para o tal método um objeto de qualquer classe que implemente a tal interface!

Eu entendo que quando eu for atribuir uma referência ao tipo da interface, a implementação será a daquela referência, mas e se eu quiser manipular qualquer outra informação? O tipo da interface não vai me permitir isso por que eu não tenho o acesso aos atributos daquele objeto e nem vou saber quais são. Se eu passasse um tipo concreto, teria acesso. Não sei se consegui ser claro na minha dúvida.

Isso é o que poderíamos chamar de contrapartida das interfaces. Elas nos dão flexibilidade, mas também nos impossibilitam de utilizar algo específico das implementações! A forma de resolver isso é avaliando a situação que devemos tratar! Se estamos numa situação que exige flexibilidade, utilizamos o polimorfismo. Se, por outro lado, estamos numa situação onde precisamos utilizar informações de implementações específicas, então utilizamos elas em vez das referências com interfaces.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software