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á

SimpleXML

XML é uma linguagem de notação, baseada em tags, para mantermos informação de maneira uniforme, flexível, organizada e legível. Simples e descomplicada é o formato ideal para troca de informação entre diferentes sistemas. Exemplos de uso: webservices, RSS, Podcasts, Configuração de sistemas, arquivos de troca de informação simples, etc…

SimpleXML é uma funcionalidade embutida no PHP5, que visa trabalhar, de maneira simples, XML no PHP. Trabalhando numa estrutura de ojetos, é bem fácil trabalhar com ele:
Para começar vamos a um pouco de código:

$sxe = simplexml_load_file(’teste.xml’);

Supondo que teste.xml Seja um xml válido, $sxe receberá uma instância de SimpleXMLElement, referente ao nó raiz do xml; caso contrario receberá false.

Você pode adionar elementos com addChild, e attributos com addAttribute, como a seguir:

$ne = $sxe->addChild(’novo_elemento’);
$ne->addAttribute(’novo_atributo’,’valor_do_novo_atributo’);

Note que addChild retorna uma referência ao novo elemento criado.

A informação no SimpleXML é editada facilmente:

$sxe->elemento[0]->descendente = ‘dado textual do descendente’;
$sxe->elemento[0][’atributo_do_elemento’] = ‘novo valor do atributo’;

Os atributos de SimpleXMLElement são os elementos descendentes da tag raiz do xml, respeitando sua hierarquia. Esses elementos podem ser acessados via Array de índíce numérico nos atributos do objeto. Agora falando dos atributos do xml: estes são aceesados por arrays de índice textual.
Para exportar as edições feitas para o xml, usa-se o método asXML:

$sxe->asXML();

Simples não? O SimpleXML ainda permite importação de Elementos DOM do php, além de pesquisas com XPath. Só peca por não conte métodos de remoção de elementos.
SimpleXML foi tema de minha apresentação na última PHP Conference Brasil ‘06. Você pode ver a apresentação em Apresentação SimpleXML – PHPConf ‘07

__autoload()::Santa função

Quem trabalha com PHP sabe o parto que é ficar incluindo os arquivos com as classes da sua aplicação, que se não estão bem estruturadas em pastas/diretórios/pacotes torna-se tudo uma bagunça. Se você trabalha centralizando as requisições em um arquivo para ai rodar os diferentes scripts dos seu projeto e não quer ficar incluindo todas os arquivos de classes em cada programa que faz eis a solução: __autoload(). Segue a descrição do PHP.net para esta belezura:

Muitos desenvolvedores ao desenvolver aplicações orientadas a objeto criam um arquivo PHP para cada definição de classe. Um dos maiores contratempos é ter de escrever uma longa lista de includes no início de cada script(um include para cada classe necessária).

Com PHP 5 isso não é mais necessário. Você pode definir uma função __autoload que é automaticamente chamada no caso de você tentar usar uma classe que ainda não foi definida. Ao chamar essa função o ’scripting engine’ tem uma última chance para carregar a classe antes que o PHP falhe com erro.

Digamos que você tenha um arquivo “index.php”. Onde voce faria:(lógico, supondo que suas classes estejam em “/classes/”)

<?
include_once(”classes/User.class.php”);
include_once(”classes/Store.class.php”);
include_once(”classes/Book.class.php”);
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

Com o autoload você faz assim:

<?
function __autoload($class_name) {
require_once(”classes/”. $class_name . “.class.php”;
}
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

E todos seus objetos serão instanciados como se com o include/require no script.

Vamos além… sou um cara muito preguiçoso, e tenho classes em 3 pastas: “domain”,”engine” e “util”:

<?
$sep = PATH_SEPARATOR
set_include_path(get_include_path() . “$sep./domain/$sep./engine/$sep./util/”);
function __autoload($className){
include($className . “class.php”);
}
$oUser = new User();
$oStore = new Store();
$oBook = new Book();
?>

Viu como é bom ser preguiçoso? até a linguagem apóia! Lógico que é muito bom ter um controle de “o que é incluído quando”, mas às vezes temos que utilizar certas coisas do tipo pra facilitar nossa vida.

PHP – Começando

PHP – História: lá pros idos de 1995, Rasmus Lerdorf criou um conjunto de funcionalidades para seus projetos que chamou de Personal Home Pages. A coisa evoluiu, chegando ao “PHP2″.
Algum tempo depois Zeev Zuraski e Andi Gutmans abraçaram o projeto: criaram uma empresa para cuidar profissionamente do PHP, a Zend, e refizeram a base da linguagem, a agora Zend Engine; o significado de PHP também mudou: PHP Hypertext Preprocessor. Lançaram o PHP3, que rapidamente estourou como linguagem de programação para a web. Isto evoului e chegamos ao PHP4 com significativas mudanças na maneira como o PHP trabalha com a Zend Engine.
Em 2005 foi lançada a versão 5 da linguagem, que trouxe a Orientação a Objetos como maior destaque na evolução. Hoje o PHP é a linguagem mais utilizada na internet, com grandes comunidades e “seguidores”, inclusive este que vos escreve.

Bom, o que precisamos então para utilizar o PHP como linguagem de programação? vamos à receita de bolo:

  • Servidor Web
  • PHP
  • Browser

Só explicando os itens: Servidor Web Software que irá “servir” arquivos sob requisições do protocolo de internet (HTTP); dentre os mais comuns estão o Apache, IIS, Xitami, etc. O PHP será executado no servidor assim que este receber uma requisição, tratando-a e devolvendo ao navegador. O procedimento de instalação não é o foco deste artigo, porém não é nada do outro mundo.

Supondo que você já tenha seu servidor web rodando, você terá uma pasta que será a Raiz, ou seja, de onde o servidor irá começar a buscar arquivos (algo como o “C:/” para o windows). Esta pasta no windows pode ser c:\inetpub\wwwroot\ para o IIS ou c:\htdocs no caso do apache; no linux as distribuições baseadas em Debian geralmente criam por padrão a \var\www para este propósito
Para se criar um pequeno programa em PHP, crie um arquivo novo com o nome de “artigo.php” nesta pasta raiz. Abra-o e insira o seguinte código:

<?
echo “Olha só, escrevi no navegador”;
?>

Abra seu navegador, entre no endereço “http://localhost/artigo.php” [não esqueça o http://] e voilá

Concluindo: este artigo foi só uma apresentação rápida sobre o PHP, e como rodar um script simples. Em outro artigo explico como se começa a programar em PHP. Duvidas? a parte de comentários está ai pra isso

« Página anterior