SlideShare uma empresa Scribd logo
1 de 53
Programação Assíncrona com

State Machines
O Que é
Finite State Machine?
• Uma técnica de programação.
• Um Finite State Machine é uma
  abstração de algo que tem um número
  finito de estados e regras pelas
  quais você pode ir de um estado para
  outro.
• Um “estado” é como
  um status, uma
  condição ou situação.
• Uma “regra” é forma
  como determinamos
  que você pode trocar de
  um estado para outro.
Porque usar
Finite State Machine?
• Programação front-end para web tem um
  grau de complexidade a mais:
• Programação front-end para web tem um
  grau de complexidade a mais:




                   g ram ação
               Pro
                A ssínc rona
• State é mais do que um dos Design
  Patterns nesse cenário
• State é mais do que um dos Design
  Patterns nesse cenário
• Conceito ortogonal e complementar ao
  OOP.
Troy Gardner
Mais um motivo:
Mais um motivo:
• Na verdade, provavelmente você já usou!
Mais um motivo:
• Na verdade, provavelmente você já usou!
• Todas as vezes que seu código tem um
  número limitado de possíveis estados
  ("finite state") e alterna de estado quando
  algum input/evento acontece ("machine"),
  você escreveu um Finite State Machine!
Onde, quando e como usar
  Finite State Machines?
• Pra quem nunca ouviu falar, é
  difícil pensar em situações onde
  você utilizaria um FSM, mas
  após começar a usar você
  percebe como State Machine é
  conceito bastante simples e
  como facilita imensamente a
  criação de aplicações
  sofisticadas.
“...One of the most fascinating things about FSMs is that
the very same design techniques can be used for designing
   Visual Basic programs, logic circuits or firmware for a
  microcontroller. Many computers and microprocessor
             chips have, at their hearts, a FSM.”



                                          David Gibson
                                          SPLat Controls Pty Ltd.
String Matching
String Matching



Workflow de navegação
String Matching

                 AI (Games e simulações)

Workflow de navegação
String Matching

                 AI (Games e simulações)

Workflow de navegação

      Classes e objetos que tenham estados
Exemplo: Player de Vídeo (sem FSM)
Exemplo: Player de Vídeo (sem FSM)
      •   Quando o buffer estiver completo:

          •   Toque

          •   Exiba o botão de pause

      •   Quando clicar no botão “play”:

          •   Se estava pausado:

              •   Toque do mesmo ponto em diante

          •   Se não:

              •   Toque desde o início

      •   Etc...
Agora eu ví vantagem!
Agora eu ví vantagem!


    • Separa a lógica da sua aplicação
      do tratamento de eventos:
Agora eu ví vantagem!


    • Separa a lógica da sua aplicação
      do tratamento de eventos:
       • Crie os estados e coloque a
          lógica neles
Agora eu ví vantagem!


    • Separa a lógica da sua aplicação
      do tratamento de eventos:
       • Crie os estados e coloque a
          lógica neles
       • Os eventos apenas trocam os
          estados
Estados
Estados
• Um dos aspectos mais
  importantes ao criar um FSM é
  definir os estados.
Estados
• Um dos aspectos mais
  importantes ao criar um FSM é
  definir os estados.
• Defina tantos estados quanto
  forem necessários para cobrir
  todas as possibilidades.
• Além de definir os possíveis estados, é
  importante definir o estado inicial.
• Além de definir os possíveis estados, é
  importante definir o estado inicial.
• Estados tem regras definidas para transições -
  quais estados são acessíveis por quais outros
  estados?
• Estados tem regras definidas para transições -
  quais estados são acessíveis por quais outros
  estados?
Usando FSM no seu
     projeto
• AS3 Finite State Machine
  (http://github.com/cassiozen/AS3-State-Machine)

• Cogs
  (http://code.google.com/p/troyworks)

• Flash State Engine
  (http://code.google.com/p/flash-state-engine)
DIY
(Do it yourself)
AS3 State Machine
 (http://github.com/cassiozen/AS3-State-Machine)
AS3 State Machine
       (http://github.com/cassiozen/AS3-State-Machine)




• State Engine Hierárquico
AS3 State Machine
       (http://github.com/cassiozen/AS3-State-Machine)




• State Engine Hierárquico
• Setup rápido
AS3 State Machine
       (http://github.com/cassiozen/AS3-State-Machine)




• State Engine Hierárquico
• Setup rápido
• Flexível

Mais conteúdo relacionado

Destaque

Kinetic energy recovery system
Kinetic energy recovery system Kinetic energy recovery system
Kinetic energy recovery system Amar Nath
 
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...Sai Natkar
 
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finl
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finlINDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finl
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finlanil badiger
 
Kinetic energy recovery system ppt
Kinetic energy recovery system pptKinetic energy recovery system ppt
Kinetic energy recovery system pptgautam khillare
 
Cloud robotics
Cloud roboticsCloud robotics
Cloud roboticsIIT Bombay
 
Snake presentation_ppt
Snake presentation_pptSnake presentation_ppt
Snake presentation_pptIIT Bombay
 
Machine vision systems ppt
Machine vision systems pptMachine vision systems ppt
Machine vision systems pptAkash Maurya
 
Kaizen Philosophy
Kaizen PhilosophyKaizen Philosophy
Kaizen Philosophypratik207
 
15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about Cars15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about CarsEason Chan
 
3 D Printing / Additive Manufacturing
3 D Printing / Additive Manufacturing3 D Printing / Additive Manufacturing
3 D Printing / Additive ManufacturingRishabh Sardana
 
CNC Machines
CNC MachinesCNC Machines
CNC Machinespratik207
 

Destaque (18)

Antimatter ppt
Antimatter pptAntimatter ppt
Antimatter ppt
 
Snake Robot
Snake RobotSnake Robot
Snake Robot
 
Plastics injection molding
Plastics injection moldingPlastics injection molding
Plastics injection molding
 
Additive manufacturing
Additive manufacturingAdditive manufacturing
Additive manufacturing
 
Kinetic energy recovery system
Kinetic energy recovery system Kinetic energy recovery system
Kinetic energy recovery system
 
Cloud computing slids
Cloud computing slidsCloud computing slids
Cloud computing slids
 
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...
Cloud Robotics: It’s time to offload their brain on Cloud, for better Robotic...
 
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finl
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finlINDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finl
INDUSTRIAL APPLICATION OF MACHINE VISION ppt mrng finl
 
Kinetic energy recovery system ppt
Kinetic energy recovery system pptKinetic energy recovery system ppt
Kinetic energy recovery system ppt
 
Cloud robotics
Cloud roboticsCloud robotics
Cloud robotics
 
Snake presentation_ppt
Snake presentation_pptSnake presentation_ppt
Snake presentation_ppt
 
Machine vision systems ppt
Machine vision systems pptMachine vision systems ppt
Machine vision systems ppt
 
Kaizen Philosophy
Kaizen PhilosophyKaizen Philosophy
Kaizen Philosophy
 
15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about Cars15 Common Myths you were taught to believe about Cars
15 Common Myths you were taught to believe about Cars
 
additive manufacturing
additive manufacturingadditive manufacturing
additive manufacturing
 
3 D Printing / Additive Manufacturing
3 D Printing / Additive Manufacturing3 D Printing / Additive Manufacturing
3 D Printing / Additive Manufacturing
 
Types of dies
Types of diesTypes of dies
Types of dies
 
CNC Machines
CNC MachinesCNC Machines
CNC Machines
 

Semelhante a AS3 Finite State Machines

DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...Gleicon Moraes
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo RealLeandro Silva
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSprofjotamarcosduarte
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Leandro Silva
 
Lógica de Programação - Fluxograma
Lógica de Programação - FluxogramaLógica de Programação - Fluxograma
Lógica de Programação - FluxogramaWesley R. Bezerra
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Nelson Glauber Leal
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Navegacao de Robótica Autônoma em Ambientes Dinâmicos
Navegacao de Robótica Autônoma em Ambientes DinâmicosNavegacao de Robótica Autônoma em Ambientes Dinâmicos
Navegacao de Robótica Autônoma em Ambientes DinâmicosLCoN Mackenzie
 
(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programaçãoCarlos Santos
 
Aplicações de Alto Desempenho com JHipster Full Stack
Aplicações de Alto Desempenho com JHipster Full StackAplicações de Alto Desempenho com JHipster Full Stack
Aplicações de Alto Desempenho com JHipster Full StackJoão Gabriel Lima
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...tdc-globalcode
 
Introdução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptIntrodução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptBrennoPimenta
 
Introdução à Educação Digital
Introdução à Educação DigitalIntrodução à Educação Digital
Introdução à Educação DigitalRafael Delmonego
 
Analise de Projeto de Sistemas EEEP.pptx
Analise de Projeto de Sistemas EEEP.pptxAnalise de Projeto de Sistemas EEEP.pptx
Analise de Projeto de Sistemas EEEP.pptxALLYSONALVESCARVALHO
 

Semelhante a AS3 Finite State Machines (20)

DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...DNAD 2015  - Como a arquitetura emergente de sua aplicação pode jogar contra ...
DNAD 2015 - Como a arquitetura emergente de sua aplicação pode jogar contra ...
 
Sistemas para o Mundo Real
Sistemas para o Mundo RealSistemas para o Mundo Real
Sistemas para o Mundo Real
 
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOSAULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
AULA 06 - REVISÃO DE CONCEITOS INICIAIS DE ALGORITMOS
 
Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012Sistemas para o Mundo Real - TDC 2012
Sistemas para o Mundo Real - TDC 2012
 
Lógica de Programação - Fluxograma
Lógica de Programação - FluxogramaLógica de Programação - Fluxograma
Lógica de Programação - Fluxograma
 
Jboss Night
Jboss NightJboss Night
Jboss Night
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023
 
Filtro de SPAM
Filtro de SPAMFiltro de SPAM
Filtro de SPAM
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Navegacao de Robótica Autônoma em Ambientes Dinâmicos
Navegacao de Robótica Autônoma em Ambientes DinâmicosNavegacao de Robótica Autônoma em Ambientes Dinâmicos
Navegacao de Robótica Autônoma em Ambientes Dinâmicos
 
(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação(A02) LabMM3 - Introdução à programação
(A02) LabMM3 - Introdução à programação
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Aplicações de Alto Desempenho com JHipster Full Stack
Aplicações de Alto Desempenho com JHipster Full StackAplicações de Alto Desempenho com JHipster Full Stack
Aplicações de Alto Desempenho com JHipster Full Stack
 
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
TDC2017 | São Paulo - Trilha Containers How we figured out we had a SRE team ...
 
Introdução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.pptIntrodução a Lógica e Conceitos de Programação.ppt
Introdução a Lógica e Conceitos de Programação.ppt
 
Introdução à Educação Digital
Introdução à Educação DigitalIntrodução à Educação Digital
Introdução à Educação Digital
 
Analise de Projeto de Sistemas EEEP.pptx
Analise de Projeto de Sistemas EEEP.pptxAnalise de Projeto de Sistemas EEEP.pptx
Analise de Projeto de Sistemas EEEP.pptx
 
Aula 02
Aula 02Aula 02
Aula 02
 
TechEd_OFC305
TechEd_OFC305TechEd_OFC305
TechEd_OFC305
 
Entity framework
Entity frameworkEntity framework
Entity framework
 

AS3 Finite State Machines

  • 2. O Que é Finite State Machine?
  • 3.
  • 4. • Uma técnica de programação.
  • 5.
  • 6. • Um Finite State Machine é uma abstração de algo que tem um número finito de estados e regras pelas quais você pode ir de um estado para outro.
  • 7.
  • 8. • Um “estado” é como um status, uma condição ou situação.
  • 9.
  • 10. • Uma “regra” é forma como determinamos que você pode trocar de um estado para outro.
  • 11.
  • 13. • Programação front-end para web tem um grau de complexidade a mais:
  • 14. • Programação front-end para web tem um grau de complexidade a mais: g ram ação Pro A ssínc rona
  • 15.
  • 16. • State é mais do que um dos Design Patterns nesse cenário
  • 17. • State é mais do que um dos Design Patterns nesse cenário • Conceito ortogonal e complementar ao OOP.
  • 20. Mais um motivo: • Na verdade, provavelmente você já usou!
  • 21. Mais um motivo: • Na verdade, provavelmente você já usou! • Todas as vezes que seu código tem um número limitado de possíveis estados ("finite state") e alterna de estado quando algum input/evento acontece ("machine"), você escreveu um Finite State Machine!
  • 22. Onde, quando e como usar Finite State Machines?
  • 23.
  • 24. • Pra quem nunca ouviu falar, é difícil pensar em situações onde você utilizaria um FSM, mas após começar a usar você percebe como State Machine é conceito bastante simples e como facilita imensamente a criação de aplicações sofisticadas.
  • 25.
  • 26. “...One of the most fascinating things about FSMs is that the very same design techniques can be used for designing Visual Basic programs, logic circuits or firmware for a microcontroller. Many computers and microprocessor chips have, at their hearts, a FSM.” David Gibson SPLat Controls Pty Ltd.
  • 27.
  • 30. String Matching AI (Games e simulações) Workflow de navegação
  • 31. String Matching AI (Games e simulações) Workflow de navegação Classes e objetos que tenham estados
  • 32. Exemplo: Player de Vídeo (sem FSM)
  • 33. Exemplo: Player de Vídeo (sem FSM) • Quando o buffer estiver completo: • Toque • Exiba o botão de pause • Quando clicar no botão “play”: • Se estava pausado: • Toque do mesmo ponto em diante • Se não: • Toque desde o início • Etc...
  • 34. Agora eu ví vantagem!
  • 35. Agora eu ví vantagem! • Separa a lógica da sua aplicação do tratamento de eventos:
  • 36. Agora eu ví vantagem! • Separa a lógica da sua aplicação do tratamento de eventos: • Crie os estados e coloque a lógica neles
  • 37. Agora eu ví vantagem! • Separa a lógica da sua aplicação do tratamento de eventos: • Crie os estados e coloque a lógica neles • Os eventos apenas trocam os estados
  • 39. Estados • Um dos aspectos mais importantes ao criar um FSM é definir os estados.
  • 40. Estados • Um dos aspectos mais importantes ao criar um FSM é definir os estados. • Defina tantos estados quanto forem necessários para cobrir todas as possibilidades.
  • 41. • Além de definir os possíveis estados, é importante definir o estado inicial.
  • 42. • Além de definir os possíveis estados, é importante definir o estado inicial.
  • 43. • Estados tem regras definidas para transições - quais estados são acessíveis por quais outros estados?
  • 44. • Estados tem regras definidas para transições - quais estados são acessíveis por quais outros estados?
  • 45. Usando FSM no seu projeto
  • 46.
  • 47. • AS3 Finite State Machine (http://github.com/cassiozen/AS3-State-Machine) • Cogs (http://code.google.com/p/troyworks) • Flash State Engine (http://code.google.com/p/flash-state-engine)
  • 49.
  • 50. AS3 State Machine (http://github.com/cassiozen/AS3-State-Machine)
  • 51. AS3 State Machine (http://github.com/cassiozen/AS3-State-Machine) • State Engine Hierárquico
  • 52. AS3 State Machine (http://github.com/cassiozen/AS3-State-Machine) • State Engine Hierárquico • Setup rápido
  • 53. AS3 State Machine (http://github.com/cassiozen/AS3-State-Machine) • State Engine Hierárquico • Setup rápido • Flexível

Notas do Editor

  1. Uma técnica de programação. (Design Pattern)
  2. Você pode ter, digamos, dois estados: "estou em casa" e "estou no trabalho", e duas regras: "ir pra casa" e "ir pro trabalho" Em OOP, um objeto poderia ter diferentes estados, como por exemplo: "ativo" e "inativo", e regras como "ativar" e "desativar"
  3. Enquanto OOP se preocupa com os substantivos e verbos de uma aplicação, state machines lidam com o momento
  4. Enquanto OOP se preocupa com os substantivos e verbos de uma aplicação, state machines lidam com o momento
  5. Enquanto OOP se preocupa com os substantivos e verbos de uma aplicação, state machines lidam com o momento
  6. Enquanto OOP se preocupa com os substantivos e verbos de uma aplicação, state machines lidam com o momento
  7. Enquanto OOP se preocupa com os substantivos e verbos de uma aplicação, state machines lidam com o momento
  8. A razão pela qual vale a pena estudar mais sobre State Machines é que eles são úteis para resolver muitos problemas: String Matching, controle de Workflow, AI em games e simulações, etc.
  9. A razão pela qual vale a pena estudar mais sobre State Machines é que eles são úteis para resolver muitos problemas: String Matching, controle de Workflow, AI em games e simulações, etc.
  10. Boa parte do trabalho de se usar um State Machine está em identificar os estados com o nível de aprofundamento necessário no caso da sua aplicação. Defina os estados de modo a cobrir todas as possibilidades.
  11. Boa parte do trabalho de se usar um State Machine está em identificar os estados com o nível de aprofundamento necessário no caso da sua aplicação. Defina os estados de modo a cobrir todas as possibilidades.