SlideShare une entreprise Scribd logo
1  sur  88
Télécharger pour lire hors ligne
(Re)Pensando
a Orientação a Objetos
Luís Otávio Cobucci Oblonczyk - @lcobucci
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Evangelista PHP
Desenvolvedor desde 2003
Porque repensar?
“Trabalhar com orientação a objetos é
fácil, só fazer tudo com classes! “
“Orientação a objetos é a evolução
da programação procedural “
Definições
“Orientação a objetos é um paradigma
de análise, projeto e programação de
sistemas de software baseado na
composição e interação entre diversas
unidades de software chamadas de
objetos. “
http://pt.wikipedia.org/wiki/Orientação_a_objetos
Um paradigma é um modelo mental
que orienta a forma que será
estruturada uma solução
Um paradigma é um modelo mental
que orienta a forma que será
estruturada uma solução
Procedural
Um paradigma é um modelo mental
que orienta a forma que será
estruturada uma solução
Procedural
Funcional
Um paradigma é um modelo mental
que orienta a forma que será
estruturada uma solução
Procedural Orientado a aspectos
Funcional
Um paradigma é um modelo mental
que orienta a forma que será
estruturada uma solução
Procedural
Funcional
Orientado a objetos
Orientado a aspectos
A OOP busca tornar o mundo dos
computadores mais próximo da
realidade
Bora viajar
Um pouco de história...
Os termos objetos e instâncias
foram utilizados por volta
das décadas de 50~60
O conceito formal foi introduzido
(nos anos 60) na linguagem
de programação Simula 67
Na década de 70 foi lançada
a linguagem Smalltalk,
que até hoje é referência
Vantagens e desvantagens
Vantagens
Vantagens
Reutilização
Vantagens
Reutilização
Extensibilidade
Vantagens
Reutilização
Extensibilidade
Testabilidade
Vantagens
Reutilização
Extensibilidade
Testabilidade
Proximidade do negócio
Desvantagens
Desvantagens
Aprendizado
Desvantagens
Aprendizado
Utilização de recursos
Conceitos básicos
Objeto é a representação
computacional de algo existente
Objeto é a representação
computacional de algo existente
Características
Objeto é a representação
computacional de algo existente
Características Comportamentos
Objeto é a representação
computacional de algo existente
Características Comportamentos
Estado
Classe é a descrição do objeto
seguindo as regras de sintaxe
das linguagens
Classe é a descrição do objeto
seguindo as regras de sintaxe
das linguagens
Tipo
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
Instância é a concretização
de um objeto (referência
à memória)
Instância é a concretização
de um objeto (referência
à memória)
$luis = new Person();
A visibilidade define a acessibilidade
dos atributos e métodos
A visibilidade define a acessibilidade
dos atributos e métodos
Public
A visibilidade define a acessibilidade
dos atributos e métodos
Public Protected
A visibilidade define a acessibilidade
dos atributos e métodos
Public PrivateProtected
A visibilidade define a acessibilidade
dos atributos e métodos
Public PrivateProtected
Visibilidade != encapsulamento
Encapsulamento é a técnica
de proteger métodos e atributos
Encapsulamento utiliza os
modificadores de visibilidade
Herança é o aproveitamento
de métodos e atributos entre tipos
do mesmo contexto
Herança é o aproveitamento
de métodos e atributos entre tipos
do mesmo contexto
Definição de sub-tipos
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
namespace LcobucciExamples;
class Programmer extends Person
{
}
A herança permite a alteração de
comportamentos
namespace LcobucciExamples;
class Programmer extends Person
{
public function talk($message)
{
parent::talk(md5($message));
}
}
Abstração é a capacidade
de definir comportamentos sem
sua implementação
Abstração é a capacidade
de definir comportamentos sem
sua implementação
Classe abstrata
Abstração é a capacidade
de definir comportamentos sem
sua implementação
Método abstratoClasse abstrata
Abstração é a capacidade
de definir comportamentos sem
sua implementação
Método abstratoClasse abstrata Interface
Classes abstratas nunca podem
ser instanciadas diretamente,
é necessário uma classe filha
Métodos abstratos devem ser
obrigatoriamente implementados
pelas classes filhas (a não ser que
elas também sejam abstratas)
namespace LcobucciExamples;
abstract class Person
{
private $name;
abstract public function talk($message);
}
namespace LcobucciExamples;
class CommonPerson extends Person
{
public function talk($message)
{
echo $message;
}
}
namespace LcobucciExamples;
class Programmer extends Person
{
public function talk($message)
{
echo sha1($message);
}
}
Interfaces são estruturas que
definem quais comportamentos os
objetos terão que implementar
Interfaces são estruturas que
definem quais comportamentos os
objetos terão que implementar
Sempre públicos
namespace LcobucciExamples;
interface PaymentMethod
{
public function pay($value);
}
namespace LcobucciExamples;
class CreditCard implements PaymentMethod
{
public function pay($value)
{
// paga usando cartão de crédito
}
}
namespace LcobucciExamples;
class Money implements PaymentMethod
{
public function pay($value)
{
// paga usando dinheiro
}
}
Polimorfismo é a possibilidade de
um método ter comportamentos
diferentes
Possibilitado através da abstração
namespace LcobucciExamples;
class Item
{
private $price;
public function sell($quantity, PaymentMethod $paymentMethod)
{
$paymentMethod->pay(
$this->price * $quantity
);
}
}
namespace LcobucciExamples;
class Item
{
private $price;
public function sell($quantity, PaymentMethod $paymentMethod)
{
$paymentMethod->pay(
$this->price * $quantity
);
}
}
Construtores são responsáveis
por definir as regras de criação
de um objeto
Destrutores são responsáveis
por definir as regras de destruição
de um objeto
namespace LcobucciExamples;
class PersonList
{
private $list;
public function __construct()
{
$this->list = array();
}
}
$list = new PersonList();
namespace LcobucciExamples;
class PersonList
{
private $list;
public function __destruct()
{
$this->list = null;
}
}
$list = new PersonList();
$list = null;
Erros comuns
namespace LcobucciExamples;
class Pessoa
{
private $name;
}
Mistura de idiomas
namespace LcobucciExamples;
class Pessoa
{
private $nome;
}
Devs felizes : )
namespace LcobucciExamples;
class Passaro
{
public function voa()
{
}
}
class Aviao extends Passaro
{
}
Avião voa, mas não é um pássaro...
O que posso estudar no futuro?
Orientação a objetos
Orientação a objetos
Gerenciamento de exceptions
Orientação a objetos
Single responsability
Gerenciamento de exceptions
Orientação a objetos
Gerenciamento de exceptions
Single responsability
Open/closed
Orientação a objetos
Gerenciamento de exceptions
Liskov substitution
Single responsability
Open/closed
Orientação a objetos
Gerenciamento de exceptions
Liskov substitution
Single responsability
Open/closed
Interface segragation
Orientação a objetos
Gerenciamento de exceptions
Liskov substitution
Single responsability
Open/closed
Interface segragation
Dependency inversion
Orientação a objetos
Gerenciamento de exceptions
Liskov substitution
Single responsability
Open/closed
Interface segragation
Dependency inversion
Design Patterns
Orientação a objetos
Gerenciamento de exceptions
Liskov substitution
Single responsability
Open/closed
Interface segragation
Dependency inversion
Design Patterns
Domain driven design
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Obrigado!
http://slideshare.net/lcobucci

Contenu connexe

Tendances

Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Waldyr Felix
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012Luís Cobucci
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaWanderlei Silva do Carmo
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaCristiano Almeida
 
Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Professor Samuel Ribeiro
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)guest18b3c00
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetosNécio de Lima Veras
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClasseFelipe J. R. Vieira
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosEvandro Agnes
 
Classes objetos
Classes objetosClasses objetos
Classes objetosnikson123
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
jQuery básico (parte 1)
jQuery básico (parte 1)jQuery básico (parte 1)
jQuery básico (parte 1)Luís Cobucci
 

Tendances (20)

Java 00 Poo
Java 00 PooJava 00 Poo
Java 00 Poo
 
Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)Introdução a C# 4.0 (Revisão)
Introdução a C# 4.0 (Revisão)
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - TDC 2012
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vbaConceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Programação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em JavaProgramação Orientada a Objetos - Uso da O.O. em Java
Programação Orientada a Objetos - Uso da O.O. em Java
 
Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos Java Básico - Módulo 07: Introdução à programação orientada à objetos
Java Básico - Módulo 07: Introdução à programação orientada à objetos
 
Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)Programação Orientada A Objectos (Poo)
Programação Orientada A Objectos (Poo)
 
O paradigma da orientação a objetos
O paradigma da orientação a objetosO paradigma da orientação a objetos
O paradigma da orientação a objetos
 
Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
POO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de ClassePOO - Aula 07 - Construtores e Atributos de Classe
POO - Aula 07 - Construtores e Atributos de Classe
 
Fundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetosFundamentos e princípios do projeto orientado a objetos
Fundamentos e princípios do projeto orientado a objetos
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Classes objetos
Classes objetosClasses objetos
Classes objetos
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
jQuery básico (parte 1)
jQuery básico (parte 1)jQuery básico (parte 1)
jQuery básico (parte 1)
 

Similaire à (Re)pensando a OOP - PHPDay Curitiba 2013

PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPablo Dall'Oglio
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a pooSedu
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetosCleyton Ferrari
 
Conceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoConceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoLuciano Almeida
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosRamon Mayor Martins
 
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a ObjectosDesenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a ObjectosVitor Silva
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0César Augusto Pessôa
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Jhonefj
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Daniel Brandão
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Luis Ferreira
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetosxbacon
 

Similaire à (Re)pensando a OOP - PHPDay Curitiba 2013 (20)

PHP: Programando com orientação a Objetos
PHP: Programando com orientação a ObjetosPHP: Programando com orientação a Objetos
PHP: Programando com orientação a Objetos
 
Introdução a poo
Introdução a pooIntrodução a poo
Introdução a poo
 
Aula orientação a objetos
Aula orientação a objetosAula orientação a objetos
Aula orientação a objetos
 
Programação orientada a objetos
Programação orientada a objetosProgramação orientada a objetos
Programação orientada a objetos
 
Conceitos de Orientação A Objeto
Conceitos de Orientação A ObjetoConceitos de Orientação A Objeto
Conceitos de Orientação A Objeto
 
Orientacao a Objetos
Orientacao a ObjetosOrientacao a Objetos
Orientacao a Objetos
 
Java7
Java7Java7
Java7
 
Poo padadigmas
Poo padadigmasPoo padadigmas
Poo padadigmas
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a ObjetosIES GF - Introdução a Linguagem de Programação Orientada a Objetos
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
 
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a ObjectosDesenvolvimento em .Net - Programaçao Orientada a Objectos
Desenvolvimento em .Net - Programaçao Orientada a Objectos
 
Programação OO - Java
Programação OO - JavaProgramação OO - Java
Programação OO - Java
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
03 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.003 - Orientação a objetos e classes em C# v1.0
03 - Orientação a objetos e classes em C# v1.0
 
Aula 04.pdf
Aula 04.pdfAula 04.pdf
Aula 04.pdf
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
 
Curso de PHP - Objetos
Curso de PHP - ObjetosCurso de PHP - Objetos
Curso de PHP - Objetos
 
Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)Aula 02 - Principios da Orientação a Objetos (POO)
Aula 02 - Principios da Orientação a Objetos (POO)
 
Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos Módulo 9 - Introdução à Programação Orientada a Objectos
Módulo 9 - Introdução à Programação Orientada a Objectos
 
Php5 e a orientação a objetos
Php5 e a orientação a objetosPhp5 e a orientação a objetos
Php5 e a orientação a objetos
 

(Re)pensando a OOP - PHPDay Curitiba 2013