[MÚSICA] Olá todos, esse é o curso de desenvolvimento ágil com padrões de projeto Nessa aula eu vou falar para vocês sobre as Hook Classes. A gente viu lá sobre os Hook Methods no módulo anterior e agora vamos falar das Hook Classes, que é o princípio de adaptação de comportamento pelo meio da composição. Vamos ver qual a diferença das Hook Classes dos Hook Methods, entender aí pouquinho como que funciona isso. Então os Hook Methods que a gente viu, eles não são a única forma de deixar esta estrutura flexível para poder ser estendida. A gente vai ver as Hook Classes. Então, como é que funciona? A gente tem, enquanto os Hook Methods, a gente tem ali eles representados também, eles são métodos abstratos que vão ser implementados só na subclasse de forma que a gente consegue estar plugando, estar pendurando ali aquele novo comportamento. A grande diferença da Hook Class, é que por exemplo esse método, que o método principal chama, que é o método abstrato, imagina que é a mesma coisa só que como se ele não tivesse na própria classe, como se ele tivesse numa outra classe. Então, no caso ali, por exemplo, imagina que eu tenha uma variável do tipo Hook Class dentro da minha Superclasse, e aí eu vou, por exemplo, chamada Hook, e aí eu vou chamar hook.hook, eu vou chamar ali o método hook dentro desta instância. Ao invés de chamar na própria classe, eu vou chamar dentro de uma instância que compõe a minha classe. Então é como se fosse Hook Method outra classe. A grande vantagem é que se eu pegar a instância que está compondo a minha Superclasse e conseguir trocar ela, eu consigo Tá? A grande vantagem é que se eu pegar a instância, se eu trocar a instância que está compondo minha Superclasse aqui, eu consigo estar trocando aquele comportamento que vai ser chamado, olha que legal! Quando a gente tinha o Hook Method, como era herança, isso já era determinado no momento que eu instanciava. Agora eu consigo trocar. Então, esse método principal vai delegar parte do seu comportamento para uma outra classe que está compondo ele. Lembra que você tem que delegar alguma coisa, não podendo fazer tudo na mesma classe. Então, vendo como isso funcionaria eu posso ter a lógica comum. Eu tenho ali o Hook Method para vermos como era o que a gente tinha aprendido, e ele chama método que está na mesma classe, só que ele é método abstrato e vai ser definido só na subclasse. A Hook Class eu estou chamando de "hookClass.hook", ou seja, eu estou chamando método que está dentro de uma instância que está compondo a minha classe. Seria ali eu estar delegando, para método externo, aquela parte do comportamento. Então ela pode ser alterada tempo de execução, é uma das grandes vantagens da Hook Class. Se eu trocar aquela instância que está compondo passo a ter essa possibilidade de alteração tempo de execução. Não depende da hierarquia de classe, ou seja, eu posso compor minha classe com quantas outras classes eu quiser. Então eu não tenho mais aquela limitação de herança de usar uma vez só. E acaba sendo que é uma classe que eu posso até usar outros contextos. Por exemplo, eu posso pegar essa Hook Class e utilizar outra parte do meu sistema. Nada impede que eu faça isso. Às vezes é algorítimo que pode ser útil também outras partes do meu sistema. Então a gente aprendeu as Hook Classes. A gente já viu o bridge, a gente viu lá no começo da nossas aulas o strategy, que utiliza também esse conceito da composição das Hook Classes. E vamos ver mais as próximas aulas. Pode esperar que teremos mais Hook Classes outros padrões ainda nesse módulo, certo? Então não perca a próxima aula. Eu espero vocês! [MÚSICA] [MÚSICA]