Skip to content

Commit 48b3ec2

Browse files
committed
método modelo->método gabarito (template method)
1 parent 5567a99 commit 48b3ec2

File tree

2 files changed

+25
-24
lines changed

2 files changed

+25
-24
lines changed

online/cap10.adoc

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@
55

66
[quote, Ralph Johnson, co-autor do clássico "Padrões de Projetos"]
77
____
8-
Conformidade a padrões não é uma medida de virtude.footnote:[De um slide na
9-
palestra "Root Cause Analysis of Some Faults in Design Patterns," (_Análise das
10-
Causas Básicas de Alguns Defeitos em Padrões de Projetos_), apresentada por
8+
Conformidade a padrões não é medida de virtude.footnote:[De um slide na
9+
palestra _Root Cause Analysis of Some Faults in Design Patterns_ (Análise das
10+
Causas Básicas de Alguns Defeitos em Padrões de Projetos), apresentada por
1111
Ralph Johnson no IME/CCSL da Universidade de São Paulo, em 15 de novembro de
1212
2014.]
1313
____
1414

1515
Em((("functions, design patterns with first-class", "dynamic languages and")))
1616
engenharia de software, um
1717
https://fpy.li/5z[_padrão de projeto_] é uma receita genérica para solucionar
18-
um problema de design frequente.
18+
um problema de design comum.
1919
Não é preciso conhecer padrões de projeto para acompanhar esse
2020
capítulo, vou explicar os padrões usados nos exemplos.
2121

@@ -24,19 +24,19 @@ _Padrões de Projetos: Soluções Reutilizáveis de Software Orientados a Objeto
2424
(Addison-Wesley), de Erich Gamma, Richard Helm, Ralph Johnson e John
2525
Vlissides—também conhecidos como _the Gang of Four_ (A Gangue dos Quatro) ou pela
2626
sigla _GoF_. O
27-
livro é um catálogo de 23 padrões, cada um deles composto por arranjos de
28-
classes e exemplificados com código em {cpp}, mas assumidos como úteis
27+
livro é um catálogo de 23 padrões, aprensentados como arranjos de
28+
classes e exemplificados com código em {cpp}, mas considerados úteis
2929
também em outras linguagens orientadas a objetos.
3030

3131
Apesar dos padrões de projeto serem independentes da linguagem, isso não
3232
significa que todo padrão se aplica a todas as linguagens. Por exemplo, o
33-
<<ch_generators>> vai mostrar que não faz sentido emular a receita do padrão
34-
https://fpy.li/10-2[Iterator (_Iterador_)] (EN) no Python, pois esse padrão está
33+
<<ch_generators>> vai mostrar que não faz sentido implementr a receita do padrão
34+
https://fpy.li/10-2[Iterador (_Iterator_)] em Python, pois esse padrão está
3535
embutido na linguagem e pronto para ser usado, na forma de geradores—que não
3636
precisam de classes para funcionar, e exigem menos código que a receita
37-
clássica.
37+
do livro clássico.
3838

39-
Os autores de _Padrões de Projetos_ reconhecem, na introdução, que a linguagem
39+
Na introdução da obra, os autores reconhecem que a linguagem
4040
usada na implementação determina quais padrões são relevantes:
4141

4242
[quote]
@@ -53,15 +53,15 @@ Visitante.footnote:[_Visitor_, Citado da página 4 da edição em inglês de
5353
_Padrões de Projeto_.]
5454
____
5555

56-
Em sua apresentação de 1996, https://fpy.li/norvigdp["Design Patterns in Dynamic
57-
Languages" (_Padrões de Projetos em Linguagens Dinâmicas_)] (EN), Peter Norvig
58-
afirma que 16 dos 23 padrões no _Padrões de Projeto_ original se tornam
59-
"invisíveis ou mais simples" em uma linguagem dinâmica (slide 9). Ele está
60-
falando das linguagens Lisp e Dylan, mas muitos dos recursos dinâmicos
61-
relevantes também estão presentes no Python. Em especial, no contexto de
62-
linguagens com funções de primeira classe, Norvig sugere repensar os padrões
63-
clássicos conhecidos como Estratégia (_Strategy_), Comando (_Command_), Método
64-
Template (_Template Method_) e Visitante (_Visitor_).
56+
Em sua apresentação de 1996, https://fpy.li/norvigdp[_Design Patterns in Dynamic
57+
Languages_] (Padrões de Projetos em Linguagens Dinâmicas), Peter Norvig
58+
afirma que 16 dos 23 padrões do livro original se tornam
59+
"invisíveis ou mais simples" em uma linguagem dinâmica (slide 9). Ele se
60+
refere às linguagens Lisp e Dylan, mas vários recursos dinâmicos citados
61+
também existem em Python. Em especial, em uma linguagem que oferece
62+
funções de primeira classe, Norvig sugere repensar os padrões
63+
clássicos conhecidos como _Strategy_ (Estratégia), _Command_ (Comando),
64+
_Template Method_ (Método Gabarito) e _Visitor_ (Visitante).
6565

6666
O objetivo desse capítulo é mostrar como—em alguns casos—as funções podem
6767
realizar o mesmo trabalho das classes, com um código mais legível e mais

online/cap23.adoc

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -265,14 +265,15 @@ Isso leva a uma refatoração, resultando em `Validated`, uma classe abstrata qu
265265

266266
Vamos então reescrever `Quantity` e implementar `NonBlank`, herdando de `Validated` e programando apenas os métodos `validate`.
267267

268-
A relação entre `Validated`, `Quantity` e `NonBlank` é uma aplicação do _método modelo_ ("template method"), como descrito no clássico _Design Patterns_:
268+
A relação entre `Validated`, `Quantity` e `NonBlank` é uma aplicação do padrão _Template Method_ (Método Gabarito),
269+
como descrito no clássico _Design Patterns_:
269270

270271
[quote]
271272
____
272-
Um método modelo define um algoritimo em termos de operações abstratas que subclasses sobrescrevem para fornecer o comportamento concreto.footnote:[Gamma et al., _Design Patterns: Elements of Reusable Object-Oriented Software_, p. 326. (_Padrões de Projetos: Soluções Reutilizáveis de Software Orientados a Objetos_)]
273+
O Método Gabarito define um algoritimo em termos de operações abstratas que subclasses sobrescrevem para fornecer o comportamento concreto.footnote:[Gamma et al., _Design Patterns: Elements of Reusable Object-Oriented Software_, p. 326. (_Padrões de Projetos: Soluções Reutilizáveis de Software Orientados a Objetos_)]
273274
____
274275

275-
No <<model_v5_abc>>, `+Validated.__set__+` é um método modelo e `self.validate` é a operação abstrata.
276+
No <<model_v5_abc>>, `+Validated.__set__+` é um método gabarito e `self.validate` é a operação abstrata.
276277

277278
[[model_v5_abc]]
278279
.model_v5.py: the `Validated` ABC
@@ -284,7 +285,7 @@ include::../code/23-descriptor/bulkfood/model_v5.py[tags=MODEL_V5_VALIDATED_ABC]
284285
====
285286
<1> `+__set__+` delega a validação para o método `validate`...
286287
<2> ...e então usa o `value` devolvido para atualizar o valor armazenado.
287-
<3> `validate` é um método abstrato; este é o método modelo.
288+
<3> `validate` é um método abstrato; este é o método gabarito.
288289

289290
Alex Martelli prefere chamar este padrão de projeto _Auto-Delegação_ ("_Self-Delegation_"),
290291
e concordo que é um nome mais descritivo: a primeira linha de `+__set__+` auto-delega para
@@ -300,7 +301,7 @@ As subclasses concretas de `Validated` neste exemplo são `Quantity` e `NonBlank
300301
include::../code/23-descriptor/bulkfood/model_v5.py[tags=MODEL_V5_VALIDATED_SUB]
301302
----
302303
====
303-
<1> Implementação do método modelo exigida pelo método abstrado `Validated.validate`.
304+
<1> Implementação do método gabarito exigida pelo método abstrado `Validated.validate`.
304305
<2> Se não sobrar nada após a remoção os espaços em branco antes e depois do valor, este é rejeitado.
305306
<3> Exigir que os métodos `validate` concretos devolvam o valor validado dá a eles a oportunidade de limpar, converter ou normalizar os dados recebidos. Neste caso, `value` é devolvido sem espaços iniciais ou finais.
306307

0 commit comments

Comments
 (0)