SlideShare une entreprise Scribd logo
1  sur  48
Télécharger pour lire hors ligne
(Re)Pensando a
Orientação a Objetos
(Re)Pensando a
Orientação a Objetos
Luís Otávio Cobucci Oblonczyk
28 de Abril de 2012
Goiânia
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
Orientação a Objetos muda nossa vida?
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
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
A mudança principal é como pensamos!
Pequeno exercício mental...
História da OOPHistória da OOP
●
Os termos “objetos” e “instancias” foram
utilizados por volta dia 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 influencias de
conceitos da Simula 67
Linguagens e OOPLinguagens e OOP
●
Funcionalidades OOP adicionadas como
extensão
●
Principalmente OOP
●
Puramente OOP
Porque repensar a OOP?Porque repensar a OOP?
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 memória
Pontos positivos da OOPPontos positivos da OOP
●
Reutilização de código
●
Extensibilidade
●
Desenvolvimento mais próximo do negócio
(domínio)
Conceitos básicos da OOP
ObjetoObjeto
●
Representação computacional de algo concreto
e existente no mundo real
●
Possui características (atributos) e
comportamentos (métodos)
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
<?php
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
InstânciaInstância
●
Concretização da existência de um objeto;
criação do objeto, seguindo as regras definidas
na classe (previamente construída)
<?php
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
$luis = new Person();
VisibilidadeVisibilidade
●
Existem coisas que nem todos precisam
saber/ver...
●
Define a acessibilidade dos dados (métodos,
atributos) do objeto
●
Tipos:
●
public
●
protected
●
private
HerançaHerança
●
Aproveitamento de métodos e atributos entre
objetos de um mesmo contexto
<?php
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
class Programmer extends Person
{
}
HerançaHerança
●
Permite a alteração do comportamento dos
métodos, caso necessário
<?php
namespace LcobucciExamples;
class Person
{
private $name;
public function talk($message)
{
echo $message;
}
}
class Programmer extends Person
{
public function talk($message)
{
parent::talk(md5($message));
}
}
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
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
<?php
namespace LcobucciExamples;
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);
}
}
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
<?php
namespace LcobucciExamples;
interface Flyer
{
public function fly();
}
class Bird implements Flyer
{
public function fly()
{
}
}
class Airplane implements Flyer
{
public function fly()
{
}
}
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
<?php
namespace LcobucciExamples;
interface PaymentMethod
{
public function pay($ammount);
}
class CreditCard implements PaymentMethod
{
public function pay($ammount)
{
}
}
class Money implements PaymentMethod
{
public function pay($ammount)
{
}
}
<?php
namespace LcobucciExamples;
class Item
{
private $price;
public function sell(
$quantity,
PaymentMethod $paymentMethod
) {
$paymentMethod->pay(
$this->price * $quantity
);
}
}
Construtor e DestrutorConstrutor e Destrutor
●
Métodos que inicializam e destroem o estado
do objeto
<?php
namespace LcobucciExamples;
class PersonList
{
private $list;
public function __construct()
{
$this->list = array();
}
public function __destruct()
{
$this->list = null;
}
}
Prepare-se, cenas fortes!
Prepare-se, cenas fortes!Prepare-se, cenas fortes!
Problemas comuns...
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)
<?php
namespace LcobucciExamples;
class Pessoa
{
private $name;
}
<?php
namespace LcobucciExamples;
$luis = new Pessoa();
$rex = new Cachorro();
$graveto = new Galho();
$luis->jogar($graveto);
$rex->pegar($graveto);
Isso não soa estranho??
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
<?php
namespace LcobucciExamples;
class Passaro
{
public function voa()
{
}
}
class Aviao extends Passaro
{
}
Avião também voa, mas não
é um pássaro!!!
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
bem trabalhosa.
Implementação e comparação...
Transferência entre contas
bancárias
Transferê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
<?php
$saldoContaSilvia = 200;
$saldoContaMaria = 30;
$saldoContaSilvia -= 100;
$saldoContaMaria += 100;
<?php
namespace LcobucciExamples;
class ContaBancaria
{
public $saldo;
public function __construct($saldo)
{
$this->saldo = $saldo;
}
public function transfere(
ContaBancaria $destino,
$valor
) {
$this->saldo -= $valor;
$destino->saldo += $valor;
}
}
<?php
namespace LcobucciExamples;
$contaSilvia = new ContaBancaria(200);
$contaMaria = new ContaBancaria(30);
$contaSilvia->transfere($contaMaria, 100);
Mais informações? Onde??Mais informações? Onde??
●
Head first Object-Oriented Analysis & Desing
http://www.headfirstlabs.com/books/hfooad/
●
Programando com Orientação a Objetos
http://www.adianti.com.br/phpoo
●
Domain Driven Design
http://domaindrivendesign.org/books/evans_2003
●
Clean Code: A Handbook of Agile Software
Craftsmanship
http://goo.gl/Qyhmq
Obrigado!Obrigado!
Eu por aí: http://about.me/lcobucci
Slides: http://slideshare.net/lcobucci

Contenu connexe

Tendances

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 objetosLeonardo Melo Santos
 
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 objetosxbacon
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)Carlos Santos
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...Manuel Menezes de Sequeira
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em JavaEderson Lima
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)Pablo Dall'Oglio
 
Java - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresJava - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresMoises Omena
 
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 ObjectosVitor Silva
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-CSaulo Arruda
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de ProgramaçãoManuel Menezes de Sequeira
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHPPablo Dall'Oglio
 

Tendances (20)

PHP Orientado a Objetos
PHP Orientado a ObjetosPHP Orientado a Objetos
PHP Orientado a 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
 
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
 
T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)T04_LM3: Javascript (2013-2014)
T04_LM3: Javascript (2013-2014)
 
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
 
5 oo-avançado
5 oo-avançado5 oo-avançado
5 oo-avançado
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
 
Construtores em Java
Construtores em JavaConstrutores em Java
Construtores em Java
 
As novidades do PHP5 (2005)
As novidades do PHP5 (2005)As novidades do PHP5 (2005)
As novidades do PHP5 (2005)
 
Design Patterns com PHP
Design Patterns com PHPDesign Patterns com PHP
Design Patterns com PHP
 
Java - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresJava - Aula 3 - Construtores
Java - Aula 3 - Construtores
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
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
 
Minicurso Objective-C
Minicurso Objective-CMinicurso Objective-C
Minicurso Objective-C
 
Virada Tecnológica 2017
Virada Tecnológica 2017Virada Tecnológica 2017
Virada Tecnológica 2017
 
Solid
SolidSolid
Solid
 
4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação4. Introdução à linguagem de programação Java – Fundamentos de Programação
4. Introdução à linguagem de programação Java – Fundamentos de Programação
 
Implementando enterprise patterns com PHP
Implementando enterprise patterns com PHPImplementando enterprise patterns com PHP
Implementando enterprise patterns com PHP
 
Javascript OO
Javascript OOJavascript OO
Javascript OO
 

Similaire à (Re)pensando a OOP - Flisol Gyn

Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Luís Cobucci
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Luís Cobucci
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01joaocarlobarros
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Ricardo Valeriano
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Ilton Barbosa
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteIlton Barbosa
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
 
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 Luis Ferreira
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 

Similaire à (Re)pensando a OOP - Flisol Gyn (20)

Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
 
Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012Dependency injection WTF? - PHPSC Conference 2012
Dependency injection WTF? - PHPSC Conference 2012
 
Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01Serversidephp pptx2-120418140114-phpapp01
Serversidephp pptx2-120418140114-phpapp01
 
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
 
Aula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptxAula01-IntroducaoOO.pptx
Aula01-IntroducaoOO.pptx
 
Apostila ph pwamp_parte5
Apostila ph pwamp_parte5Apostila ph pwamp_parte5
Apostila ph pwamp_parte5
 
Java7
Java7Java7
Java7
 
Poo (1)
Poo (1)Poo (1)
Poo (1)
 
Apostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a ParteApostila PhP com Wamp, 4a Parte
Apostila PhP com Wamp, 4a Parte
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
JavaScript - A Linguagem
JavaScript - A LinguagemJavaScript - A Linguagem
JavaScript - A Linguagem
 
Apresentação faef
Apresentação faefApresentação faef
Apresentação faef
 
PHP, Mercado e Certificações
PHP, Mercado e CertificaçõesPHP, Mercado e Certificações
PHP, Mercado e Certificações
 
Estrutura de dados
Estrutura de dadosEstrutura de dados
Estrutura de dados
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
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
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
jQuery
jQueryjQuery
jQuery
 
jQuery
jQueryjQuery
jQuery
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 

(Re)pensando a OOP - Flisol Gyn