PHP Orientado a Objeto

Desde que escrevi esse artigo, aprendi muito sobre programação orientada a objetos. Sugiro que não use esse post como referência. Se desejar, “JavaScript Orientado a Objetos” é uma fonte mais correta e atualizada sobre POO.

Eu sei que PHP é um tanto fora do contexto do blog, mas pra quem tiver a fim, fica aí a dica. E os conceitos servem também pra JavaScript Orientado a Objeto.

Que diabos é Programação Orientada a Objeto?

A Orientação a Objetos é uma maneira de programar que modela os processos de programação de uma maneira próxima a realidade, tratando cada componente de uma aplicação (script) como um objeto, com suas características e funcionalidades.

Nada impede que se programe dessa maneira na versão 4 do PHP, mas a versão 5 reescreveu o tratamento de objetos, permitindo mais recursos, performance e vantagens no uso deste tipo de programação.

Classes e Objetos

Classe é a estrutura fundamental para a criação de um objeto. Uma classe é um conjunto organizado de variáveis (propriedades ou atributos) e métodos (funções), que será utilizada como um novo tipo e instanciará um objeto. Uma classe tem por objetivo criar um objeto, que é uma representação desta classe em uma variável.

Vamos utilizar a seguinte classe:

<?php
// Classe dog
class dog {
	public $nome;
	public $humor;
	function setNome( $nome )
	{
		$this->nome = $nome;
	}
	function setHumor( $humor )
	{
		$this->humor = $humor;
	}
	function falar()
	{
		echo $this->nome . ' está ' . $this->humor . ' e disse: AUAU!';
	}
}
?>

Aí criamos uma classe que instanciará um objeto, no nosso caso, um cachorro. Ela tem duas propriedades ($nome e $humor), e três métodos (setNome($nome), setHumor($humor) e falar()). Agora, criando um objeto a partir dessa classe, vamos ver o que podemos fazer com ela:

$cachorro = new dog; // Instanciamos o objeto "cachorro"
$cachorro->setNome( "Rex" ); // Setamos $cachorro->nome;
$cachorro->setHumor( "feliz" ); // Setamos $cachorro->humor;
$cachorro->falar(); // Chamamos o método $cachorro->falar();

Como você deve ter visto, instanciamos um objeto utilizando o operador new. Para utilizarmos as propriedades e métodos da classe, devemos utilizar o operador ->, como vimos acima.

A variável $this

Na definição da classe, podemos usar a variável $this, que é o próprio objeto. Quando uma classe é instanciada em um objeto, e utilizamos a variável $this, essa variável se refere ao objeto que estamos utilizando.

Herança

Herança é uma forma de reutilização de código em que novas classes são criadas a partir de classes já existentes, herdando atributos e métodos, e incluindo outros que sejam de necessidade. Vamos extender nossa classe dog, suportando também raças.

class raca extends dog
{
	public $raca;
	function setRaca( $raca )
	{
		$this->raca = $raca;
	}
	function falar()
	{
		echo $this->nome . ' é da raça ' . $this->raca . ' e disse: AUAU!';
	}
}

A classe raca, acima, herdou todas as propriedades e métodos da sua classe pai, dog. Além disso, foi adicionado um método setRaca($raca), e o método falar() foi modificado. Usando sub-classes, é possível redefinir métodos e propriedades, e acrescentar outros, dependendo das necessidades.

Espero que tenha dado uma boa base. Logo entraremos em JavaScript também…

Posts Relacionados

Postado em setembro 27, 2006 às 22:27
Tags: ,

Comentários

  1. Jader Rubini

    Tenho me dedicado mais ao estudo de linguagens de programação, especialmente PHP e Javascript e devo te agradecer pelos ótimos posts. ;)

    Gostaria que me tirasse uma dúvida:
    Existem variáveis de escopo global e local. Sobre isso eu já estou por dentro.
    Mas a respeito do conceito de público e privado, veja se entendi bem: Uma propriedade pública é equivalente a uma variável global e uma propriedade privada é equivalente a uma variável local, porém propriedades referem-se ao contexto da classe onde foram declaradas, certo?


  2. Gabriel Portocarrero

    Jader,
    Métodos públicos podem ser acessados diretamente por classes ou usuários externos ao módulo.
    Já os com propridade privada são de uso exclusivo da classe em questão.

    Forte abraço!


  3. Rafael Marin

    Eu juro que tento, tento, me esforço, mas não entra na minha cabeça essa história de orientação a objetos.

    Cara, é muito estranho mesmo! Mas vou continuar tentando e tentando aqui. Abraço.


  4. wilian fiabani

    “Existem variáveis de escopo global e local. Sobre isso eu já estou por dentro.
    Mas a respeito do conceito de público e privado, veja se entendi bem: Uma propriedade pública é equivalente a uma variável global e uma propriedade privada é equivalente a uma variável local, porém propriedades referem-se ao contexto da classe onde foram declaradas, certo?”

    na verdade Jader, em OO variáveis globais equivalem aos atributos de uma classe, e veriáveis locais são as variáveis que fazer parte dos métodos da classe(que equivalem às funções). Private, protected e public são definições de acesso para visibilidade fora da classe, ou seja, você vai usa-los quando estiver fora da classe onde estas foram criadas.


  5. Igor Cemim

    To comentando atrasado :P…
    Muito interessante este post, me deu uma clareada nas idéias a respeito de OO (que pra mim é um bicho de 7 cabeças) :)

    Abraços


  6. Wryel

    Linguagens orientadas a objeto é a oitava maravilha do mundo, depois que você passa a enteder elas, fica impossível não querer usar mais a metodologia !


  7. JulioGreff

    @Wryel: é verdade, hoje já fica difícil trabalhar com sistemas exclusivamente estruturados. E quando se implementa MVC então, muuuuuito melhor.


  8. Diogo

    Há um erro na construção desse exemplo. É fácil saber qual é o erro.

    Basta fazer a pergunta: “O cachorro pertençe a uma raça ou é a raça que pertence a um cachorro?”

    Leia um bom livro de UML, que você terá mais facilidade para entender os conceitos de orientação a objeto.


  9. JulioGreff

    @Diogo: desenterrando o post… Agora vejo o erro claramente… Já fazem quase dois anos, e amadureci bastante nesse tempo. Mas obrigado por lembrar.


  10. alexandre

    me ajudou aclarear o conceito de OO.
    obrigado!


  11. Limbus

    Interessante, mas ainda estou acostumado com programação estruturada, que parece ser mais “suja”, o caso é que me ensinaram assim, até sei usar POO mas ainda não me senti tão confortável quanto o velho método estruturado.

    Falou.


  12. fabricio barili

    cara.. vlw ae..
    consegui entende…
    mto fera isso ae..
    flw


  13. Fabio Klevinskas Lopes

    Maninho, como o nosso amigo Barili citou: “CONSEGUI ENTENDER” … e pasme: a 7 anos em programação e eu nunca vi a necessidade REAL de usar OO… Fogo neh? O Java ajuda bastante para pegar esses esquemas. Mas a minha linguagem de coração vai ser sempre o bom e velho PHP… hehehe … ABRAÇOS !!!!!


  14. Djago

    Júlio,
    no spaghetti é utilizado muito o $this->Contacts->findAll()

    eu queria saber o seguinte:
    o Contacts nesse caso é o model, correto?
    findAll() é uma função dentro do model contacts?

    Como funciona essa questão de fazer varias referencias
    $this->nome->outronome

    Da uma explicada sobre isso. Please!!


  15. Hard

    Julio…
    So uma ideia,
    Que tal um Code Syntax Highlighting?
    =)


  16. Rafale

    Bacana, vai ser muito utiu, bem encontrei um link bem legal interessante para quem esta aprendendo php orientado, segue link:

    http://www.youtube.com/watch?v=fjqzRz6ClOQ


Trackbacks

  1. Tecnologia, Marketing e Design de Internet Novembro 26, 2008 @ 0:19

Deixe seu comentário