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á

3 comentários até agora

  1. Rafael Arantes on 19.07.2007

    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.

  2. Aldo Nakamura on 07.08.2007

    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

  3. [...] Orientação a Objetos parte 1 [...]

Leave a reply