[MÚSICA] [MÚSICA] Olá a todos! Meu nome é Eduardo Guerra, esse é o curso de Desenvolvimento Ágil com Padrões de Projeto. Na aula de hoje vamos falar sobre "Hook Methods". O quê que é "Hook Methods"? É aquele princípio que está por trás de como você utiliza a herança para poder fazer a adaptação de comportamento. Então a gente vai entender aí o quê que são esses "Hook Methods", como que esses "Hook Methods" são utilizados para fazer essa adaptação de comportamento dentro dos padrões. A gente vai ver que mais de padrão usa o conceito de "Hook Methods". Vamos ver quais são então. Então uma coisa que a gente aprende quando a gente vê herança, é que quando você cria uma subclasse, você deve manter o que é comum, ou seja, manter na "Superclasse" aquele comportamento que é comum, e na subclasse definir somente aquele comportamento que é diferente. Então, esse exercício de fazer essa abstração, de identificar "Superclasse", é justamente você identificar pontos comum dentro das classes. Como é que funciona aí o "Hook Method"? A gente tem ali, por exemplo, o método principal, e tem o método que é o "Método Gancho". Como é que vai funcionar isso? Esse "Método Gancho" vai ser aquele onde, vai ser normalmente método abstrato ou método que tenha interconexão muito simples, como se vazia na "Superclasse". E as subclasses, normalmente, quando estendem a "superclasse", elas implementam aquele método, subscrevem aquele método, aquele "Hook Method" para pendurar, digamos assim, novas funcionalidades naquele classe. Normalmente, esses "Hook Methods", ele vai ser chamado dentro de outros métodos, como a gente pode ver aqui. Então a gente vai ter, por exemplo, método comum da classe, imagina que eu tenho partes que são comuns e pedacinho ali que as vezes pode variar de acordo com a subclasse. Como que a gente faz isso? A gente cria método, coloca toda a funcionalidade comum, chama o 'Hook Method" naquele ponto que a gente quer que o comportamento possa ser especializado pela subclasse e depois, pode colocar outra lógica comum. Muitas vezes quando a gente fala subclasse, a gente pensa assim: " ele pode colocar métodos inteiros da "Superclasse". A verdade é assim, só que a gente utilizando o "Hook Method", a gente consegue fazer com que, digamos assim, o comportamento que vai ser adaptado na "Superclasse" pode ser pedaço de método, pedaço que vai ser, digamos assim, caracterizado pela chamada desse "Hook Method", que pode ser sobrescrito aí na subclasse. Então, o quê que seria a definição de "Hook Method", que a gente pode ver aqui do lado? É método abstrato que a implementação só é definida na subclasse. Então, lembrando que se eu o defino ali na "Superclasse", ela pode usá-lo à vontade. Mas, digamos assim, como eu não posso instanciar a classe porque é método abstrato, somente quando eu tiver uma subclasse que realmente vai chamar alguma coisa ali naquele momento. Então vamos lá, o "Hook Method" é uma forma de permitir que outros comportamentos possam ser plugados naquela classe, então, eu falo assim: "Olha! Tem esse comportamento aqui, eu gostaria que esse pedacinho aqui, as pessoas pudessem adaptar e colocar comportamento delas, queria que elas pudessem plugar novos comportamentos aqui nessa classe." O "Hook Method" é uma das técnicas que a gente pode utilizar para fazer isso, e a gente vai ver, nas próximas aulas, que vários padrões realmente utilizam. Então, com isso, a gente começa a enxergar ali os modificadores de acesso pouquinho diferentes. Então, por exemplo, quando a gente bota método como o "Abstract", quer dizer que aquilo ali é "Hook" que é obrigatório, tá?! Na verdade, não só modificadores de acesso, o "Abstract" seria modificador método mesmo, não só de acesso, mas modificadores de método, incluindo aí modificadores de acesso. Então o "Abstract" é "Hook" obrigatório; o "Final", ele nunca pode ser "Hook", porque ele não vai poder ter subscrito; o "Private" também, como a subclasse não tem acesso, ele também nunca vai poder ser "Hook", então quando eu tenho método interno na classe e eu não quero que ele possa ser "Hook", eu o declaro como privado; e o "Public Protected", eu estou falando: "Olha! Esses métodos aqui, eles são candidatos a Hook". Quando eu falei aqui na definição do "Hook Method", eu vou voltar pouquinho aqui, eu falei assim: "É método abstrato, não necessariamente, ele precisa ser abstrato no sentido de ter a palavra "Abstract", mas as vezes pode ser que seja mais ou menos uma implementação vazia, ou que sei lá, não faz nada. No esquema que a gente viu aí do "Null Object", como eu falei, as técnicas você tem que adaptar às suas necessidades. Então, quando eu declaro método como "Public Protected" pelo fato deles poderem ser sobrescritos nas subclasses, eles são sempre candidatos ao "Hook", a ser criado "Hook" cima deles. Então, lembrando aí que os "Hook Methods" são utilizados nos próximos padrões que a gente vai ver nas próximas aulas. Mas por enquanto, eu espero que nessa aula você entendido melhor o conceito do "Hook Method", dessa estrutura, onde você cria métodos que são feitos para você poder sobrescrever na subclasses e plugar novos comportamentos ali naquela parte do código. Certo? Muito obrigado! Até a próxima aula. [MÚSICA] [MÚSICA]