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

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
 
(7 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
[[Arquivo:Turing_Clube_20130417_201558.jpg|thumb|center|800px|2º encontro do ciclo "Design Patterns em linguagens dinâmicas", edição 2013]]
+
[[Arquivo:Turing_Clube_20130417_201558.jpg|thumb|right|600px|2º encontro do ciclo "Design Patterns em linguagens dinâmicas", edição 2013]]
   
 
== Proposta ==
 
== Proposta ==
Linha 76: Linha 76:
   
 
== Padrões ==
 
== Padrões ==
  +
  +
[[Arquivo:Core-patterns.jpeg|400px|thumb|right|Ralph Johnson em seminário no CCSL-USP]]
   
 
{| border="1" class="wikitable"
 
{| border="1" class="wikitable"
Linha 85: Linha 87:
 
! type
 
! type
 
| família do padrão
 
| família do padrão
  +
|-
  +
! C
  +
| ''Core pattern'' conforme Ralph Johnson (C=sublinhado na foto ao lado)
 
|-
 
|-
 
! name
 
! name
Linha 112: Linha 117:
 
{| class="wikitable sortable"
 
{| class="wikitable sortable"
 
|-
 
|-
!# !!type !!name!!V!!HF !!R!!PN!!feature!!class="unsortable"|related patterns
+
!# !!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
+
| 1||Creational|| ||Abstract Factory||v||+ ||6||MA||First class types||Factory Method, Prototype, Singleton
 
|-
 
|-
| 2||Creational||Builder|||| ||1||MA||Multimethods||Abstract Factory, Composite
+
| 2||Creational|| ||Builder|||| ||1||MA||Multimethods||Abstract Factory, Composite
 
|-
 
|-
| 3||Creational||Factory Method||||+ ||3||M||First class types||Abstract Factory, Template Method, Prototypes
+
| 3||Creational|| ||Factory Method||||+ ||3||M||First class types||Abstract Factory, Template Method, Prototypes
 
|-
 
|-
| 4||Creational||Prototype|||| ||3||||||Abstract Factory, Composite, Decorator
+
| 4||Creational|| ||Prototype|||| ||3||||||Abstract Factory, Composite, Decorator
 
|-
 
|-
| 5||Creational||Singleton||v||+ ||4||A||||Abstract Factory, Builder, Prototype
+
| 5||Creational|| ||Singleton||v||+ ||4||A||||Abstract Factory, Builder, Prototype
 
|-
 
|-
| 6||Structural||Adapter||||+ ||3||||||Bridge, Decorator, Proxy
+
| 6||Structural||C||Adapter||||+ ||3||||||Bridge, Decorator, Proxy
 
|-
 
|-
| 7||Structural||Bridge|||| ||1||||||Abstract Factory, Adapter
+
| 7||Structural|| ||Bridge|||| ||1||||||Abstract Factory, Adapter
 
|-
 
|-
| 8||Structural||Composite||v||+ ||9||||||Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
+
| 8||Structural||c||Composite||v||+ ||9||||||Chain of Responsibility, Decorator, Flyweight, Iterator, Visitor
 
|-
 
|-
| 9||Structural||Decorator||||+ ||4||||||Adapter, Composite, Strategy
+
| 9||Structural||c||Decorator||||+ ||4||||||Adapter, Composite, Strategy
 
|-
 
|-
| 10||Structural||Facade||v||+ ||1||MA||Modules||Abstract Factory, Mediator, Singleton
+
| 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
+
| 11||Structural|| ||Flyweight||v|| ||4||M||First class types||Composite, State, Strategy
 
|-
 
|-
| 12||Structural||Proxy||||+++||1||M||First class types||Adapter, Decorator
+
| 12||Structural||c||Proxy||||+++||1||M||First class types||Adapter, Decorator
 
|-
 
|-
| 13||Behavioral||Chain of Responsibility||v|| ||1||M||First class types||Composite
+
| 13||Behavioral|| ||Chain of Responsibility||v|| ||1||M||First class types||Composite
 
|-
 
|-
| 14||Behavioral||Command||||+ ||1||M||First class functions||Composite, Memento, Prototype
+
| 14||Behavioral||c||Command||||+ ||1||M||First class functions||Composite, Memento, Prototype
 
|-
 
|-
| 15||Behavioral||Interpreter|||| ||1||MA||Macros||Composite, Flyweight, Iterator, Visitor
+
| 15||Behavioral|| ||Interpreter|||| ||1||MA||Macros||Composite, Flyweight, Iterator, Visitor
 
|-
 
|-
| 16||Behavioral||Iterator||v||+ ||3||MA||Macros||Composite, Factory Method, Memento
+
| 16||Behavioral||C||Iterator||v||+ ||3||MA||Macros||Composite, Factory Method, Memento
 
|-
 
|-
| 17||Behavioral||Mediator|||| ||2||MA||Method Combination||Facade, Observer
+
| 17||Behavioral||C||Mediator|||| ||2||MA||Method Combination||Facade, Observer
 
|-
 
|-
| 18||Behavioral||Memento||v|| ||2||||||Command, Iterator
+
| 18||Behavioral|| ||Memento||v|| ||2||||||Command, Iterator
 
|-
 
|-
| 19||Behavioral||Observer||v||+ ||1||MA||Method Combination||Mediator, Singleton
+
| 19||Behavioral||C||Observer||v||+ ||1||MA||Method Combination||Mediator, Singleton
 
|-
 
|-
| 20||Behavioral||State||v||+ ||1||M||First class types||Flyweight, Singleton
+
| 20||Behavioral||c||State||v||+ ||1||M||First class types||Flyweight, Singleton
 
|-
 
|-
| 21||Behavioral||Strategy||v||+ ||3||MA||First class functions||Flyweight
+
| 21||Behavioral||c||Strategy||v||+ ||3||MA||First class functions||Flyweight
 
|-
 
|-
| 22||Behavioral||Template Method||v||+ ||1||M||First class functions||Factory Method, Strategy
+
| 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
+
| 23||Behavioral|| ||Visitor||v|| ||2||M||First class functions||Composite, Interpreter
 
|}
 
|}
   

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.