Orientação a Objetos – parte 1

Muitos falam, outros têm como utopia, outros entendem e outros nunca ouviram falar (na área de TI isso é bem improvável, mas não podemos ignorar tal possibilidade). A verdade é que muitos ‘endeusam’ um conceito até simples…
Orientação a Objetos é um conceito, um paradigma de programação. É interpretar no software entidades da vida real, ou problemas da vida real. Olhe para os lados, para a frente: tudo o que você vê, e não vê (tempo, por exemplo); tudo isso pode ser interpretado em software.
Provavelmente nesse momento você está à frente de um monitor… imagine o que é um monitor: suas características e suas funcionalidades. Se pensarmos que um monitor pode ser colorido (ou não), tem marca, modelo, taxa de atualização, tipo (lcd/crt/plasma), brilho, contraste, nível de cor, etc… são características, substantivos, adjetivos: atributos. Esse monitor pode ligar-se, desligar-se, ajustar o brilho, o contraste, o nível de cor… são ações, verbos, ou métodos. Já estamos chegando no conceito de classe

Classe: é a definição, em software OO, de todos os atributos e métodos que servirão para ser a base de um objeto. Pensando num exemplo mais ‘vivo’, imagine um software de controle de cães.Nesse software teremos vários cachorros, e o objetivo é fazê-los interagir entre si. Teremos cães.. uma matilha… se dissermos que nesse programa a entidade mais genérica é um Cachorro, podemos dizer que temos algo assim:

Cachorro:
a::nome
a::raca
a::cor
a::peso
a::saude
m::Cachorro
m::latir
m::rosnar
m::mijar
m::dormir

Isto seria uma maneira de descrever o que é e o que faz um Cachorro, dentro do contexto do nosso software. É um exemplo bem simples, e foge de um exemplo devidamente arquitetado, que nos próximos capítulos da nossa jornada será melhor esclarecido, mas para fins didáticos vai nos servir como uma luva.
onde coloquei ‘a::’ é um atributo e onde tem ‘m::’ é um método. Como atributos temos nome, raca, cor, peso, saude e como métodos Cachorro, latir, rosnar, mijar, dormir. O método ‘Cachorro’ pode parecer estranho, mas é fundamental na criação de entidades OO: esse seria nosso método Construtor; o Construtor é responsável pela inicialização do objeto criado; adotando nosso exemplo de Cães, seria como ‘parir’ um Cachorro P ; Quando inicializamos um objeto, preenchemos suas variáveis e podemos fazer alguns testes já, para que o objeto tenha consistência na sua informação.
Bom… e em PHP, como faríamos?

class Cachorro{
    $nome;
    $raca;
    $cor;
    $peso;
    $saude;
    function __construct($n,$r,$c,$p,$s=100){
        $this->nome = $n;
        $this->raca = $r;
        $this->cor = $c;
        $this->peso = floatval($p);
        $this->saude = intval($s);
    }
    function latir(){ /*código que fará o cachorro latir*/ }
    function rosnar($outroCachorro){ /*código que fará o cachorro rosnar para outro */ }
    function mijar($onde){ /*código que fará o cachorro urinar em algum lugar */ }
    function dormir(){ /*código que fará o cachorro dormir e recuperar saúde*/ }
}

Note que este código não declara uma ‘function’ (método) Cachorro, mas sim um __construct. No PHP5 foram acrescentados ao modelo OO alguns métodos mágicos, como é o exemplo de __construct; se usássemos Cachorro não apresentaria erro algum, por razões de compatibilidade com o PHP4 – que aliás apresentaria erro por outro motivo: não colocamos a palavra chave ‘var’ antes dos atributos, algo que não é obrigatório no PHP5. Em vez disso foi adicionada à linguagem noções de visibilidade, que serão estudadas melhor numa possível ‘parte 2′, junto com os conceitos de herança.

Bom… com esta classe declarada, podemos criar cães no nosso sistema:

/* Supomos que a classe cachorro esteja declarada, in-code ou por include/require */
$max = new Cachorro(’Max’,'Vira-lata’,'branco’,10);
//inicializo o Cachorro Max, que por sinal vive lá em casa :P
$tiro = new Cachorro(’Tirolez’,'Yorkshire’,'marrom’,6);
//inicializo o Cachorro Tirolez, que também habita por lá
$tiro->mijar(’Casa do Max’);//Tirolez apronta uma das suas na casinha do Max
$max->latir();//Max lógico, late…
$max->rosnar($tiro);//Max rosna ‘furioso’ para o Tirolez…
/* algum tempo depois, eles se cansam… */
$max->dormir();
$tiro->dormir();

Conclusão: $max e $tiro são instâncias da classe Cachorro, ou seja… OBJETOS. Lembra do que falei dos monitores lá em cima? esse que está na sua frente é um objeto da classe Monitor, por exemplo. Classe é o ‘conceito’ do que pode vir a ser um objeto!

Bom, essa é a primeira parte dessa série… tentei fazer uma abordagem diferente, até porque artigos sobre isso você encontra aos milhares… No nosso próximo artigo veremos outro conceito importante em OO: herança.

Até lá

This entry was posted in OOP by Duodraco. Bookmark the permalink.

About Duodraco

Sou Anderson Casimiro, também conhecido como Duodraco. Trabalho com Desenvolvimento Web desde 2002; desde então tive a oportunidade de trabalhar com grandes amigos e aprender bastante. Como já se deve ter percebido meu foco de atuação é PHP, embora eu brinque com Java e C++/Qt nas horas vagas, além do bom e velho Javascript, e dos sempre amigos Mysql, Oracle, sqLite e Postgres. Sou usuário Linux / OpenSuse / KDE apesar de já ter utilizado o Janelas e o OS X. Bom, mas não falemos de passado. Sou um dos coordenadores do PHPSP, junto ao Augusto Pascutti e Rafael Dohms. Atuo como Analista, Desenvolvedor e Scrum Master na Arizona. Sou Engenheiro Certificado Zend (ZCE – Zend Certified Engineer – 2007), Certified Scrum Master e entusiasta do uso de PHP, Linux, KDE e Software Livre em geral.
  • http://www.crearemultimidia.com.br Rafael Arantes

    Tenho um sério problema em entender OO, trabalho com o PHP estruturado a 2 anos e não consigo migrar para o OO. Sua explicação sobre OO foi uma das melhores, vou acompanhar os próximos e assim ver se desvendo este mistério OO.

  • Aldo Nakamura

    Olá Anderson! Tudo bem?
    Eu, assim como o Rafael trabalho com PHP estruturado. Sou programador desde 1984. Um dinossauro! hahahaha… Já li diversos artigos e livros sobre programação OO mas ainda não consegui aplicar isto aos sistemas que desenvolvo atualmente. Isto torna-se crítico pra mim justamente num momento de implementação ou manutenção de software. Passei muito breve pelo seu blog, mas vou ler a matéria com mais calma de noite! Abraços e parabéns pela iniciativa! Sou assinante lá do PHP Grupos! Vc já deve ter visto minhas msg por lá! Até mais! Aldo

  • Pingback: Orientação a Objetos com PHP5

  • thiago

    Muito bom seu artigo ja li muitos outros mas o seu e de se passar o link com gosto

  • Pingback: Orientação a Objetos – parte 1 « DUODRACO