[MÚSICA] Olá
a todos meu nome é Eduardo Guerra.
Este o curso de Desenvolvimento Ágil com Padrões de Projeto.
Hoje vamos falar sobre o padrão Template Method.
A ideia é criar como se fosse método modelo para a gente criar
algoritmos que a gente possa especializar somente partezinhas dele.
Muito interessante o uso do conceito de hook methods que a gente viu na aula
passada.
Imagina por exemplo que você tem uma receita de bolo de banana.
Eu por exemplo meu professor sempre disse que a gente pode considerar o
algoritmo como uma pequena receita.
Então imagina que esse aqui é o nosso algoritmo para fazer bolo de banana.
Então tem aí o bolo de banana, tenho misturar os ingredientes, coloco na forma,
adiciono as bananas por cima, e boto no forno para assar.
Perfeito.
Agora imagina que tem bolo de castanha.
O que que eu tenho que fazer?
Misturar os ingredientes, colocar na forma ao invés de colocar banana por cima,
eu vou colocar castanha por cima, e aí eu boto no forno para assar.
Se a gente parar para pensar é bem parecido.
A gente podia até criar modelo de receita de bolo,
modelo de algoritmo para fazer bolo.
Será?
Então eu tenho alí bolo de alguma coisa, alí viria a foto do bolo,
e alí no lugar de antes a gente ver que nos escritos
ali o que é a mesma coisa e para onde vai criar vai ter aquela interrogação,
eu vou colocar alí o que que vai por cima do bolo.
A gente pode dizer que isso aí seria o template de receita de bolo.
Quem nunca utilizou template para fazer
trabalho de escola ou para fazer, sei lá, relatório, alguma coisa assim?
As vezes fala assim, eu tenho as vezes por exemplo para quem
já é maior as vezes tem que fazer documento, uma declaração.
O que que você quer?
Quer já aquele modelo prontinho onde você vai lá e preenche só aquelas partezinhas
com seu nome, seus documentos, com o que o professor está pedindo,
mas o modelo alí do cabeçalho, a parte da assinatura e tal é tudo a mesma.
Às vezes o professor fala assim "Olha,
eu quero aqui que você crie relatório, e tenho que ter esse
formato onde você vai somente preencher aquelas partes que faltam".
Então essa é a ideia que eu tenho.
Ter esse modelo com as coisas que não mudam fixas.
E você simplesmente preencher as partes que podem variar.
Bom mas será que dá para fazer isso com método?
Dá sim.
A gente pensar algoritmos assim como o do bolo,
as vezes a gente tem métodos que tem várias partes que são
iguais e outras pequenos pontos alí podem haver diferenças.
É como se a gente tivesse alí uma família de algoritmos metodos bem parecidos,
somente com alguns pontos alí de diferenças.
Às vezes por exemplo "Você tem que pegar, percorrer uma lista" "e
aí escolher uma, e de repente o critério para escolher esse é diferente".
Então esse tipo de coisa a gente pode estar fazendo aí.
Então como que funciona isso?
Como é que a gente cria template de method?
A gente cria alí método, uma classe normalmente abstrata,
que vai ter alguns uns passos que vão ser métodos abstratos.
Esses passos,
esses métodos abstratos são como se fossem aquelas partes que podem variar.
Por exemplo ali a parte do formulário que você vai deixar por
exemplo para o cara preencher.
E a parte do método que tem o comportamento fixo são aquelas
partes que quem está preenchendo não vai mudar.
Então a gente vai ter o método que a gente chamou de templateMethod que vai ter toda
a lógica principal, e nos pontos onde pode variar ele vai chamar aqueles métodos
que são abstratos que estão representados alí pelo método passo 1 e passo 2.
Então depois a gente vai ter uma subclasse que
vai especializar aquela classe que tem o templateMethod,
e aí aquele método que era o principal a gente não muda.
A gente deixa ele do jeito que é.
Mas o fato da gente estar implementando aqueles métodos abstratos faz com que
a gente esteja sobreescrevendo aqueles passos lá de cima.
Então quando a gente cria esse método abstrato, a gente implementa esse método
abstrato na subclasse é como se agente estivesse preenchendo aquele branco
do formulário do nosso template method definidos na superclasse.
E aí se a gente falar assim "Poxa, mas tem uma coisa parecida ali com o hook method".
O template method ele usa o conceito dos hook methods,
só que são coisas diferentes.
O template method ele já é uma coisa mais específica.
Ele é padrão.
O hook method, é uma prática de design.
Ele tem a ver com a estrutura, ele não tem a ver com a motivação.
Você vê que quando eu falo aqui do template method eu estou falando "Olha,
você tem uma família de algoritmos parecidas que muda só alguns pontos".
Isso aí já é problema mais específico.
O hook method é mais uma técnica de design, é mais uma estrutura.
E aí seria correto a gente dizer o template method ele usa esse conceito de
hook method.
Então eu espero que vocês tenham entendido nessa aula o conceito
de template method, e continuem vendo na próxima aula que a gente tem
mais exemplos de padrão que usa hook method
para você entender como que ele pode ser utilizado para diferentes contextos.
Certo?
Muito obrigado.
Até a próxima aula [MÚSICA]