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

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
Leonardo Melo Santos
 
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
Cristiano Almeida
 
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
Nécio de Lima Veras
 
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
Evandro Agnes
 

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 Objetos
Pablo Dall'Oglio
 
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
Vitor Silva
 
Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02Umlv4 090813182632-phpapp02
Umlv4 090813182632-phpapp02
Jhonefj
 

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