Download - (Re)pensando a OOP - TDC 2012

Transcript
Page 1: (Re)pensando a OOP - TDC 2012

(Re)Pensando aOrientação a Objetos

(Re)Pensando aOrientação a Objetos

Luís Otávio Cobucci Oblonczyk

25 de Agosto de 2012

Page 2: (Re)pensando a OOP - TDC 2012

Luís Otávio Cobucci OblonczykLuís Otávio Cobucci Oblonczyk

● Evangelista (doido por) PHP● Desenvolvedor na Softnex Tecnologia (SC)● Membro do PHPSC● ZCE PHP 5.3● Perfeccionista ao extremo =P

@lcobucci

http://about.me/lcobucci

Page 3: (Re)pensando a OOP - TDC 2012

Orientação a Objetos muda nossa vida?

Page 4: (Re)pensando a OOP - TDC 2012

O que é OOP?O que é OOP?

“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%C3%A7%C3%A3o_a_objetos

Page 5: (Re)pensando a OOP - TDC 2012

O que é OOP?O que é OOP?

● Paradigma = Padrão a ser seguido; Pressuposto filosófico

● Busca tornar o mundo das linguagens que os computadores entendem mais próximo da realidade

Page 6: (Re)pensando a OOP - TDC 2012

A mudança principal é como pensamos!

Page 7: (Re)pensando a OOP - TDC 2012

Pequeno exercício mental...

Page 8: (Re)pensando a OOP - TDC 2012

História da OOPHistória da OOP

● Os termos “objetos” e “instâncias” foram utilizados por volta da década de 60

● O conceito formal foi introduzido (também nos anos 60) na linguagem de programação Simula 67

● Na década de 70 foi lançada, na Xerox PARC, a linguagem Smalltalk, que teve influências de conceitos da Simula 67

Page 9: (Re)pensando a OOP - TDC 2012

Linguagens e OOPLinguagens e OOP

● Funcionalidades OOP adicionadas como extensão

● Principalmente OOP

● Puramente OOP

Page 10: (Re)pensando a OOP - TDC 2012

Porque repensar a OOP?Porque repensar a OOP?

Page 11: (Re)pensando a OOP - TDC 2012

Porque repensar a OOP?Porque repensar a OOP?

Não, eu não sou pago porcolocar tirinhas do vida deprogramador nas minhaspalestas.

Bem que podia né? =P

Page 12: (Re)pensando a OOP - TDC 2012

Pontos negativos da OOPPontos negativos da OOP

● Aprendizado mais complexo (deve-se aprender o conceito e a sintaxe para cada linguagem)

● Maior utilização de recursos do servidor (quando comparado à outros paradigmas que o PHP suporta)

Page 13: (Re)pensando a OOP - TDC 2012

Pontos positivos da OOPPontos positivos da OOP

● Reutilização de código● Extensibilidade● Código facilmente testável (depende do

desenvolvedor, claro =P)● Desenvolvimento mais próximo do negócio

Page 14: (Re)pensando a OOP - TDC 2012

Conceitos básicos da OOP

Page 15: (Re)pensando a OOP - TDC 2012

ObjetoObjeto

● Representação computacional de algo concreto e existente no mundo real

● Possui características (atributos) e comportamentos (métodos)

Page 16: (Re)pensando a OOP - TDC 2012

Ciclo de vida de um objetoCiclo de vida de um objeto

Page 17: (Re)pensando a OOP - TDC 2012

ClasseClasse

● Descrição detalhada de um objeto e suas relações

● Segue as regras sintáticas da linguagem de programação para definir os atributos e comportamentos

Page 18: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Person

{ private $name;

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

Page 19: (Re)pensando a OOP - TDC 2012

InstânciaInstância

● Concretização da existência de um objeto; criação do objeto, seguindo as regras definidas na classe (previamente construída)

Page 20: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Person

{ private $name;

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

$luis = new Person();

Page 21: (Re)pensando a OOP - TDC 2012

VisibilidadeVisibilidade

● Existem coisas que nem todos precisam saber/ver...

● Define a acessibilidade dos dados (métodos, atributos) do objeto

● Tipos:● public● protected● private

Page 22: (Re)pensando a OOP - TDC 2012

HerançaHerança

● Aproveitamento de métodos e atributos entre objetos de um mesmo contexto

Page 23: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Person

{ private $name;

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

class Programmer extends Person

{}

Page 24: (Re)pensando a OOP - TDC 2012

HerançaHerança

● Permite a alteração do comportamento dos métodos, caso necessário

Page 25: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Person

{ private $name;

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

class Programmer extends Person

{ public function talk($message) { parent::talk(md5($message)); }}

Page 26: (Re)pensando a OOP - TDC 2012

AbstraçãoAbstração

● Definição “parcial” dos comportamentos dos objetos

● É definido que o comportamento existe, mas não é implementado, ou seja não tem necessidade da classe pai saber como o objeto age naquela ação

Page 27: (Re)pensando a OOP - TDC 2012

AbstraçãoAbstração

● Podem ser definidas classes abstratas, métodos abstratos e interfaces

● Classes abstratas não PODEM nunca ser instanciadas diretamente, é necessária uma classe filha

● Métodos abstratos são aqueles que devem ser implementados nas classes filhas

Page 28: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

abstract class Person

{ private $name;

public abstract function talk($message);}

class Professor extends Person

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

class Programmer extends Person

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

Page 29: (Re)pensando a OOP - TDC 2012

AbstraçãoAbstração

● Interfaces são estruturas que possuem apenas a definição dos comportamentos dos objetos

● Todos os comportamentos definidos em uma interface são SEMPRE acessíveis publicamente

● São utilizadas quando o contexto dos objetos são diferentes, porém compartilham comportamentos

Page 30: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

interface Flyer

{ public function fly();}

class Bird implements Flyer

{ public function fly() { }}

class Airplane implements Flyer

{ public function fly() { }}

Page 31: (Re)pensando a OOP - TDC 2012

PolimorfismoPolimorfismo

● A palavra polimorfismo tem origem grega, significa “muitas formas”

● Dentro da OOP, é a capacidade de um método agir de formas diferentes

● É possibilitado pela existência da abstração (herança ou implementação de interface), onde as classes implementam um mesmo método abstrato de formas diferentes

Page 32: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

interface PaymentMethod

{ public function pay($ammount);}

class CreditCard implements PaymentMethod

{ public function pay($ammount) { }}

class Money implements PaymentMethod

{ public function pay($ammount) { }}

Page 33: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Item

{ private $price;

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

Page 34: (Re)pensando a OOP - TDC 2012

Construtor e DestrutorConstrutor e Destrutor

● Métodos que inicializam e destroem o estado do objeto

Page 35: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class PersonList

{ private $list;

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

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

Page 36: (Re)pensando a OOP - TDC 2012

Design PatternsDesign Patterns

Design patterns são soluções para necessidades específicas e devem ser utilizados quando necessário. Exemplos:

● Adapter● Façade● Factory● Proxy

● Strategy● Decorator● Singleton

Page 37: (Re)pensando a OOP - TDC 2012

Design PatternsDesign Patterns

Design patterns são soluções para necessidades específicas e devem ser utilizados quando necessário. Exemplos:

● Adapter● Façade● Factory● Proxy

● Strategy● Decorator● Singleton (você não vai precisar)

Page 38: (Re)pensando a OOP - TDC 2012

Prepare-se, cenas fortes!

Page 39: (Re)pensando a OOP - TDC 2012

Prepare-se, cenas fortes!Prepare-se, cenas fortes!

Problemas comuns...

Page 40: (Re)pensando a OOP - TDC 2012

Idioma do códigoIdioma do código

● Mistura de idiomas dentro do código fonte● Tradução dos nomes de forma equivocada

(esquece-se que, principalmente, os métodos são ordens)

Page 41: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Pessoa

{ private $name; }

Page 42: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

$luis = new Pessoa();$rex = new Cachorro();$graveto = new Galho();

$luis->jogar($graveto);$rex->pegar($graveto);

Isso não soa estranho??

Page 43: (Re)pensando a OOP - TDC 2012

Herança sem sentidoHerança sem sentido

● Herança não é apenas compartilhamento de comportamentos!

● O contexto das classes filhas não podem ser diferentes da classe pai

Page 44: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class Passaro{ public function voa() { }}

class Aviao extends Passaro{}

Avião também voa, mas nãoé um pássaro!!!

Page 45: (Re)pensando a OOP - TDC 2012

Causa raizCausa raiz

● O maior problema do desenvolvimento por si só é a falta de planejamento, na orientação a objetos essa falta pode causar problemas muito sérios, tornando a manutenção do software extramente exaustiva e trabalhosa.

Page 46: (Re)pensando a OOP - TDC 2012

Implementação e comparação...

Page 47: (Re)pensando a OOP - TDC 2012

Transferência entre contas bancáriasTransferência entre contas bancárias● O saldo da conta da Sílvia possui R$ 200,00● O saldo da conta da Maria possui R$ 30,00● Maria está com dificuldades financeiras, e pede

à Sílvia um empréstimo de R$ 100,00

Page 48: (Re)pensando a OOP - TDC 2012

<?php$saldoContaSilvia = 200;$saldoContaMaria = 30;

$saldoContaSilvia -= 100;$saldoContaMaria += 100;

Page 49: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

class ContaBancaria{ public $saldo;

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

public function transfere( ContaBancaria $destino, $valor ) { $this->saldo -= $valor; $destino->saldo += $valor; }}

Page 50: (Re)pensando a OOP - TDC 2012

<?phpnamespace Lcobucci\Examples;

$contaSilvia = new ContaBancaria(200);$contaMaria = new ContaBancaria(30);

$contaSilvia->transfere($contaMaria, 100);

Page 51: (Re)pensando a OOP - TDC 2012

Mais informações? Onde??Mais informações? Onde??

● Head first Object-Oriented Analysis & Desinghttp://www.headfirstlabs.com/books/hfooad/

● Programando com Orientação a Objetoshttp://www.adianti.com.br/phpoo

● Domain Driven Designhttp://domaindrivendesign.org/books/evans_2003

● Clean Code: A Handbook of Agile Software Craftsmanshiphttp://goo.gl/Qyhmq

Page 52: (Re)pensando a OOP - TDC 2012

Obrigado!Obrigado!

Eu por aí: http://about.me/lcobucci

Slides: http://slideshare.net/lcobucci