Mudanças entre as edições de "Design patterns em linguagens dinâmicas"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
m
 
(72 revisões intermediárias por 18 usuários não estão sendo mostradas)
Linha 1: Linha 1:
  +
[[Arquivo:Turing_Clube_20130417_201558.jpg|thumb|right|600px|2º encontro do ciclo "Design Patterns em linguagens dinâmicas", edição 2013]]
  +
 
== Proposta ==
 
== Proposta ==
   
Grupo de estudos e discussão '''presencial''' no Garoa Hacker Clube para rever padrões de projeto e sua aplicabilidade e variações em linguagens dinâmicas (Python, Ruby, JavaScript etc.).
+
Grupo de estudos e discussão '''presencial''' no Garoa Hacker Clube para rever padrões de projeto e sua aplicabilidade e variações em linguagens dinâmicas (Python, Ruby, JavaScript etc.).
  +
  +
Na edição '''2014''' o foco é na linguagem '''Python'''.
  +
  +
'''Atenção: não é preciso se inscrever! Esta atividade é aberta e gratuita. Basta aparecer!'''
   
 
== Contexto ==
 
== Contexto ==
Linha 30: Linha 36:
 
** um dos 7 restantes, que não aparecem nesta lista porque devem ser aplicáveis também em linguagens dinâmicas na forma descrita no livro ''Design Patterns''.
 
** um dos 7 restantes, que não aparecem nesta lista porque devem ser aplicáveis também em linguagens dinâmicas na forma descrita no livro ''Design Patterns''.
 
* Apresentar código exemplo nas linguagens dinâmicas de preferência dos participantes
 
* Apresentar código exemplo nas linguagens dinâmicas de preferência dos participantes
  +
  +
=== Pares de padrões relacionados ===
  +
  +
* Memento e Visitor
  +
* Proxy e Decorator
  +
* Prototype, Singleton e Borg
   
 
== Cronograma ==
 
== Cronograma ==
   
  +
=== Edição 2014 ===
Reuniões em 2 quartas-feiras por mês (a cada 2 ou 3 semanas)
 
  +
  +
Reuniões em 2 quartas-feiras por mês (normalmente a cada 2 semanas), começando sempre às '''19:30'''.
   
 
Datas:
 
Datas:
   
* 3/04
+
* 12/mar
  +
* 26/mar *pausa*: Seven Masters
* 17/04
 
  +
* 9/abr *pausa*: palestra [[Voltando a gostar de GUIs com Go e QML]] com Gustavo Niemeyer
* 8/05
 
  +
* 16/abr: Strategy, Multiton(*) ([http://pt.slideshare.net/djsbellini/20140416-garoa-hc-strategy slides] e [https://github.com/danilobellini/design_patterns código])
* 22/05
 
  +
* 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes)
* 5/06
 
  +
* 19/mai: Builder (apresentado por Leonardo Leite ([https://github.com/leonardofl/design_patterns/blob/master/builder/invoker.py apresentação]))
* 19/06
 
  +
* 9/jun: Interpreter (apresentado por Guto Maia)
  +
* 23/jun: State (apresentado por Luciano Ramalho)
  +
  +
(*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons".
  +
  +
=== Edição 2013 ===
  +
  +
Datas:
  +
  +
* 3/abr - Iterator e Generator, GRASP, exemplo de Template Method
  +
* 17/abr - Memento e Visitor
  +
* 8/mai - Composite e Flyweight
  +
* 22/mai - Strategy, State e Chain of Responsability. Motivação: Remover uma grande sequência de IFs
  +
* 5/jun - Abstract Factory, Observer, Singleton e Borg*
  +
* 19/jun
  +
  +
(*) Borg não é um dos 23 patterns do GoF, mas é um substituto interessante do Singleton em Python
  +
  +
== Padrões ==
  +
  +
[[Arquivo:Core-patterns.jpeg|400px|thumb|right|Ralph Johnson em seminário no CCSL-USP]]
  +
  +
{| border="1" class="wikitable"
  +
|+ Legenda
  +
|-
  +
! #
  +
| número do padrão no livro de ''Gamma et.al.''
  +
|-
  +
! type
  +
| família do padrão
  +
|-
  +
! C
  +
| ''Core pattern'' conforme Ralph Johnson (C=sublinhado na foto ao lado)
  +
|-
  +
! name
  +
| nome do padrão
  +
|-
  +
! V
  +
| visto nos encontros do Turing Clube em 2013
  +
|-
  +
! HF
  +
| analisado no livro ''Head First Design Patterns'' (+++: três análises)
  +
|-
  +
! R
  +
| número de citações como padrão relacionado (v. '''related patterns''')
  +
|-
  +
! PN
  +
| M=mencionado; A=analisado nos slides de Peter Norvig
  +
|-
  +
! feature
  +
| característica de linguagens dinâmicas que afeta este padrão
  +
|-
  +
! related patterns
  +
| padrões relacionados a este no livro de ''Gamma et.al.''
  +
|}
  +
  +
  +
  +
{| class="wikitable sortable"
  +
|-
  +
!# !!type !!C!!name!!V!!HF !!R!!PN!!feature!!class="unsortable"|related patterns
  +
|-
  +
| 1||Creational|| ||Abstract Factory||v||+ ||6||MA||First class types||Factory Method, Prototype, Singleton
  +
|-
  +
| 2||Creational|| ||Builder|||| ||1||MA||Multimethods||Abstract Factory, Composite
  +
|-
  +
| 3||Creational|| ||Factory Method||||+ ||3||M||First class types||Abstract Factory, Template Method, Prototypes
  +
|-
  +
| 4||Creational|| ||Prototype|||| ||3||||||Abstract Factory, Composite, Decorator
  +
|-
  +
| 5||Creational|| ||Singleton||v||+ ||4||A||||Abstract Factory, Builder, Prototype
  +
|-
  +
| 6||Structural||C||Adapter||||+ ||3||||||Bridge, Decorator, Proxy
  +
|-
  +
| 7||Structural|| ||Bridge|||| ||1||||||Abstract Factory, Adapter
  +
|-
  +
| 8||Structural||c||Composite||v||+ ||9||||||Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
  +
|-
  +
| 9||Structural||c||Decorator||||+ ||4||||||Adapter, Composite, Strategy
  +
|-
  +
| 10||Structural||c||Façade||v||+ ||1||MA||Modules||Abstract Factory, Mediator, Singleton
  +
|-
  +
| 11||Structural|| ||Flyweight||v|| ||4||M||First class types||Composite, State, Strategy
  +
|-
  +
| 12||Structural||c||Proxy||||+++||1||M||First class types||Adapter, Decorator
  +
|-
  +
| 13||Behavioral|| ||Chain of Responsibility||v|| ||1||M||First class types||Composite
  +
|-
  +
| 14||Behavioral||c||Command||||+ ||1||M||First class functions||Composite, Memento, Prototype
  +
|-
  +
| 15||Behavioral|| ||Interpreter|||| ||1||MA||Macros||Composite, Flyweight, Iterator, Visitor
  +
|-
  +
| 16||Behavioral||C||Iterator||v||+ ||3||MA||Macros||Composite, Factory Method, Memento
  +
|-
  +
| 17||Behavioral||C||Mediator|||| ||2||MA||Method Combination||Facade, Observer
  +
|-
  +
| 18||Behavioral|| ||Memento||v|| ||2||||||Command, Iterator
  +
|-
  +
| 19||Behavioral||C||Observer||v||+ ||1||MA||Method Combination||Mediator, Singleton
  +
|-
  +
| 20||Behavioral||c||State||v||+ ||1||M||First class types||Flyweight, Singleton
  +
|-
  +
| 21||Behavioral||c||Strategy||v||+ ||3||MA||First class functions||Flyweight
  +
|-
  +
| 22||Behavioral||c||Template Method||v||+ ||1||M||First class functions||Factory Method, Strategy
  +
|-
  +
| 23||Behavioral|| ||Visitor||v|| ||2||M||First class functions||Composite, Interpreter
  +
|}
  +
  +
=== Grafo de relação entre padrões ===
  +
  +
[[Arquivo:RelacaoEntreDesignPatterns.png|thumb|center|left|900px]]
   
 
== Referências ==
 
== Referências ==
Linha 52: Linha 178:
 
* Sherman Alpert, Kyle Brown, Bobby Woolf: [http://www.amazon.com/Design-Patterns-Smalltalk-Companion/dp/0201184621 The Design Patterns Smalltalk Companion] (livro)
 
* Sherman Alpert, Kyle Brown, Bobby Woolf: [http://www.amazon.com/Design-Patterns-Smalltalk-Companion/dp/0201184621 The Design Patterns Smalltalk Companion] (livro)
 
* Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra [http://shop.oreilly.com/product/9780596007126.do Head First Design Patterns] (livro)
 
* Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra [http://shop.oreilly.com/product/9780596007126.do Head First Design Patterns] (livro)
  +
* WikiBook [http://en.wikibooks.org/wiki/Computer_Science_Design_Patterns Computer Science Design Patterns]
   
== Inscrições ==
+
== Participantes ==
  +
  +
=== Grupo de 2014 ===
  +
  +
* [[Usuário:LucianoRamalho|Luciano Ramalho]]
  +
* [[Usuário:danilobellini|Danilo Bellini]]
  +
* Kemel Zaidan
  +
* Raquel Lira
  +
* Wilson Freitas
  +
* Astrobaldo a.k.a. Diego
  +
* [[Usuário:hgfernan|Hilton Fernandes]]
   
  +
=== Grupo de 2013 ===
Para se inscrever, coloque seu nome aqui (é preciso criar uma conta no wiki para editar a página)
 
   
 
* [[Usuário:LucianoRamalho|Luciano Ramalho]]
 
* [[Usuário:LucianoRamalho|Luciano Ramalho]]
Linha 68: Linha 205:
 
* Vinicius Roque (vou com o m3bsd)
 
* Vinicius Roque (vou com o m3bsd)
 
* [[Usuário:rafael.novello|Rafael Novello]]
 
* [[Usuário:rafael.novello|Rafael Novello]]
  +
* [[Usuário:dstori|Daniel Stori]]
  +
* [[Usuário:fabiobatalha|Fabio Batalha]]
  +
* [[Usuário:atta.jamil|Jamil Atta]]
  +
* [[Usuário:tales|Tales Cione]]
  +
* [[Usuário:William_Espindola|William Espindola]]
  +
* [[Usuário:Claudiomarcos | Claudio Marcos ]]
  +
* [[Usuário:rmrosa | Rodrigo Rosa]]
  +
* [[Usuário:LeoRochael | Leonardo Rochael Almeida]]
  +
* [[Usuário:pirolla | pirolla]]
  +
* [[Usuário:lucasmagnum | Lucas Magnum]]
   
 
== Mais informações ==
 
== Mais informações ==
Linha 75: Linha 222:
   
 
[[Categoria:Turing Clube]]
 
[[Categoria:Turing Clube]]
[[Categoria:Eventos regulares]]
+
[[Categoria:Eventos]]
  +
[[Categoria:Python]]

Edição atual tal como às 18h37min de 15 de maio de 2020

2º encontro do ciclo "Design Patterns em linguagens dinâmicas", edição 2013

Proposta

Grupo de estudos e discussão presencial no Garoa Hacker Clube para rever padrões de projeto e sua aplicabilidade e variações em linguagens dinâmicas (Python, Ruby, JavaScript etc.).

Na edição 2014 o foco é na linguagem Python.

Atenção: não é preciso se inscrever! Esta atividade é aberta e gratuita. Basta aparecer!

Contexto

O livro Design Patterns de Gamma et. al., documenta 23 padrões de projeto. A maioria dos exemplos de código são em C++ e há alguns em Smalltalk.

Em 1996, Peter Norvig fez uma apresentação Design Patterns in Dynamic Languages

Nesta apresentação o slide 10 tem o seguinte conteúdo:

Design Patterns in Dylan or Lisp

16 of 23 patterns are either invisible or simpler, due to:

  • First-class types (6): Abstract-Factory, Flyweight, Factory-Method, State, Proxy, Chain-Of-Responsibility
  • First-class functions (4): Command, Strategy, Template-Method, Visitor
  • Macros (2): Interpreter, Iterator
  • Method Combination (2): Mediator, Observer
  • Multimethods (1): Builder
  • Modules (1): Facade

Proposta detalhada

Considerando que linguagens dinâmicas modernas como Python, Ruby e JavaScript emprestam várias das características dinâmicas de Lisp mencionadas por Norvig, a idéia é rever um subconjunto dos design patterns originais avaliando sua utilidade e alternativas de implementação em uma ou mais dessas linguagens.

  • Para cada encontro, escolher 2 padrões para estudo e discussão:
    • um dos 16 da lista do Norvig (acima)
    • um dos 7 restantes, que não aparecem nesta lista porque devem ser aplicáveis também em linguagens dinâmicas na forma descrita no livro Design Patterns.
  • Apresentar código exemplo nas linguagens dinâmicas de preferência dos participantes

Pares de padrões relacionados

  • Memento e Visitor
  • Proxy e Decorator
  • Prototype, Singleton e Borg

Cronograma

Edição 2014

Reuniões em 2 quartas-feiras por mês (normalmente a cada 2 semanas), começando sempre às 19:30.

Datas:

  • 12/mar
  • 26/mar *pausa*: Seven Masters
  • 9/abr *pausa*: palestra Voltando a gostar de GUIs com Go e QML com Gustavo Niemeyer
  • 16/abr: Strategy, Multiton(*) (slides e código)
  • 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes)
  • 19/mai: Builder (apresentado por Leonardo Leite (apresentação))
  • 9/jun: Interpreter (apresentado por Guto Maia)
  • 23/jun: State (apresentado por Luciano Ramalho)

(*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons".

Edição 2013

Datas:

  • 3/abr - Iterator e Generator, GRASP, exemplo de Template Method
  • 17/abr - Memento e Visitor
  • 8/mai - Composite e Flyweight
  • 22/mai - Strategy, State e Chain of Responsability. Motivação: Remover uma grande sequência de IFs
  • 5/jun - Abstract Factory, Observer, Singleton e Borg*
  • 19/jun

(*) Borg não é um dos 23 patterns do GoF, mas é um substituto interessante do Singleton em Python

Padrões

Ralph Johnson em seminário no CCSL-USP
Legenda
# número do padrão no livro de Gamma et.al.
type família do padrão
C Core pattern conforme Ralph Johnson (C=sublinhado na foto ao lado)
name nome do padrão
V visto nos encontros do Turing Clube em 2013
HF analisado no livro Head First Design Patterns (+++: três análises)
R número de citações como padrão relacionado (v. related patterns)
PN M=mencionado; A=analisado nos slides de Peter Norvig
feature característica de linguagens dinâmicas que afeta este padrão
related patterns padrões relacionados a este no livro de Gamma et.al.


# type C name V HF R PN feature related patterns
1 Creational Abstract Factory v + 6 MA First class types Factory Method, Prototype, Singleton
2 Creational Builder 1 MA Multimethods Abstract Factory, Composite
3 Creational Factory Method + 3 M First class types Abstract Factory, Template Method, Prototypes
4 Creational Prototype 3 Abstract Factory, Composite, Decorator
5 Creational Singleton v + 4 A Abstract Factory, Builder, Prototype
6 Structural C Adapter + 3 Bridge, Decorator, Proxy
7 Structural Bridge 1 Abstract Factory, Adapter
8 Structural c Composite v + 9 Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
9 Structural c Decorator + 4 Adapter, Composite, Strategy
10 Structural c Façade v + 1 MA Modules Abstract Factory, Mediator, Singleton
11 Structural Flyweight v 4 M First class types Composite, State, Strategy
12 Structural c Proxy +++ 1 M First class types Adapter, Decorator
13 Behavioral Chain of Responsibility v 1 M First class types Composite
14 Behavioral c Command + 1 M First class functions Composite, Memento, Prototype
15 Behavioral Interpreter 1 MA Macros Composite, Flyweight, Iterator, Visitor
16 Behavioral C Iterator v + 3 MA Macros Composite, Factory Method, Memento
17 Behavioral C Mediator 2 MA Method Combination Facade, Observer
18 Behavioral Memento v 2 Command, Iterator
19 Behavioral C Observer v + 1 MA Method Combination Mediator, Singleton
20 Behavioral c State v + 1 M First class types Flyweight, Singleton
21 Behavioral c Strategy v + 3 MA First class functions Flyweight
22 Behavioral c Template Method v + 1 M First class functions Factory Method, Strategy
23 Behavioral Visitor v 2 M First class functions Composite, Interpreter

Grafo de relação entre padrões

RelacaoEntreDesignPatterns.png

Referências

Participantes

Grupo de 2014

Grupo de 2013

Mais informações

Dúvidas, comentários e sugestões: inscreva-se e mande sua mensagem para o grupo de discussão do Garoa Hacker Clube em https://groups.google.com/group/hackerspacesp . Coloque Design Patterns no assunto.