SlideShare a Scribd company logo
1 of 147
Download to read offline
O que você NÃO
aprendeu sobre
Orientação a
Objetos
Danilo Sato
@dtsato
Danilo Sato
@dtsato - www.dtsato.com
Desenvolvedor, Arquiteto, Coach, DevOps, Treinador
Como
aprendemos OO?
Orientação a Objetos é:
Herança +
Polimorfismo +
Encapsulamento
Orientação a Objetos é:
Modelar o Mundo Real
“A execução de um programa é considerada um
modelo físico, simulando o comportamento de
uma parte real ou imaginária do mundo."
-- Kristen Nygaard
“Programação orientada a objetos é uma
péssima ideia, que só poderia ter nascido na
Califórnia."
-- Edsger W. Dijkstra
“Programação orientada a objetos é uma
péssima ideia, que só poderia ter nascido na
Califórnia."
-- Edsger W. Dijkstra
“Na Ciência da Computação, arrogância é
medida em nano-Dijkstras"
-- Alan Kay
Inventou o termo “Orientação a
Objetos”
Inventou o termo “Orientação a
Objetos”
Smalltalk
Células
Inventou o termo “Orientação a
Objetos”
Inventou o termo “Orientação a
Objetos”
“OO significa passagem de mensagem,
retenção local, proteção e ocultação do estado
de um processo, e associação tardia de tudo"
Inventou o termo “Orientação a
Objetos”
“OO significa passagem de mensagem,
retenção local, proteção e ocultação do estado
de um processo, e associação tardia de tudo"
“A grande ideia é passagem de mensagem"
Inventou o termo “Orientação a
Objetos”
“OO significa passagem de mensagem,
retenção local, proteção e ocultação do estado
de um processo, e associação tardia de tudo"
“A grande ideia é passagem de mensagem"
“OO é um modelo computacional, não um
paradigma de programação"
“...(Erlang) é a única linguagem orientada a
objetos e talvez eu tenha sido prematuro em
dizer o que era orientação a objetos"
-- Joe Armstrong
Orientação a Objetos:
Programa?
Linguagem?
Paradigma?
Modelo Computacional?
Orientação a Objetos:
Programa?
Linguagem?
Paradigma?
Modelo Computacional?
Ninguém Concorda
Esta palestra
é sobre oo
Esta palestra
Não é sobre oo
Esta palestra
é sobre DESIGNDESIGN
O que é ?DESIGN
DESIGN Código==
DESIGN Código==
Estrutura
Organização
Flexibilidade
Testabilidade
Legibilidade
Coesão
Acoplamento
Dependências
BOM reduz o
custo da mudança
DESIGN
DESIGN
Hipótese da
stamina do DESIGN
Funcionalidades
Tempo
Funcionalidades
Tempo
Sem Design
Funcionalidades
Tempo
Bom Design
Sem Design
Funcionalidades
Tempo
Bom Design
Sem Design
Onde o design
se paga
2004!
Design foi esquecido
Rails
Design foi esquecido
Rails
Model
View
Controller
Helper
Mailer
...
Model
View
Controller
Zero
Design
Design
Ágil
Up-front
Design
DESIGN É BOM
Design “ativo”
DESIGN É BOM
Design “passivo”
DESIGN É BOM
Design ágil == Design evolutivo
DESIGN É BOM
Design ágil == Design evolutivo
TUDO É UM
OBJETO!
TUDO É UM
OBJETO?
TUDO É UM
OBJETO?
class?
TUDO É UM
OBJETO?
if?
class?
TUDO É UM
OBJETO?
while?
if?
class?
Smalltalk
WARNING!
O código que você está prestes a ler foi escrito
com o propósito educacional. Não faça isso em
casa ou coloque código parecido em produção.
class TrueClass
def if_true(is_true, otherwise: -> {})
is_true.call
end
def if_false(is_false, otherwise: -> {})
otherwise.call
end
end
class FalseClass
def if_true(is_true, otherwise: -> {})
otherwise.call
end
def if_false(is_false, otherwise: -> {})
is_false.call
end
end
Condições
2.0.0 > (2 > 1).if_true -> {
2.0.0?> puts "sim"
2.0.0?> }, otherwise: -> {
2.0.0?> puts "não"
2.0.0?> }
sim
=> nil
2.0.0 > (1 > 2).if_true -> {
2.0.0?> puts "sim"
2.0.0?> }, otherwise: -> {
2.0.0?> puts "não"
2.0.0?> }
não
=> nil
Condições
class Proc
def while_true(&blk)
self.call.if_true -> {
blk.call
while_true(&blk)
}
end
end
2.0.0?> i = 0
2.0.0?> -> {i < 3}.while_true do
2.0.0?> puts i
2.0.0?> i += 1
2.0.0?> end
0
1
2
=> nil
Loops
Herança
Herança
“É um”
Ave
Pato Pinguim
+ voa()
+ voa() + voa()
class Bird
def fly
puts "flap, flap, flap"
end
end
class Penguin < Bird
def fly
raise "I don't know how to fly"
end
end
flock = [Bird.new, Bird.new, Bird.new]
flock.each { |bird| bird.fly }
# >> flap, flap, flap
# >> flap, flap, flap
# >> flap, flap, flap
class Bird
def fly
puts "flap, flap, flap"
end
end
class Penguin < Bird
def fly
raise "I don't know how to fly"
end
end
flock = [Penguin.new, Penguin.new,
Penguin.new]
flock.each { |bird| bird.fly }
# ~> -:9:in `fly': I don't know how to fly
(RuntimeError)
# ~> from -:14:in `block in <main>'
# ~> from -:14:in `each'
Princípio de Substituição
de Liskov
Se S é um subtipo de T, então os
objetos do tipo T podem ser
substituídos pelos objetos de tipo
S em qualquer lugar do programa
Isto não é uma ave.Isto não é uma ave.
Herança
“É um”
Herança
“É um”
Herança
Herança
?
Herança
class Book < ActiveRecord::Base
def initialize(attributes = nil, options = {})
super
@my_cache = {}
end
def number_of_pages
@my_cache[:number_of_pages] ||= 10000
end
end
Book.create(
:title => "Lord of the Rings").number_of_pages
# => 10000
Book.find_by(
:title => "Lord of the Rings").number_of_pages
# ~> -:8:in `number_of_pages': undefined method
`[]' for nil:NilClass (NoMethodError)
class Book < ActiveRecord::Base
def after_initialize
@my_cache = {}
end
def number_of_pages
@my_cache[:number_of_pages] ||= 10000
end
end
Book.create(
:title => "Lord of the Rings").number_of_pages
# => 10000
Book.find_by(
:title => "Lord of the Rings").number_of_pages
# => 10000
Herança:
Preciso entender o
que a(s) classe(s)
Pai faz(em)!
class Deck < Array
def initialize
suits = %w(S H C D)
indexes = %w(A 2 3 4 5 6 7 8 9 10 J Q K)
cards = indexes.product(suits)
super(cards)
end
def draw(n)
self.pop(n)
end
end
deck = Deck.new
deck.shuffle!.draw(5) # => [["6", "H"], ["Q",
"H"], ["3", "C"], ["6", "S"], ["K", "C"]]
deck << ["A", "S"] << ["A", "S"]
deck.count { |card| card[0] == "A"} # => 6 aces?
Não use herança
se não usar todo
o comportamento
do(s) pais(s)
Herança é perigoso
Herança é perigoso
Herança é perigoso
Herança é perigoso
Herança é perigoso
Use Herança
quando há
especialização
Prefira
hierarquias
rasas
BigDecimal RationalComplexFloatInteger
Fixnum Bignum
Numeric
Agregação e
composição
Agregação Composição
“Tem um”
Agregação
Agregação
Agregação
composição
composição
composição
class Deck
def initialize
suits = %w(S H C D)
indexes = %w(A 2 3 4 5 6 7 8 9 10 J Q K)
@cards = indexes.product(suits)
end
def count(&blk); @cards.count(&blk) end
def <<(card)
@cards << card unless @cards.include?(card)
self
end
end
deck = Deck.new
deck << ["A", "S"] << ["A", "S"]
deck.count { |card| card[0] == "A"} # => 4
Prefira
composição ao
invés de Herança
Delegação
Delegação
require 'forwardable'
class Deck
extend Forwardable
def_delegator :@cards, :pop, :draw
def_delegators :@cards, :count
def initialize
suits = %w(S H C D)
indexes = %w(A 2 3 4 5 6 7 8 9 10 J Q K)
@cards = indexes.product(suits)
end
def <<(card)
@cards << card unless @cards.include?(card)
self
end
end
deck = Deck.new
deck.draw(5) # => [["Q", "D"], ["K", "S"], ["K",
"H"], ["K", "C"], ["K", "D"]]
polimorfismo
polimorfismo
polimorfismo
1. Herança
1. Herança
2. Duck Typing
1. Herança
2. Duck Typing
3. Mixins
permite separar
abstração da
concretização
permite separar
“O que” do
“Como”
Princípio “Open-Closed”
Entidades de software como
classes, módulos e funções devem
ser abertas para extensão, mas
fechadas para modificação
-- Bertrand Meyer
MITO: Modelar OO é
modelar o mundo real
Actor
Ghost Pacman
center, direction
+ collidesWith(Actor)
+ advance(millis)
+ getNextDirection()
Actor
Ghost
Strategy
Pacman
Strategy
MovementStrategy
+ getNextDirection()
Actor
Random
Strategy
UserControl
Strategy
MovementStrategy
+ getNextDirection()
Actor
Random
Strategy
UserControl
Strategy
MovementStrategy
+ getNextDirection()
TargetChasing
Strategy
+ getTarget()
o design evolui
Conforme o
entendimento do
domínio evolui
[ ] Metallica (10)
[ ] Iron Maiden (5)
[ ] AC/DC (15)
[ ] ...
[ ] Black Album (5)
[ ] Master of
Puppets (5)
[ ] Killers (5)
[ ] ...
[x] Rock (50)
[ ] Clássico (100)
[ ] Jazz (80)
Filtros
Artista
Album
Estilo
class Song < ActiveRecord::Base
searchable do
string :title
string :album { album.title }
string :artist { album.artist.name }
...
end
def self.build_with_filters(p={})
search = Sunspot.new_search(Song)
search.build do
title = with(:title, p[:title]) if p[:title].present?
artist = with(:artist, p[:artist]) if p[:artist].present?
album = with(:album, p[:album]) if p[:album].present?
...
facet :artist, exclude: artist
facet :album, exclude: album
end
search
end
end
class Song < ActiveRecord::Base
...
def self.build_with_filters(p={})
search = Sunspot.new_search(Song)
if p[:artist]
to_reject = p[:artist_album].map do |artist_album|
JSON.parse(artist_album)['album']
end
p[:album].reject! do |element|
to_reject.include?(element)
end
p[:album] = [{}] if p[:album].empty?
end
search.build do
...
end
search
end
end
o domínio
não é música
o domínio
é busca
require 'forwadable'
module Search
class SongDocument
extend Forwardable
def_delegators :@song, :title
def initialize(song)
@song = song
end
def album
@song.album.title
end
def artist
@song.artist.name
end
...
end
end
module Search
class SongDocument
def self.search_filters(p={})
[
Search::OptionalFilter.new(:artist, p),
Search::AlbumFilter.new(:artist, :artist_album, p),
Search::OptionalFilter.new(:title, p)
]
end
def self.build_with_filters(filters, p={})
Sunspot.new_search(Song).tap do |search|
filters.each do |filter|
filter.apply_to(search)
end
Search::Faceter.new(filters, p).apply_to(search)
end
end
end
end
Busca
Música
Document
Filter
Facet
Indexer
Song
Album
Artist
Contextos
Delimitados
Busca
Música
Document
Filter
Facet
Indexer
Song
Album
Artist
Mapa de
Contextos
Busca
Música
“Todos os modelos estão errados,
alguns modelos são úteis"
-- George Box
MITO: Modelar OO é
modelar o mundo real
MITO: Modelar OO é
modelar o mundo real
Resumindo...
OO é passagem
de mensagem
Herança
agregação
Composição
delegação
polimorfismo
DESIGN É BOM
Zero
Design
Design
Ágil
Up-front
Design
Design ágil == Design evolutivo
DESIGN É BOM
Zero
Design
Design
Ágil
Up-front
Design
Design ágil == Design evolutivo
Não modele o
mundo real
modele o
seu domínio
aprenda o
seu domínio
evolua o
seu domínio
se divirta!
Obrigado!
Danilo Sato
@dtsato - www.dtsato.com
Desenvolvedor, Arquiteto, Coach, DevOps, Treinador
Referências
• “Practical Object-Oriented Design in Ruby” Sandi Metz
• “Domain-Driven Design: Tackling Complexity in the Heart of
Software” Eric Evans
• “Analysis Patterns: Reusable Object Models” Martin Fowler
• “Patterns of Enterprise Application Architecture” Martin Fowler
• “Design Patterns: Elements of Reusable Object-Oriented
Software” Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
• “Growing Object-Oriented Software, Guided by Tests” Steve
Freeman , Nat Pryce
• “Object-Oriented Software Construction” Bertrand Meyer
Livros:

More Related Content

Viewers also liked

Apostila algoritmos - Lógica de Programação
Apostila algoritmos - Lógica de ProgramaçãoApostila algoritmos - Lógica de Programação
Apostila algoritmos - Lógica de ProgramaçãoLucas Mendes
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerpugpe
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverMaurício Linhares
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAislan Rafael
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08André Phillip Bertoletti
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber FuncionaLaís Berlatto
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Mario Jorge Pereira
 
Programação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoProgramação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoEvandro Júnior
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de ProgramaçãoRicardo Terra
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOMicrosoft
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java BasicoJoel Lobo
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programaçãorodfernandes
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básicaPablo Verlly Moreira
 

Viewers also liked (20)

Apostila algoritmos - Lógica de Programação
Apostila algoritmos - Lógica de ProgramaçãoApostila algoritmos - Lógica de Programação
Apostila algoritmos - Lógica de Programação
 
FC-Logic
FC-LogicFC-Logic
FC-Logic
 
Pug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debuggerPug pe viii - luciano rodrigues - debugger
Pug pe viii - luciano rodrigues - debugger
 
Apostila vijeo citect basico
Apostila vijeo citect basicoApostila vijeo citect basico
Apostila vijeo citect basico
 
Testes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E WebdriverTestes In Browser Em Rails Com Capybara E Webdriver
Testes In Browser Em Rails Com Capybara E Webdriver
 
Geek night-2015
Geek night-2015Geek night-2015
Geek night-2015
 
Aula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro CódigoAula 02 POO - Meu Primeiro Código
Aula 02 POO - Meu Primeiro Código
 
Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08Lógica de Programação - Unimep/Pronatec - Aula08
Lógica de Programação - Unimep/Pronatec - Aula08
 
BDD & Cucumber
BDD & CucumberBDD & Cucumber
BDD & Cucumber
 
Como o Cucumber Funciona
Como o Cucumber FuncionaComo o Cucumber Funciona
Como o Cucumber Funciona
 
BDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + JavaBDD: Cucumber + Selenium + Java
BDD: Cucumber + Selenium + Java
 
Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java Revisão Sobre Programação Orientada a Objetos com Java
Revisão Sobre Programação Orientada a Objetos com Java
 
Programação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e ImplementaçãoProgramação Orientada á Objeto - Paradigmas e Implementação
Programação Orientada á Objeto - Paradigmas e Implementação
 
BDD com Cucumber
BDD com CucumberBDD com Cucumber
BDD com Cucumber
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 
Apostila Lógica de Programação
Apostila Lógica de ProgramaçãoApostila Lógica de Programação
Apostila Lógica de Programação
 
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃOCURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
CURSO JAVA - AULA 1 - INTRODUÇÃO LÓGICA DE PROGRAMAÇÃO
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
Material de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de ProgramaçãoMaterial de Apoio de Algoritmo e Lógica de Programação
Material de Apoio de Algoritmo e Lógica de Programação
 
Apostila de algoritimo super básica
Apostila de algoritimo super básicaApostila de algoritimo super básica
Apostila de algoritimo super básica
 

Similar to O que você NÃO aprendeu sobre Programação Orientada a Objetos

De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Qualidade de código - a qualidade que faz a diferença
Qualidade de código - a qualidade que faz a diferençaQualidade de código - a qualidade que faz a diferença
Qualidade de código - a qualidade que faz a diferençaCaelum
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a TestesGregorio Melo
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...Cesar Augusto Nogueira
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHGiovanni Bassi
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em PythonRodrigo Hübner
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinNelson Glauber Leal
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básicaLorena de Souza
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Drupal 7 Direto das Trincheiras
Drupal 7  Direto das TrincheirasDrupal 7  Direto das Trincheiras
Drupal 7 Direto das TrincheirasRafael Caceres
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptJean Carlo Emer
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?Felipe Volpone
 
Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.GTS-CE
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoronaldoferraz
 

Similar to O que você NÃO aprendeu sobre Programação Orientada a Objetos (20)

De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Qualidade de código - a qualidade que faz a diferença
Qualidade de código - a qualidade que faz a diferençaQualidade de código - a qualidade que faz a diferença
Qualidade de código - a qualidade que faz a diferença
 
Programação Orientada a Testes
Programação Orientada a TestesProgramação Orientada a Testes
Programação Orientada a Testes
 
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ..."Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
"Se tornando um Desenvolvedor Java NINJA" - Semana Integrada da PUC Campinas ...
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Domain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BHDomain Driven Design (DDD) - DevIsland, BH
Domain Driven Design (DDD) - DevIsland, BH
 
Introdução à Programação em Python
Introdução à Programação em PythonIntrodução à Programação em Python
Introdução à Programação em Python
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
DDD > Experiências
DDD > ExperiênciasDDD > Experiências
DDD > Experiências
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Turbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com KotlinTurbinando o desenvolvimento Android com Kotlin
Turbinando o desenvolvimento Android com Kotlin
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Oo presentation básica
Oo presentation básicaOo presentation básica
Oo presentation básica
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Drupal 7 Direto das Trincheiras
Drupal 7  Direto das TrincheirasDrupal 7  Direto das Trincheiras
Drupal 7 Direto das Trincheiras
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Por que você deveria aprender python?
Por que você deveria aprender python?Por que você deveria aprender python?
Por que você deveria aprender python?
 
Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.Não tem teste ? Já nasceu legado.
Não tem teste ? Já nasceu legado.
 
Criando sua própria linguagem de programação
Criando sua própria linguagem de programaçãoCriando sua própria linguagem de programação
Criando sua própria linguagem de programação
 

More from Danilo Sato

Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Danilo Sato
 
Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Danilo Sato
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaDanilo Sato
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaDanilo Sato
 
Refactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the BasicsRefactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the BasicsDanilo Sato
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilDanilo Sato
 
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Danilo Sato
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báDanilo Sato
 
Coding Dojo Introduction
Coding Dojo IntroductionCoding Dojo Introduction
Coding Dojo IntroductionDanilo Sato
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Danilo Sato
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at LargeDanilo Sato
 
Refatoração em Larga Escala
Refatoração em Larga EscalaRefatoração em Larga Escala
Refatoração em Larga EscalaDanilo Sato
 
Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Danilo Sato
 

More from Danilo Sato (14)

Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014Padrões de deploy para devops e entrega contínua - DevDay 2014
Padrões de deploy para devops e entrega contínua - DevDay 2014
 
Keynote RuPy Natal 2014
Keynote RuPy Natal 2014Keynote RuPy Natal 2014
Keynote RuPy Natal 2014
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Padrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega ContínuaPadrões de deploy para DevOps e Entrega Contínua
Padrões de deploy para DevOps e Entrega Contínua
 
Refactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the BasicsRefactoring Strategies: Beyond the Basics
Refactoring Strategies: Beyond the Basics
 
Revisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia ÁgilRevisitando as Práticas de Engenharia Ágil
Revisitando as Práticas de Engenharia Ágil
 
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
Princípios e Práticas para lidar com requisitos não-funcionais em desenvolvim...
 
Estratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-báEstratégias de Refatoração: além do be-a-bá
Estratégias de Refatoração: além do be-a-bá
 
Coding Dojo Introduction
Coding Dojo IntroductionCoding Dojo Introduction
Coding Dojo Introduction
 
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
Direto das Trincheiras: Boas e más práticas de aplicações Ruby em ambientes c...
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
 
Refatoração em Larga Escala
Refatoração em Larga EscalaRefatoração em Larga Escala
Refatoração em Larga Escala
 
Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011Managing your technical debt - AgileBrazil 2011
Managing your technical debt - AgileBrazil 2011
 
Lean Lego Game
Lean Lego GameLean Lego Game
Lean Lego Game
 

Recently uploaded

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 

Recently uploaded (9)

ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 

O que você NÃO aprendeu sobre Programação Orientada a Objetos