SlideShare uma empresa Scribd logo
(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?
(Re)pensando a OOP - PHPDay Curitiba 2013
“Trabalhar com orientação a objetos é
fácil, só fazer tudo com classes! “
“Orientação a objetos é a evolução
da programação procedural “
(Re)pensando a OOP - PHPDay Curitiba 2013
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

Mais conteúdo relacionado

PDF
(Re)pensando a OOP - Flisol Gyn
PDF
02 - Orientação a objetos e revisão de C# v1.5
PDF
03 poo
ODP
Orientação a Objetos - Conceitos
PDF
Conhecendo A Linguagem de Programação Java
PPT
Curso : Introdução Orientação a Objetos
PPTX
Especialização e generalização em java
PDF
POO - Aula 1
(Re)pensando a OOP - Flisol Gyn
02 - Orientação a objetos e revisão de C# v1.5
03 poo
Orientação a Objetos - Conceitos
Conhecendo A Linguagem de Programação Java
Curso : Introdução Orientação a Objetos
Especialização e generalização em java
POO - Aula 1

Mais procurados (20)

ODP
Java 00 Poo
PPTX
Introdução a C# 4.0 (Revisão)
PDF
Java - Aula 2 - Orientado a Objetos
PDF
Virada Tecnológica 2017
PPT
Conceitos básicos de programação orientada a objetos
PDF
(Re)pensando a OOP - TDC 2012
PPTX
Construtores em Java
PDF
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
PPTX
Programação Orientado a Objetos
PPTX
Programação Orientada a Objetos - Uso da O.O. em Java
PPT
Java Básico - Módulo 07: Introdução à programação orientada à objetos
PDF
Programação Orientada A Objectos (Poo)
ODP
O paradigma da orientação a objetos
PDF
Programação orientada a objetos – II
PDF
POO - Aula 07 - Construtores e Atributos de Classe
PDF
Fundamentos e princípios do projeto orientado a objetos
PPTX
Orientação a Objetos
PDF
Classes objetos
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
PPTX
jQuery básico (parte 1)
Java 00 Poo
Introdução a C# 4.0 (Revisão)
Java - Aula 2 - Orientado a Objetos
Virada Tecnológica 2017
Conceitos básicos de programação orientada a objetos
(Re)pensando a OOP - TDC 2012
Construtores em Java
Conceitos Básicos de Orientação o Objetos aplicdo ao VBA - Classes em vba
Programação Orientado a Objetos
Programação Orientada a Objetos - Uso da O.O. em Java
Java Básico - Módulo 07: Introdução à programação orientada à objetos
Programação Orientada A Objectos (Poo)
O paradigma da orientação a objetos
Programação orientada a objetos – II
POO - Aula 07 - Construtores e Atributos de Classe
Fundamentos e princípios do projeto orientado a objetos
Orientação a Objetos
Classes objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
jQuery básico (parte 1)
Anúncio

Semelhante a (Re)pensando a OOP - PHPDay Curitiba 2013 (20)

PDF
PHP: Programando com orientação a Objetos
PPTX
Introdução a poo
PDF
Aula orientação a objetos
PPTX
Programação orientada a objetos
PPT
Conceitos de Orientação A Objeto
PDF
Orientacao a Objetos
PPT
aula1aula1aula1aula1aula1aula1-parte1.ppt
PDF
Poo padadigmas
PDF
PHP 5.3 - Classes e Objetos
PDF
Introdução à Orientação a Objetos: Aula09_Conceito_OO.pdf
PPT
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
PDF
Desenvolvimento em .Net - Programaçao Orientada a Objectos
PDF
Programação OO - Java
ODP
Design Patterns
PDF
03 - Orientação a objetos e classes em C# v1.0
PDF
Umlv4 090813182632-phpapp02
PDF
Curso de PHP - Objetos
PDF
Aula 02 - Principios da Orientação a Objetos (POO)
PPTX
Módulo 9 - Introdução à Programação Orientada a Objectos
PHP: Programando com orientação a Objetos
Introdução a poo
Aula orientação a objetos
Programação orientada a objetos
Conceitos de Orientação A Objeto
Orientacao a Objetos
aula1aula1aula1aula1aula1aula1-parte1.ppt
Poo padadigmas
PHP 5.3 - Classes e Objetos
Introdução à Orientação a Objetos: Aula09_Conceito_OO.pdf
IES GF - Introdução a Linguagem de Programação Orientada a Objetos
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Programação OO - Java
Design Patterns
03 - Orientação a objetos e classes em C# v1.0
Umlv4 090813182632-phpapp02
Curso de PHP - Objetos
Aula 02 - Principios da Orientação a Objetos (POO)
Módulo 9 - Introdução à Programação Orientada a Objectos
Anúncio

Último (11)

PPTX
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
PPTX
Arquitetura de computadores - Memórias Secundárias
PPTX
Utilizando code blockes por andre backes
PPTX
Tipos de servidor em redes de computador.pptx
PPTX
Viasol Energia Solar -Soluções para geração e economia de energia
PDF
Manejo integrado de pragas na cultura do algodão
PPTX
Eng. Software - pontos essenciais para o início
PDF
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Design - Introdução a Gestalt e teoria das formas
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Proposta de Implementação de uma Rede de Computador Cabeada.pptx
Arquitetura de computadores - Memórias Secundárias
Utilizando code blockes por andre backes
Tipos de servidor em redes de computador.pptx
Viasol Energia Solar -Soluções para geração e economia de energia
Manejo integrado de pragas na cultura do algodão
Eng. Software - pontos essenciais para o início
eBook - GUIA DE CONSULTA RAPIDA EM ROTEADORES E SWITCHES CISCO - VOL I.pdf
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Design - Introdução a Gestalt e teoria das formas
Termos utilizados na designação de relação entre pessoa e uma obra.pdf

(Re)pensando a OOP - PHPDay Curitiba 2013