Object
      Oriented

Javascript
     Emerson Macedo
         @emerleite
    http://nodecasts.org
   http://codificando.com
#whoami
#javascript
Todo programador que
   trabalha com web
deve aprender Javascript
Todo programador que
   trabalha com web
deve aprender Javascript

#corretamente
#caracteristicas
Javascript é
Orientado a Objetos
“Eu inventei o
termo Orientação
a Objetos e posso
 dizer que eu não
  tinha C++ em
      mente”
  Alan Kay
Definindo
Orientação a Objetos
Classe
 Herança
Sobrescrita
Sobrecarga
  public
protected
 private
Classe
 Herança
Sobrescrita
Sobrecarga
  public
protected
 private
Modelar o
mundo real
Modelar o
mundo real
Orientação a Objetos
serve para lidar com
   complexidade
#propriedades
#comofaz
Usando classes - Ex: Java
Usando classes - Ex: Java
Classe é uma
definição de estrutura
   com estado e
  comportamento
Javascript Functions

• São a principal abstração da linguagem
• Podem retornar ou não alguma coisa
• Javascript não tem classes
• JS é mais O.O do que muitos pensam
Javascript Functions - Sintaxe
Contruindo Objetos

• Podem ser construidos com new
• Podem ser construidos usando { }
• Podem ser construidos com funções
Contruindo Objetos - new
Contruindo Objetos - { }
Contruindo Objetos - funções
#prototype
Contruindo Objetos - herança
#closures
Closure é uma
definição de um
comportamento
  com estado
Closures
Closures - private
Closures - Mixins
Closures - Mixins
Usando classes - Ex: Java
Usando closures - Ex: Javascript
Mixins fazem composição
  de comportamento
  melhor que herança
#conclusão
Javascript nunca foi
 uma linguagem de
     brinquedo
Classe é apenas uma
forma de construir
      objetos
Closures são mais
poderosos que classes
Javascript é “mais”
Orientado a Objetos
do que você imagina
Obrigado !!!
    Emerson Macedo
        @emerleite
   http://nodecasts.org
  http://codificando.com
Referências
http://en.wikipedia.org/wiki/JavaScript
http://en.wikipedia.org/wiki/Smalltalk
http://en.wikipedia.org/wiki/Object-oriented_programming
[Page-Jones, 2000] - http://goo.gl/W9y4l
http://en.wikipedia.org/wiki/Prototype-based_programming
http://en.wikipedia.org/wiki/Delegation_(programming)
http://en.wikipedia.org/wiki/Closure_(computer_science)
http://okmij.org/ftp/Scheme/oop-in-fp.txt
http://people.csail.mit.edu/gregs/ll1-discuss-archive-html/
msg03277.html
http://fragmental.tw/2008/09/23/object-oriented-design-which-
how-and-what/

Javascript Orientado a Objetos - Fisl12