SlideShare a Scribd company logo
1 of 9
Download to read offline
TemplateMethodPattern
Usando
Eriko Morais
erikopa@gmail.com
em Linguagem Dinâmica
OqueéoGroovy
● Groovy é uma linguagem de programação orientada a objetos
desenvolvida para a plataforma Java como alternativa à
linguagem de programação Java. Groovy possui
características de Python, Ruby e Smalltalk.
● Groovy utiliza uma sintaxe similar à de Java, é compilada
dinamicamente para bytecode Java, e integra-se
transparentemente com outros códigos e bibliotecas Java.
Características
Groovy possui algumas características não presentes no Java
padrão:
● Tipagem estática e tipagem dinâmica
● Sintaxe nativa para listas, arrays associativos, vetores,
e expressões regulares
● Clausuras (Clojures)
● Sobrecarga de operadores
templatemethodpattern
“O Template Method define os passos de um algoritmo e
permite que a implementação de um ou mais desses passos seja
fornecida por subclasses.”
Eric Freeman & Elisabeth Freeman - Use a Cabeça! Padrões de Projeto - 2nd ed.- p. 213
templatemethodpattern
Exemplo
abstract class Accumulator {
protected initial
abstract doAccumulate(total, v)
def accumulate(values) {
def total = initial
values.each { v -> total = doAccumulate(total,
v) }
total
}
}
class Sum extends Accumulator {
def Sum() { initial = 0 }
def doAccumulate(total, v) { total + v }
}
class Product extends Accumulator {
def Product() { initial = 1 }
def doAccumulate(total, v) {
total * v }
}
println new
Sum().accumulate([1,2,3,4])
println new
Product().accumulate([1,2,3,4])
http://groovy-lang.org/design-patterns.html#_template_method_pattern
Simplificando
Você pode ter o resultado similar injetando um método usando
Closures.
Closure addAll = { total, item -> total += item }
def accumulated = [1, 2, 3, 4].inject(0, addAll)
println accumulated // => 10
Closure multAll = { total, item -> total *= item }
accumulated = [1, 2, 3, 4].inject(1, multAll)
println accumulated // => 24
Usando closures desta forma
parece mais com o padrão de
Strategy, mas se
percebermos que o método de
injeção built-in é a parte
genérica do algoritmo para
o nosso método de modelo,
em seguida, os Closures
tornam as peças
personalizadas do padrão
Template Method.
http://groovy-lang.org/design-patterns.html#_template_method_pattern
Umareferênciarápida
Imagem retirada de http://python.pro.br/wiki/index.php?title=Design_patterns
Obrigado!
Mais sobre a linguagem em:
http://www.groovy-lang.org/

More Related Content

What's hot

T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
Carlos Santos
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
Thiago Ghisi
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02
Diego Pacheco
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
Armando Daniel
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
PHP Day Curitiba
 

What's hot (20)

T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)T10_LM3: Subalgoritmos/funções (2013-2014)
T10_LM3: Subalgoritmos/funções (2013-2014)
 
Usando POP com Programação Funcional
Usando POP com Programação FuncionalUsando POP com Programação Funcional
Usando POP com Programação Funcional
 
Testes Automatizados de Software
Testes Automatizados de SoftwareTestes Automatizados de Software
Testes Automatizados de Software
 
Por que automatizar testes de software?
Por que automatizar testes de software?Por que automatizar testes de software?
Por que automatizar testes de software?
 
Classes abstratas e interfaces
Classes abstratas e interfacesClasses abstratas e interfaces
Classes abstratas e interfaces
 
Introdução a testes automatizados
Introdução a testes automatizadosIntrodução a testes automatizados
Introdução a testes automatizados
 
Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02Aop Aspect J 1.5.4 Capitulo 02
Aop Aspect J 1.5.4 Capitulo 02
 
Aula 04 - POO - Estruturas de Controle e Repetição
Aula 04 - POO - Estruturas de Controle e Repetição Aula 04 - POO - Estruturas de Controle e Repetição
Aula 04 - POO - Estruturas de Controle e Repetição
 
Code Smells
Code SmellsCode Smells
Code Smells
 
Aula03 - JavaScript
Aula03 - JavaScriptAula03 - JavaScript
Aula03 - JavaScript
 
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
The Developer's Conference (TDC) 2013 - São Paulo: Programação assíncrona com...
 
Java orientação a objetos (interfaces)
Java   orientação a objetos (interfaces)Java   orientação a objetos (interfaces)
Java orientação a objetos (interfaces)
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Zend Framework Estrutura e TDD
Zend Framework Estrutura e TDDZend Framework Estrutura e TDD
Zend Framework Estrutura e TDD
 
Refatorações
RefatoraçõesRefatorações
Refatorações
 
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)IAsyncResult Pattern ou Asynchronous Programming Model (APM)
IAsyncResult Pattern ou Asynchronous Programming Model (APM)
 
Ruby para testers II - Introdução
Ruby para testers II - IntroduçãoRuby para testers II - Introdução
Ruby para testers II - Introdução
 
Qualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnitQualidade no desenvolvimento de software com PHPUnit
Qualidade no desenvolvimento de software com PHPUnit
 
Jdbc e hibernate
Jdbc e hibernateJdbc e hibernate
Jdbc e hibernate
 
Teste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta JabutiTeste Estrutural usando a ferramenta Jabuti
Teste Estrutural usando a ferramenta Jabuti
 

Viewers also liked

Template method pattern example
Template method pattern exampleTemplate method pattern example
Template method pattern example
Guo Albert
 

Viewers also liked (12)

Template pattern
Template patternTemplate pattern
Template pattern
 
Chapter8
Chapter8Chapter8
Chapter8
 
Template pattern
Template patternTemplate pattern
Template pattern
 
Scrum
ScrumScrum
Scrum
 
Minicurso Aplicando Scrum em projetos de software (2010)
Minicurso Aplicando Scrum em projetos de software (2010)Minicurso Aplicando Scrum em projetos de software (2010)
Minicurso Aplicando Scrum em projetos de software (2010)
 
The benefits of erp products
The benefits of erp productsThe benefits of erp products
The benefits of erp products
 
Similar Characteristics of Internal Software Quality Attributes for Object-Or...
Similar Characteristics of Internal Software Quality Attributes for Object-Or...Similar Characteristics of Internal Software Quality Attributes for Object-Or...
Similar Characteristics of Internal Software Quality Attributes for Object-Or...
 
Template Method Pattern
Template Method PatternTemplate Method Pattern
Template Method Pattern
 
Template method pattern example
Template method pattern exampleTemplate method pattern example
Template method pattern example
 
Scrum solo
Scrum soloScrum solo
Scrum solo
 
Como Preparar Artefatos para um Projeto em Scrum (Exemplo prático para Projec...
Como Preparar Artefatos para um Projeto em Scrum (Exemplo prático para Projec...Como Preparar Artefatos para um Projeto em Scrum (Exemplo prático para Projec...
Como Preparar Artefatos para um Projeto em Scrum (Exemplo prático para Projec...
 
Kanban para Desenvolvimento de Software
Kanban para Desenvolvimento de SoftwareKanban para Desenvolvimento de Software
Kanban para Desenvolvimento de Software
 

Similar to Template method pattern

Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
Armando Daniel
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
Sérgio Souza Costa
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 

Similar to Template method pattern (20)

Groovy na plataforma Java
Groovy na plataforma JavaGroovy na plataforma Java
Groovy na plataforma Java
 
Curso de Groovy
Curso de GroovyCurso de Groovy
Curso de Groovy
 
Aula5
Aula5Aula5
Aula5
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01Java e orientação a objetos - aula 01
Java e orientação a objetos - aula 01
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
5. Atribuições especiais; Arrays; Tipos de ciclos; Classes-pacote – Fundament...
 
A linguagem java
A linguagem javaA linguagem java
A linguagem java
 
Java7
Java7Java7
Java7
 
Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++Paradigma orientado a objetos - Caso de Estudo C++
Paradigma orientado a objetos - Caso de Estudo C++
 
Linguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação JavaLinguagem Java- Iniciação à programação Java
Linguagem Java- Iniciação à programação Java
 
Programação Defensiva
Programação DefensivaProgramação Defensiva
Programação Defensiva
 
Programando em Go
Programando em GoProgramando em Go
Programando em Go
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Java script
Java scriptJava script
Java script
 

Template method pattern

  • 2. OqueéoGroovy ● Groovy é uma linguagem de programação orientada a objetos desenvolvida para a plataforma Java como alternativa à linguagem de programação Java. Groovy possui características de Python, Ruby e Smalltalk. ● Groovy utiliza uma sintaxe similar à de Java, é compilada dinamicamente para bytecode Java, e integra-se transparentemente com outros códigos e bibliotecas Java.
  • 3. Características Groovy possui algumas características não presentes no Java padrão: ● Tipagem estática e tipagem dinâmica ● Sintaxe nativa para listas, arrays associativos, vetores, e expressões regulares ● Clausuras (Clojures) ● Sobrecarga de operadores
  • 4. templatemethodpattern “O Template Method define os passos de um algoritmo e permite que a implementação de um ou mais desses passos seja fornecida por subclasses.” Eric Freeman & Elisabeth Freeman - Use a Cabeça! Padrões de Projeto - 2nd ed.- p. 213
  • 6. Exemplo abstract class Accumulator { protected initial abstract doAccumulate(total, v) def accumulate(values) { def total = initial values.each { v -> total = doAccumulate(total, v) } total } } class Sum extends Accumulator { def Sum() { initial = 0 } def doAccumulate(total, v) { total + v } } class Product extends Accumulator { def Product() { initial = 1 } def doAccumulate(total, v) { total * v } } println new Sum().accumulate([1,2,3,4]) println new Product().accumulate([1,2,3,4]) http://groovy-lang.org/design-patterns.html#_template_method_pattern
  • 7. Simplificando Você pode ter o resultado similar injetando um método usando Closures. Closure addAll = { total, item -> total += item } def accumulated = [1, 2, 3, 4].inject(0, addAll) println accumulated // => 10 Closure multAll = { total, item -> total *= item } accumulated = [1, 2, 3, 4].inject(1, multAll) println accumulated // => 24 Usando closures desta forma parece mais com o padrão de Strategy, mas se percebermos que o método de injeção built-in é a parte genérica do algoritmo para o nosso método de modelo, em seguida, os Closures tornam as peças personalizadas do padrão Template Method. http://groovy-lang.org/design-patterns.html#_template_method_pattern
  • 8. Umareferênciarápida Imagem retirada de http://python.pro.br/wiki/index.php?title=Design_patterns
  • 9. Obrigado! Mais sobre a linguagem em: http://www.groovy-lang.org/