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

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
Linha 56: Linha 56:
 
* 16/abr: Strategy, Multiton(*) ([http://pt.slideshare.net/djsbellini/20140416-garoa-hc-strategy slides] e [https://github.com/danilobellini/design_patterns código])
 
* 16/abr: Strategy, Multiton(*) ([http://pt.slideshare.net/djsbellini/20140416-garoa-hc-strategy slides] e [https://github.com/danilobellini/design_patterns código])
 
* 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes)
 
* 5/mai: Abstract Factory, Factory Method (apresentado por Hilton Fernandes)
  +
* 19/mai: Builder (apresentado por Leonardo Leite)
* 19/mai: ???
 
  +
* 9/jun: Interpreter (apresentado por Guto Maia)
   
 
(*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons".
 
(*) Multiton não é um dos patterns citados no GoF, exceto como "registry of singletons".

Edição das 21h59min de 19 de maio de 2014

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)
  • 9/jun: Interpreter (apresentado por Guto Maia)

(*) 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

Legenda
# número do padrão no livro de Gamma et.al.
type família do padrão
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 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 Adapter + 3 Bridge, Decorator, Proxy
7 Structural Bridge 1 Abstract Factory, Adapter
8 Structural Composite v + 9 Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
9 Structural Decorator + 4 Adapter, Composite, Strategy
10 Structural Facade v + 1 MA Modules Abstract Factory, Mediator, Singleton
11 Structural Flyweight v 4 M First class types Composite, State, Strategy
12 Structural Proxy +++ 1 M First class types Adapter, Decorator
13 Behavioral Chain of Responsibility v 1 M First class types Composite
14 Behavioral Command + 1 M First class functions Composite, Memento, Prototype
15 Behavioral Interpreter 1 MA Macros Composite, Flyweight, Iterator, Visitor
16 Behavioral Iterator v + 3 MA Macros Composite, Factory Method, Memento
17 Behavioral Mediator 2 MA Method Combination Facade, Observer
18 Behavioral Memento v 2 Command, Iterator
19 Behavioral Observer v + 1 MA Method Combination Mediator, Singleton
20 Behavioral State v + 1 M First class types Flyweight, Singleton
21 Behavioral Strategy v + 3 MA First class functions Flyweight
22 Behavioral 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.