quarta-feira, 2 de fevereiro de 2011

POO - Programação Orientada a Objetos - Parte 1 - Constantes e Variáveis Compostas

Foi uma semana para fazer esse novo post. Estava lá na minha, continuando meu estudo de programação. Depois de ter escrito sobre variáveis e constantes simples, passei para as compostas. E lá estava algo chamado "Object".

Foram 5 dias de estudos preparando a parte 1 do post.



A Programação Orientada a Objetos tem como base os objetos e suas orientações. Entende-se como Objetos a mesma coisa de que entendemos como objetos no mundo real. Criamos um objeto, damos a ele uma Classe, ou tipo, uma estrutura e métodos (ações, utilidade).
Essa poderosa variável deve ser encarada como um estudo a parte, pois seus benefícios são enormes.

Antes de se programar objetos a forma de programação era chamada de programação estruturada. Os programadores pensavam nas ações e nos ciclos de ações que um programa tinha que ter e programavam todas essas ações e ciclos. Em grosso modo, imagine só você começando a criar um programa a partir de um Bloco de Notas em branco e só parar quando o programa estiver pronto.

Então através dos anos foi criada a orientação a objetos o que facilitou a vida de todo mundo, já que qualquer alteração no código pode ser feita diretamente em um objeto sem ter que alterar outro e assim outro e outro tendo que alterar todo o código.
Além disso, um objeto que faz uma AÇÃO em específico, pode ser reutilizado para vários fins, o que não acontecia antes, tendo o programador que repetir o código.

Esse tipo de programação tem a grande vantagem de se separar objetos que tem a mesma estrutura, mesmas ações em classes (tipos).

Classes

Classe, atributos e métodos é do que é composto um objeto.


São as Classes que determinam a estrutura e o comportamento do objeto (os nomes utilizados são atributos e métodos, respectivamente). Pode-se imaginar uma Classe como o coletivo de Objeto, pois muitos objetos tem os mesmos atributos (estrutura) e os mesmos métodos (comportamento, ação). Portanto uma classe é a descrição de um conjunto de objetos que possuem os mesmos atributos, operação e semântica.

O Objeto está para Classe assim como Cachorro está para Matilha. Todos os Cachorros da Matilha tem certos atributos e fazem ações em comum, por exemplo, eles tem coloração de pelo, timbre_do_uivado, eles fazem as seguintes ações latir(), comer(), andar(), correr(), etc(). Mas os objetos cachorros podem correr() para lados diferentes um do outro, ter cor de pelo diferente, etc.

Exemplos de classes e de como uma classe herda a estrutura de sua classe pai.


<?php

/**
* @author Andino Só Soares
* @copyright 2011
*/

class cliente{

}

Atributos

Os objetos tem uma estrutura chamada de atributos, nele consta informações relevantes sobre o objeto. Por exemplo, na classe jogador, podemos ter o atributo "Time" ou "Numero_da_camisa". Perceba que são informações e somente informações relevantes para o bom funcionamento dos objetos. Estes atributos serão também usados nos métodos da classe, para alguma ação específica.

Métodos

Os métodos são as ações que um objeto possui. Por exemplo, a classe professor tem um método (função ou ação) chamado Corrige_prova(). Cada classe pode possuir métodos diferentes. Mas todas as classes possuem os seguintes métodos:


Construtores
Um construtor alicerça a base em que os objetos serão construídos, é como um escopo para os objetos. Imagine um molde em que todos os objetos da classe tem que se encaixar, é o construtor. Todo construtor começa, no PHP, com "function __construct(){}". Vejamos um construtor, se baseando em um objeto com os seguintes atributos $nome e $numero:


function __construct($nome,$numero){
            $this->nome=$nome;
            $this->numero=$numero;
}

//Lê-se acima: os objetos dessa classe devem ser
// construídos com essa base.

/**  
 * __construtor será o nome da classe e entre parênteses 
 * a sequencia das variáveis criadas anteriormente, ou seja,
 * no momento da criação do objeto quais valores serão 
 * definidos. 1° $nome e 2° $numero.
*/

// $this refere-se que o dado acessado será do próprio objeto.

/** 
 * Então dá-se o valor de cada variável. Observe que esse
 * não é o valor de um objeto em especial, mas sim um valor
 * genérico, o nome de todos os valores da variável.
*/


Um construtor, constrói o escopo (sketch, esboço) que cada objeto da classe irá usar.
Cada objeto tem sua estrutura e eles precisam de dados para funcionar, os construtores se encarregam de resumir as ações de iniciação dos objetos recebendo dados como se desejar. Quando o construtor não é explicitamente declarado o compilador insere o construtor default, isto é, um construtor sem parâmetros e com o corpo vazio.

Destrutor: O destrutor finaliza o construtor deletando os dados alocados. Os destrutores são funções que se encarregam de realizar as tarefas que se necessita executar quando um objeto deixa de existir. Quando um objeto já não está referenciado por nenhuma variável, deixa de ter sentido que esteja armazenado na memória, portanto, o objeto deve ser destruído para liberar seu espaço. No momento de sua destruição, a função se chama destrutor, que pode realizar as tarefas que o programador estime oportuno realizar. A criação do destrutor é opcional. Somente devemos criá-lo, se desejarmos fazer alguma coisa quando um objeto se elimine da memória. 
Existe também os destrutores que eliminam os dados alocados pelo objetos

Aqui criamos mais métodos para exemplificar:

function receber_numero(){
          return $this->numero;
}

function receber_nome(){
          return $this->nome;
}

//Lê-se acima: os métodos (ações) de uma Classe
// chamada cliente.

/**
 * 1° Método receber_numero. Return é um comando que serve
 * para retornar o valor obtido e também serve para finalizar
 * a função. $this diz que o valor será do próprio objeto e
 * então qual o valor a função vai mostrar, que é o valor "numero".
 * Lembre-se que "numero" é o valor da variável que declaramos lá
 * em cima, a variável "$numero".
*/

/** 
 * Veja como as coisas se encaixam, lá em cima dissemos
 * que "numero" era igual a "$numero" e antes disso em
 * "function __construct($nome,$numero)" ao declarar o
 * construtor dissemos entre parênteses como seria lido
 * o objeto, ou seja que o primeiro valor entre parênteses
 * seria "$nome" e o segundo "$numero", veremos adiante
 * então dois objetos sendo criados.
*/

/** 
 * OBS.: Esta programação é APENAS para demonstrar como
 * funciona os códigos e o que vimos até aqui. Mas a
 * Teoria da Programação Orientada a Objetos diz que
 * devemos programar objetos como no MUNDO REAL. Isso
 * significa que não será a Classe cliente que irá fazer
 * a ação "receber_numero" ou "receber_nome", porque no
 * MUNDO REAL não é o Cliente que faz isso.
*/

Objeto

O objeto é realmente um objeto de um tipo (chamado classe). Sua estrutura é de fácil entendimento:
  1. Classe (seu coletivo, ex.: SerVivo)
  2. Objeto (ex.: Humano)
  3. Atributo (sua estrutura fixa, ex.: CorDaPele)
  4. Método (suas ações, ex.: Fala)
Obs.: Existem várias ótimas definições de objetos, uma outra definição interessante é: "Objeto é um ente independente, composto por: Estado Interno, uma memória interna em que valores podem ser armazenados e modificados ao longo da vida do objeto. Comportamento, um conjunto de ações pré-definidas (métodos), através das quais o objeto responderá a demanda de processamento por parte de outros objetos.

A seguir uma linha de código que mostra a criação de dois objetos:


$cliente1 = new cliente("Pedro", 1);
$cliente2 = new cliente("Roberto", 564);
/** Lê-se acima: criamos duas variaveis:  $cliente1 e $cliente2
 * Instanciamos (criamos) dois objetos na classe
 * cliente a partir da palavra "NEW", depois colocamos
 * o nome da Classe que é "cliente" e então preenchemos
 * com um valor o seu escopo feito anteriormente ($nome,$numero);
 * Para a a string usamos "" , e para o número inteiro somente o número. 
*/


Um exemplo de um Objeto, sua Classe, Atributos e Métodos:

<?php

/**
 * @author Andino Só Soares
 * @copyright 2011
 */

class cliente{ 
    var $nome; 
    var $numero; 
    
/* 
Lê-se acima: A Classe Cliente tem os seguintes atributos: 
Variável $nome; Variável $numero;
*/

    function __construct($nome,$numero){ 
       $this->nome=$nome; 
       $this->numero=$numero; 
    } 
    
/* 
Lê-se acima: os objetos dessa classe devem ser
construídos com essa base
__construtor será o nome do objeto e entre parenteses
(a sequencia das variáveis criadas anteriormente), 
ou seja, no momento da criação do objeto quais 
valores serão definidos. 1° $nome e 2° $numero.
$this refere-se que o dado acessado será do próprio objeto
Então dá-se o valor de cada variável. Observe que 
esse não é o valor de um objeto em especial, mas sim um valor 
genérico, o nome de todos os valores da variável. 
*/

    function receber_numero(){ 
       return $this->numero; 
    } 
    function receber_nome(){
        return $this->nome;
        
    }
}
/*Lê-se acima: os métodos (ações) da Classe cliente.
1° Método receber_numero. Return é um comando que serve
para retornar o valor obtido e também serve
para finalizar a função. $this diz que o valor será
do próprio objeto e então qual o valor a função vai
mostrar, que é o valor "numero". Lembre-se que "numero"
é o valor da variável que declaramos lá em cima,
a variável "$numero".
Veja como as coisas se encaixam, lá em cima
dissemos que "numero" era igual a "$numero" e
antes disso em "function __construct($nome,$numero)"
ao declarar o construtor dissemos entre parênteses como
seria lido o objeto, ou seja que o primeiro valor entre
parenteses seria "$nome" e o segundo "$numero", veremos
adiante então dois objetos sendo criados.

OBS.: Esta programação é APENAS para demonstrar
como funciona os códigos e o que vimos até aqui.
Mas a Teoria da Programação Orientada a Objetos diz
que devemos programar objetos como no MUNDO REAL.
Isso significa que não será a Classe cliente que irá
fazer a ação "receber_numero" ou "receber_nome",
porque no MUNDO REAL não é o Cliente que faz isso. 
*/

    $cliente1 = new cliente("Pedro", 1); 
    $cliente2 = new cliente("Roberto", 564); 
    
/*
Lê-se acima: criamos duas variaveis:  $cliente1 e $cliente2
instanciamos (criamos) dois objetos na classe cliente
a partir da palavra "NEW", depois colocamos o nome da
Classe e então preenchemos com um valor o seu escopo
feito anteriormente ($nome,$numero);
Para a a string usamos "" , e para o número inteiro 
somente o número. 
*/

echo 
    "O identificador do cliente 1 é: "
    . $cliente1->receber_nome(); 
 
echo "<aqui é um br />O cliente número"
    . $cliente2->receber_numero(),
     " tem o nome:"
    . $cliente2->receber_nome(); 

/*
Lê-se acima: o "echo" fará aparecer na página final o seguinte:
+ O valor da string de aspas dupla
+ Ativação do método (ação) receber_numero do $cliente1.

Na outra linha temos:
+ O echo fará aparecer na página final o restante
do código da linha até o ponto e vírgula ;

+ Uma string
   o Dentro da string temos uma tag/HTML br para
   esse echo não ficar na mesma linha do que o outro
   
+ Ativação do método (ação) receber_numero do $cliente2

+ Uma vírgula para indicar o fim da função - Nota-se
que não foi ponto e vírgula, pois isto encerraria nossa
linha de código

+ Uma string de aspas dupla um ponto para encerrar a
string anterior e adicionar mais um código no echo 

+ Mais uma string de aspas dupla

+ Outro ponto

+ Ativação do método (ação) receber_nome do $cliente2

*/
?>

Finalizada a Parte 1.

Um comentário: