88
(Re)Pensando a Orientação a Objetos Luís Otávio Cobucci Oblonczyk - @lcobucci

(Re)pensando a OOP - PHPDay Curitiba 2013

Embed Size (px)

DESCRIPTION

Nesta palestra temos o objetivo de rever os conceitos e origens da programação orientada a objetos

Citation preview

Page 1: (Re)pensando a OOP - PHPDay Curitiba 2013

(Re)Pensando a Orientação a Objetos

Luís Otávio Cobucci Oblonczyk - @lcobucci

Page 2: (Re)pensando a OOP - PHPDay Curitiba 2013

Luís Otávio Cobucci Oblonczyk@lcobucci

http://about.me/lcobucci

Evangelista PHPDesenvolvedor desde 2003

Page 3: (Re)pensando a OOP - PHPDay Curitiba 2013

Porque repensar?

Page 4: (Re)pensando a OOP - PHPDay Curitiba 2013
Page 5: (Re)pensando a OOP - PHPDay Curitiba 2013

“ Trabalhar com orientação a objetos éfácil, só fazer tudo com classes! “

Page 6: (Re)pensando a OOP - PHPDay Curitiba 2013

“ Orientação a objetos é a evoluçãoda programação procedural “

Page 7: (Re)pensando a OOP - PHPDay Curitiba 2013
Page 8: (Re)pensando a OOP - PHPDay Curitiba 2013

Definições

Page 9: (Re)pensando a OOP - PHPDay Curitiba 2013

“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

Page 10: (Re)pensando a OOP - PHPDay Curitiba 2013

Um paradigma é um modelo mentalque orienta a forma que será

estruturada uma solução

Page 11: (Re)pensando a OOP - PHPDay Curitiba 2013

Um paradigma é um modelo mentalque orienta a forma que será

estruturada uma solução

Procedural

Page 12: (Re)pensando a OOP - PHPDay Curitiba 2013

Um paradigma é um modelo mentalque orienta a forma que será

estruturada uma solução

Procedural

Funcional

Page 13: (Re)pensando a OOP - PHPDay Curitiba 2013

Um paradigma é um modelo mentalque orienta a forma que será

estruturada uma solução

Procedural Orientado a aspectos

Funcional

Page 14: (Re)pensando a OOP - PHPDay Curitiba 2013

Um paradigma é um modelo mentalque orienta a forma que será

estruturada uma solução

Procedural

FuncionalOrientado a objetos

Orientado a aspectos

Page 15: (Re)pensando a OOP - PHPDay Curitiba 2013

A OOP busca tornar o mundo doscomputadores mais próximo da

realidade

Page 16: (Re)pensando a OOP - PHPDay Curitiba 2013

Bora viajar

Page 17: (Re)pensando a OOP - PHPDay Curitiba 2013

Um pouco de história...

Page 18: (Re)pensando a OOP - PHPDay Curitiba 2013

Os termos objetos e instânciasforam utilizados por volta

das décadas de 50~60

Page 19: (Re)pensando a OOP - PHPDay Curitiba 2013

O conceito formal foi introduzido(nos anos 60) na linguagem

de programação Simula 67

Page 20: (Re)pensando a OOP - PHPDay Curitiba 2013

Na década de 70 foi lançadaa linguagem Smalltalk,

que até hoje é referência

Page 21: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens e desvantagens

Page 22: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens

Page 23: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens

Reutilização

Page 24: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens

Reutilização

Extensibilidade

Page 25: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens

Reutilização

Extensibilidade

Testabilidade

Page 26: (Re)pensando a OOP - PHPDay Curitiba 2013

Vantagens

Reutilização

Extensibilidade

Testabilidade

Proximidade do negócio

Page 27: (Re)pensando a OOP - PHPDay Curitiba 2013

Desvantagens

Page 28: (Re)pensando a OOP - PHPDay Curitiba 2013

Desvantagens

Aprendizado

Page 29: (Re)pensando a OOP - PHPDay Curitiba 2013

Desvantagens

Aprendizado

Utilização de recursos

Page 30: (Re)pensando a OOP - PHPDay Curitiba 2013

Conceitos básicos

Page 31: (Re)pensando a OOP - PHPDay Curitiba 2013

Objeto é a representaçãocomputacional de algo existente

Page 32: (Re)pensando a OOP - PHPDay Curitiba 2013

Objeto é a representaçãocomputacional de algo existente

Características

Page 33: (Re)pensando a OOP - PHPDay Curitiba 2013

Objeto é a representaçãocomputacional de algo existente

Características Comportamentos

Page 34: (Re)pensando a OOP - PHPDay Curitiba 2013

Objeto é a representaçãocomputacional de algo existente

Características Comportamentos

Estado

Page 35: (Re)pensando a OOP - PHPDay Curitiba 2013

Classe é a descrição do objetoseguindo as regras de sintaxe

das linguagens

Page 36: (Re)pensando a OOP - PHPDay Curitiba 2013

Classe é a descrição do objetoseguindo as regras de sintaxe

das linguagens

Tipo

Page 37: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Person{ private $name;

public function talk($message) { echo $message; }}

Page 38: (Re)pensando a OOP - PHPDay Curitiba 2013

Instância é a concretizaçãode um objeto (referência

à memória)

Page 39: (Re)pensando a OOP - PHPDay Curitiba 2013

Instância é a concretizaçãode um objeto (referência

à memória)

$luis = new Person();

Page 40: (Re)pensando a OOP - PHPDay Curitiba 2013

A visibilidade define a acessibilidadedos atributos e métodos

Page 41: (Re)pensando a OOP - PHPDay Curitiba 2013

A visibilidade define a acessibilidadedos atributos e métodos

Public

Page 42: (Re)pensando a OOP - PHPDay Curitiba 2013

A visibilidade define a acessibilidadedos atributos e métodos

Public Protected

Page 43: (Re)pensando a OOP - PHPDay Curitiba 2013

A visibilidade define a acessibilidadedos atributos e métodos

Public PrivateProtected

Page 44: (Re)pensando a OOP - PHPDay Curitiba 2013

A visibilidade define a acessibilidadedos atributos e métodos

Public PrivateProtected

Visibilidade != encapsulamento

Page 45: (Re)pensando a OOP - PHPDay Curitiba 2013

Encapsulamento é a técnicade proteger métodos e atributos

Page 46: (Re)pensando a OOP - PHPDay Curitiba 2013

Encapsulamento utiliza osmodificadores de visibilidade

Page 47: (Re)pensando a OOP - PHPDay Curitiba 2013

Herança é o aproveitamentode métodos e atributos entre tipos

do mesmo contexto

Page 48: (Re)pensando a OOP - PHPDay Curitiba 2013

Herança é o aproveitamentode métodos e atributos entre tipos

do mesmo contexto

Definição de sub-tipos

Page 49: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Person{ private $name;

public function talk($message) { echo $message; }}

Page 50: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Programmer extends Person {}

Page 51: (Re)pensando a OOP - PHPDay Curitiba 2013

A herança permite a alteração decomportamentos

Page 52: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Programmer extends Person { public function talk($message) { parent::talk(md5($message)); }}

Page 53: (Re)pensando a OOP - PHPDay Curitiba 2013

Abstração é a capacidadede definir comportamentos sem

sua implementação

Page 54: (Re)pensando a OOP - PHPDay Curitiba 2013

Abstração é a capacidadede definir comportamentos sem

sua implementação

Classe abstrata

Page 55: (Re)pensando a OOP - PHPDay Curitiba 2013

Abstração é a capacidadede definir comportamentos sem

sua implementação

Método abstratoClasse abstrata

Page 56: (Re)pensando a OOP - PHPDay Curitiba 2013

Abstração é a capacidadede definir comportamentos sem

sua implementação

Método abstratoClasse abstrata Interface

Page 57: (Re)pensando a OOP - PHPDay Curitiba 2013

Classes abstratas nunca podemser instanciadas diretamente,é necessário uma classe filha

Page 58: (Re)pensando a OOP - PHPDay Curitiba 2013

Métodos abstratos devem serobrigatoriamente implementadospelas classes filhas (a não ser que

elas também sejam abstratas)

Page 59: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

abstract class Person{ private $name;

abstract public function talk($message);}

Page 60: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class CommonPerson extends Person{ public function talk($message) { echo $message; }}

Page 61: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Programmer extends Person{ public function talk($message) { echo sha1($message); }}

Page 62: (Re)pensando a OOP - PHPDay Curitiba 2013

Interfaces são estruturas que definem quais comportamentos os

objetos terão que implementar

Page 63: (Re)pensando a OOP - PHPDay Curitiba 2013

Interfaces são estruturas que definem quais comportamentos os

objetos terão que implementar

Sempre públicos

Page 64: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

interface PaymentMethod{ public function pay($value);}

Page 65: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class CreditCard implements PaymentMethod{ public function pay($value) { // paga usando cartão de crédito }}

Page 66: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Money implements PaymentMethod{ public function pay($value) { // paga usando dinheiro }}

Page 67: (Re)pensando a OOP - PHPDay Curitiba 2013

Polimorfismo é a possibilidade deum método ter comportamentos

diferentes

Possibilitado através da abstração

Page 68: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Item{ private $price;

public function sell($quantity, PaymentMethod $paymentMethod) { $paymentMethod->pay( $this->price * $quantity ); }}

Page 69: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Item{ private $price;

public function sell($quantity, PaymentMethod $paymentMethod) { $paymentMethod->pay( $this->price * $quantity ); }}

Page 70: (Re)pensando a OOP - PHPDay Curitiba 2013

Construtores são responsáveispor definir as regras de criação

de um objeto

Page 71: (Re)pensando a OOP - PHPDay Curitiba 2013

Destrutores são responsáveispor definir as regras de destruição

de um objeto

Page 72: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class PersonList{ private $list;

public function __construct() { $this->list = array(); } }

$list = new PersonList();

Page 73: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class PersonList{ private $list;

public function __destruct() { $this->list = null; } }

$list = new PersonList();$list = null;

Page 74: (Re)pensando a OOP - PHPDay Curitiba 2013

Erros comuns

Page 75: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Pessoa{ private $name;}

Mistura de idiomas

Page 76: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Pessoa{ private $nome;}

Devs felizes : )

Page 77: (Re)pensando a OOP - PHPDay Curitiba 2013

namespace Lcobucci\Examples;

class Passaro{ public function voa() { }}

class Aviao extends Passaro{}

Avião voa, mas não é um pássaro...

Page 78: (Re)pensando a OOP - PHPDay Curitiba 2013

O que posso estudar no futuro?

Page 79: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Page 80: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Page 81: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Single responsability

Gerenciamento de exceptions

Page 82: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Single responsability

Open/closed

Page 83: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Liskov substitution

Single responsability

Open/closed

Page 84: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Liskov substitution

Single responsability

Open/closed

Interface segragation

Page 85: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Liskov substitution

Single responsability

Open/closed

Interface segragation

Dependency inversion

Page 86: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Liskov substitution

Single responsability

Open/closed

Interface segragation

Dependency inversion

Design Patterns

Page 87: (Re)pensando a OOP - PHPDay Curitiba 2013

Orientação a objetos

Gerenciamento de exceptions

Liskov substitution

Single responsability

Open/closed

Interface segragation

Dependency inversion

Design Patterns

Domain driven design

Page 88: (Re)pensando a OOP - PHPDay Curitiba 2013

Luís Otávio Cobucci Oblonczyk

@lcobucci

http://about.me/lcobucci

Obrigado!

http://slideshare.net/lcobucci