[MÚSICA] Meu
nome é Eduardo Guerra.
Esse é o curso de Orientação a Objetos com Java.
Hoje eu vou tá falando para vocês sobre interfaces na orientação a objetos.
A gente vai aprender nessa aula a ideia do que é que são interfaces e como
elas podem ser utilizadas na abstração de comportamento.
Imagina o seguinte: eu tenho ali, por exemplo,
uma classe cavalo, uma classe carro, ambos se movem e eu quero
modelar essa característica comum entre cavalos e carros.
Por exemplo, eu tenho, quero fazer uma classe corrida, eu posso fazer
uma corrida entre qualquer coisa que se move, então como é que eu faço isso?
Vamos pensar herança.
Cavalo não é carro, muito menos carro é cavalo.
Então não faz sentido eu pegar a classe, por exemplo,
cavalo estender carro para aproveitar a funcionalidade de movimento dela.
Nem faz sentido eu pegar a classe carro e estender cavalo para
aproveitar a característica de movimento dela.
Não é esse que é o reuso da orientação objeto.
A gente só deve usar a herança quando a subclasse,
ela é da superclasse, e nesse caso não se aplica.
Então o que a gente poderia fazer é, de repente, tentar pensar numa superclasse
comum que concentrasse essa funcionalidade e para que os dois pudessem
herdar dessa classe, os dois pudessem estender essa classe.
Só que o problema é que tanto o cavalo quanto o carro,
eles já têm uma hierarquia.
Então, por exemplo, o cavalo ele tem lá uma hierarquia,
por exemplo, de animais que talvez nem todos se
movam e o carro já vem de uma outra hierarquia de veículos.
Como a gente viu a herança, principalmente Java, ela não pode ser utilizada duas
vezes, então eu não consigo pegar e falar assim " eu vou criar aqui uma classe comum
entre carro e cavalo e vou fazer com que os dois herdem também dela".
E então não vou conseguir fazer isso.
A linguagem não me permite.
Se a gente pensar e falar assim: bom essas classes elas têm uma coisa
comum mas não têm a ver com o que elas são.
Que o relacionamento da herança ele tem haver com o que a classe é.
Quando a gente fala que é uma classe A estende uma classe B,
é porque a classe A é da classe B.
Nesse caso o que essas classes têm comum é comportamento.
Independente de uma ser animal outra ser veículo, elas se comportam da mesma forma.
Na verdade não precisam se comportar completamente da mesma forma
mas tem uma parte do comportamento delas que é comum.
Como que a gente faz isso?
Agora temos as interfaces.
Da mesma forma que a gente pode utilizar uma classe para abstrair conceito,
a interface ela é feita para abstrair comportamento.
É como se a interface fosse tipo de contrato.
No momento você fala assim: "Olha o comportamento de mover,
toda classe que precisar do comportamento de mover, ela vai ter esses métodos",
e aí no momento que uma classe implementa uma interface
nós dizemos que ela está assinando o contrato daquela interface,
significa que é meio que como ela se comprometesse a disponibilizar
os métodos daquela interface para que outras classes possam utilizar.
Recapitulando, a interface ela define
comportamento através de conjunto de métodos e a classe que
implementa aquela interface ela meio que assume o compromisso,
ela assina contrato de que vai prover aqueles métodos.
Então, por exemplo, no nosso caso ali do cavalo e do veículo,
a gente tem ali a classe, poderíamos definir uma interface móvel
que vai capturar esse comportamento que é comum tanto ao carro quanto ao cavalo,
e a gente diz que essa classe implementa ou realiza essa interface.
Então eu posso falar assim: "Olha o cavalo ele implementa móvel".
Significa que ele tem contrato de que vai ter todos os
métodos de móvel implementados.
Mesma coisa o carro.
Posso dizer, usando uma palavra diferente,
que o carro realiza móvel e com isso ele vai também ter todos os métodos de móvel.
Então imagine agora aquela classe que eu citei lá no começo,
a classe corrida, ela pode receber, por exemplo,
uma lista de objetos que implementam essa interface móvel.
Então, por exemplo, essa classe corrida,
ela pode tanto receber uma lista de cavalos,
quanto ela pode receber uma lista de carros, quanto ela pode receber
uma lista de qualquer objeto que implemente essa interface móvel.
Então se você pegar e falar assim: " quero fazer, sei lá,
uma corrida de qualquer outra coisa aí".
Você vai pegar a sua classe, vai fazer ela implementar essa interface
móvel e a partir desse momento ela também pode ser passada para a classe corrida.
Porquê?
Porque ela tem o contrato que a classe corrida precisa que uma classe tenha.
Como eu falei,
qualquer outra classe com essa interface móvel pode ser usada na corrida.
Esse sim é o verdadeiro reuso da orientação objeto.
Você poder criar classes novas e passar para classes que já existem.
Você fazer com que classes que já existem possam compreender
classes novas e trabalhar com elas.
Como isso?
Elas compartilhando esse mesmo contrato, elas compartilhando essa mesma interface.
Então qualquer classe que tenha móvel também poderia ser passada
ali para a corrida.
Não fique chateado porque não viu nenhum código porque na próxima aula a gente
vai mostrar pouco mais sobre como implementar essas interfaces Java,
e eu espero que você tenha entendido o conceito,
as ideias sobre o que é uma interface e porque ela
é importante e as situações que você pode estar aplicando isso aí.
Muito obrigado.
Na próxima aula a gente fala pouco mais da parte prática disso daí.
[MÚSICA}