View
3.998
Download
2
Category
Preview:
DESCRIPTION
Nesta palestra temos o objetivo de rever os conceitos e origens da programação orientada a objetos
Citation preview
(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 PHPDesenvolvedor desde 2003
Porque repensar?
“ Trabalhar com orientação a objetos éfácil, só fazer tudo com classes! “
“ Orientação a objetos é a evoluçãoda programação procedural “
Definições
“Orientação a objetos é um paradigmade análise, projeto e programação de
sistemas de software baseado na composição e interação entre diversas
unidades de software chamadas deobjetos. “
http://pt.wikipedia.org/wiki/Orientação_a_objetos
Um paradigma é um modelo mentalque orienta a forma que será
estruturada uma solução
Um paradigma é um modelo mentalque orienta a forma que será
estruturada uma solução
Procedural
Um paradigma é um modelo mentalque orienta a forma que será
estruturada uma solução
Procedural
Funcional
Um paradigma é um modelo mentalque orienta a forma que será
estruturada uma solução
Procedural Orientado a aspectos
Funcional
Um paradigma é um modelo mentalque orienta a forma que será
estruturada uma solução
Procedural
FuncionalOrientado a objetos
Orientado a aspectos
A OOP busca tornar o mundo doscomputadores mais próximo da
realidade
Bora viajar
Um pouco de história...
Os termos objetos e instânciasforam 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çadaa 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çãocomputacional de algo existente
Objeto é a representaçãocomputacional de algo existente
Características
Objeto é a representaçãocomputacional de algo existente
Características Comportamentos
Objeto é a representaçãocomputacional de algo existente
Características Comportamentos
Estado
Classe é a descrição do objetoseguindo as regras de sintaxe
das linguagens
Classe é a descrição do objetoseguindo as regras de sintaxe
das linguagens
Tipo
namespace Lcobucci\Examples;
class Person{ private $name;
public function talk($message) { echo $message; }}
Instância é a concretizaçãode um objeto (referência
à memória)
Instância é a concretizaçãode um objeto (referência
à memória)
$luis = new Person();
A visibilidade define a acessibilidadedos atributos e métodos
A visibilidade define a acessibilidadedos atributos e métodos
Public
A visibilidade define a acessibilidadedos atributos e métodos
Public Protected
A visibilidade define a acessibilidadedos atributos e métodos
Public PrivateProtected
A visibilidade define a acessibilidadedos atributos e métodos
Public PrivateProtected
Visibilidade != encapsulamento
Encapsulamento é a técnicade proteger métodos e atributos
Encapsulamento utiliza osmodificadores de visibilidade
Herança é o aproveitamentode métodos e atributos entre tipos
do mesmo contexto
Herança é o aproveitamentode métodos e atributos entre tipos
do mesmo contexto
Definição de sub-tipos
namespace Lcobucci\Examples;
class Person{ private $name;
public function talk($message) { echo $message; }}
namespace Lcobucci\Examples;
class Programmer extends Person {}
A herança permite a alteração decomportamentos
namespace Lcobucci\Examples;
class Programmer extends Person { public function talk($message) { parent::talk(md5($message)); }}
Abstração é a capacidadede definir comportamentos sem
sua implementação
Abstração é a capacidadede definir comportamentos sem
sua implementação
Classe abstrata
Abstração é a capacidadede definir comportamentos sem
sua implementação
Método abstratoClasse abstrata
Abstração é a capacidadede definir comportamentos sem
sua implementação
Método abstratoClasse abstrata Interface
Classes abstratas nunca podemser instanciadas diretamente,é necessário uma classe filha
Métodos abstratos devem serobrigatoriamente implementadospelas classes filhas (a não ser que
elas também sejam abstratas)
namespace Lcobucci\Examples;
abstract class Person{ private $name;
abstract public function talk($message);}
namespace Lcobucci\Examples;
class CommonPerson extends Person{ public function talk($message) { echo $message; }}
namespace Lcobucci\Examples;
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 Lcobucci\Examples;
interface PaymentMethod{ public function pay($value);}
namespace Lcobucci\Examples;
class CreditCard implements PaymentMethod{ public function pay($value) { // paga usando cartão de crédito }}
namespace Lcobucci\Examples;
class Money implements PaymentMethod{ public function pay($value) { // paga usando dinheiro }}
Polimorfismo é a possibilidade deum método ter comportamentos
diferentes
Possibilitado através da abstração
namespace Lcobucci\Examples;
class Item{ private $price;
public function sell($quantity, PaymentMethod $paymentMethod) { $paymentMethod->pay( $this->price * $quantity ); }}
namespace Lcobucci\Examples;
class Item{ private $price;
public function sell($quantity, PaymentMethod $paymentMethod) { $paymentMethod->pay( $this->price * $quantity ); }}
Construtores são responsáveispor definir as regras de criação
de um objeto
Destrutores são responsáveispor definir as regras de destruição
de um objeto
namespace Lcobucci\Examples;
class PersonList{ private $list;
public function __construct() { $this->list = array(); } }
$list = new PersonList();
namespace Lcobucci\Examples;
class PersonList{ private $list;
public function __destruct() { $this->list = null; } }
$list = new PersonList();$list = null;
Erros comuns
namespace Lcobucci\Examples;
class Pessoa{ private $name;}
Mistura de idiomas
namespace Lcobucci\Examples;
class Pessoa{ private $nome;}
Devs felizes : )
namespace Lcobucci\Examples;
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
Recommended