SlideShare uma empresa Scribd logo
(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

Mais conteúdo relacionado

PDF
(Re)pensando a OOP - TDC 2012
PDF
(Re)pensando a OOP - PHPDay Curitiba 2013
PDF
03 - Orientação a objetos e classes em C# v1.0
PDF
Removendo o cheiro ruim do seu código - SoLiSC 2011
PDF
Objective-C e o dinamismo da linguagem
PDF
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
PDF
PHP 5.3 - Classes e Objetos
PDF
PHP: Programando com orientação a Objetos
(Re)pensando a OOP - TDC 2012
(Re)pensando a OOP - PHPDay Curitiba 2013
03 - Orientação a objetos e classes em C# v1.0
Removendo o cheiro ruim do seu código - SoLiSC 2011
Objective-C e o dinamismo da linguagem
Uma Abordagem Prática de Orientação a Objetos com PHP (FLISOL DF 2011)
PHP 5.3 - Classes e Objetos
PHP: Programando com orientação a Objetos

Mais procurados (20)

PDF
PHP Orientado a Objetos
PDF
Curso de OO com C# - Parte 01 - Orientação a objetos
PDF
Php5 e a orientação a objetos
PDF
T04_LM3: Javascript (2013-2014)
PPTX
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
ODP
5 oo-avançado
PDF
Java - Aula 2 - Orientado a Objetos
PPTX
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
PPTX
Construtores em Java
PDF
As novidades do PHP5 (2005)
PDF
Design Patterns com PHP
PDF
Java - Aula 3 - Construtores
ODP
Paradigma Orientado a Objeto
PDF
Desenvolvimento em .Net - Programaçao Orientada a Objectos
PDF
Minicurso Objective-C
PDF
Virada Tecnológica 2017
PPTX
PPTX
4. Introdução à linguagem de programação Java – Fundamentos de Programação
PDF
Implementando enterprise patterns com PHP
PPTX
Javascript OO
PHP Orientado a Objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
Php5 e a orientação a objetos
T04_LM3: Javascript (2013-2014)
13. Polimorfismo de subtipos; Análise, desenho e implementação – Fundamentos ...
5 oo-avançado
Java - Aula 2 - Orientado a Objetos
8. Classes e instâncias; Cadeias de caracteres – Fundamentos de Programação
Construtores em Java
As novidades do PHP5 (2005)
Design Patterns com PHP
Java - Aula 3 - Construtores
Paradigma Orientado a Objeto
Desenvolvimento em .Net - Programaçao Orientada a Objectos
Minicurso Objective-C
Virada Tecnológica 2017
4. Introdução à linguagem de programação Java – Fundamentos de Programação
Implementando enterprise patterns com PHP
Javascript OO
Anúncio

Semelhante a (Re)pensando a OOP - Flisol Gyn (20)

PDF
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
PDF
Dependency injection WTF? - PHPSC Conference 2012
PDF
Serversidephp pptx2-120418140114-phpapp01
PDF
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
KEY
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
PPT
aula1aula1aula1aula1aula1aula1-parte1.ppt
PPTX
Aula01-IntroducaoOO.pptx
PDF
Apostila ph pwamp_parte5
PPTX
Poo (1)
PDF
Apostila PhP com Wamp, 4a Parte
PPTX
Apresentação faef
PDF
JavaScript - A Linguagem
PPT
Apresentação faef
PDF
PHP, Mercado e Certificações
PPTX
Estrutura de dados
PDF
Minicurso de Lógica e Linguagem Java 6.0
PPTX
Módulo 9 - Introdução à Programação Orientada a Objectos
PPT
Desenvolvimento Agil Com Doctrine Orm
PDF
jQuery
Removendo o cheiro ruim do seu código - PHPSC Conf 2011
Dependency injection WTF? - PHPSC Conference 2012
Serversidephp pptx2-120418140114-phpapp01
Aula de fundamentos de Programação Orientada a Objeto na linguagem de program...
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o O...
aula1aula1aula1aula1aula1aula1-parte1.ppt
Aula01-IntroducaoOO.pptx
Apostila ph pwamp_parte5
Poo (1)
Apostila PhP com Wamp, 4a Parte
Apresentação faef
JavaScript - A Linguagem
Apresentação faef
PHP, Mercado e Certificações
Estrutura de dados
Minicurso de Lógica e Linguagem Java 6.0
Módulo 9 - Introdução à Programação Orientada a Objectos
Desenvolvimento Agil Com Doctrine Orm
jQuery
Anúncio

Último (11)

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

(Re)pensando a OOP - Flisol Gyn