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

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
 
(84 revisões intermediárias por 27 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]]
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.).
 
  +
  +
== 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 ==
 
== Contexto ==
Linha 20: Linha 28:
 
* Modules (1): Facade
 
* Modules (1): Facade
   
== Proposta ==
+
== 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.
 
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.
Linha 28: 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 50: 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]]
  +
* [[Usuário:Aylons|Aylons Hazzud]]
  +
* [[Usuário:lavh|Luiz Hespanha]]
  +
* [[Usuário:Erickmlr|Erick Müller]]
  +
* [[Usuário:Francisco|Francisco]]
  +
* [[Usuário:Lucascfk|Lucas Emanoel]]
  +
* [[Usuário:gustavo.fonseca|Gustavo Fonseca]]
  +
* [[Usuário:chambs|Willian Carvalho]]
  +
* [[Usuário:m3bsd|Mario Augusto Mania]]
  +
* Vinicius Roque (vou com o m3bsd)
  +
* [[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 63: 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.