Quando um estudante de programação de computadores ou mesmo algum profissional com interesse nesta área decide aprender PHP geralmente inicia seus estudos aprendendo a criar programas utilizando programação estruturada, para pequenos programas e códigos este paradigma se mostra bem eficiente e supre bem as necessidades do profissional neste aspecto. Quando os problemas a serem solucionados pelos programas começam a aumentar e os programas se tornam cada vez maiores há uma necessidade de migração para um outro paradigma muito usado em diversas linguagens chamado de Orientação a Objetos. O objetivo deste artigo é introduzir o estudo do PHP utilizando orientação a objetos que realmente se mostra um modelo muito mais claro e fácil de ser mantido.

O QUE É PROGRAMAÇÃO ORIENTADA A OBJETOS?

Orientação a objetos é um paradigma de programação e análise de sistemas de informática em que o sistema como um todo é composto de objetos bem como a interação entre os elementos dos sistemas é feita através destes objetos.

Na programação implementa-se um conjunto de classes para definir cada objeto presente no sistema, como produtos, vendas, clientes, etc. Cada classe possui em si o comportamento que terá em determinadas situações bem como o estado destes objetos. O relacionamento entre os objetos também é definido nos próprios objetos.

php

PORQUÊ PROGRAMAR UTILIZANDO ORIENTAÇÃO A OBJETOS?

Nas primeiras linguagens de programação era necessário escrever códigos gigantescos para se definir os métodos (procedimentos), todo o código era definido em métodos grandes que não tinham muita relação uns com os outros. Percebeu-se que esse paradigma de programação não era eficiente além de se existir uma dificuldade enorme para realizar manutenção no código fonte. Os grandes benefícios são a facilidade de dar manutenção no código e a grande modularização, que é a técnica de escrever métodos menores e que possuam objetivos específicos, falamos mais sobre esta técnica no artigo sobre GPS.

PROGRAMAÇÃO ORIENTADA A OBJETOS NA PRÁTICA

Quando falamos em orientação a objetos, estamos basicamente falando de classes, propriedades e métodos destas classes, em suma, tudo se resumirá a isso. Para definir uma classe em PHP faremos da seguinte forma:

<?php
class NameClass {
   // Coloque o código que desejar entre as chaves, métodos, propriedades
}
?>

Se você ainda não está acostumado a programar em PHP, o código pode parecer um pouco estranho. A primeira e última linha são inseridos os delimitadores, nosso código PHP estará entre o <?php e o ?> tudo que não está entre eles provavelmente é código HTML ou será tratado como na hora de renderizar a página. Na segunda linha temos a definição do nome da classe, ao contrário do que estamos acostumados em Java, o nome da classe não necessariamente precisa ter o mesmo nome do arquivo, embora isto seja uma boa prática de programação. Agora que já sabemos declarar uma classe vamos nos aprofundar mais.

Cada classe em PHP possui N métodos e propriedades mas o que são estes?

Métodos: São programas menores, rotinas, que os objetos desta classe poderão executar. Os métodos, geralmente, são usados para manipular e/ou alterar valores (propriedades), embora isso não seja uma necessidade, podemos ter métodos que não o fazem.

Atributos: São as estruturas que definem as propriedades da classe, ou seja, os valores que a mesma possui, podemos citar um exemplo: em uma classe pessoa podemos ter atributos como Nome, RG e CPF. Os atributos da classe podem ser atributos estáticos (constantes) ou atributos dinânicos, os primeiros não se alteram independe da instãncia (objeto) que está instanciado, já os dinâmicos possuem um valor mutável dependendo da instância da classe.

Antes de passar para o próximo tópico, iremos aprender um conceito que será muito útil mais a frente. Quando programamos orientado a objetos podemos colocar em prática uma técnica que nos ajudará e muito a sobrecarga de métodos. Com ela podemos definir dois métodos com mesmo nome mas que irão ser diferenciados pela quantidade e/ou tipo de parâmetros. Para exemplificar podemos ter um método criarPoligonoQuatroLados() e ter uma sobrecarga que defini que quando for passado apenas um parâmetro definiremos o objeto como um quadrado, quando passado dois parâmetros a classe se comportará como um retângulo, este foi um simples exemplo de uma técnica realmente fantástica que pode ajudar muito e também economizar linhas e mais linhas de código.

INSTANCIANDO UMA CLASSE

Um objeto é uma instância de uma classe, para exemplificar podemos citar a mesma classe Pessoa, que falamos mais acima, existindo uma classe pessoa podemos ter um objeto chamado com a propriedade nome Jair Rebello e outra com o nome Fulano de tal e muitas outras. A instância de uma classe para um objeto se dá através da palavra-chave, reservada ao PHP, new. Para instanciar um objeto é seguida a seguinte estrutura:

<?php
$objPessoa = new Pessoa;
?>

No exemplo acima temos a instância de uma classe pessoa sendo carregada na variável $objPessoa.

CRIANDO MÉTODOS E PROPRIEDADES PARA NOSSA CLASSE

Depois de aprender a declarar a classe, iremos agora definir as propriedades e os métodos de nossa classe, manteremos a linha de raciocínio e trabalharemos com o exemplo da classe Pessoa, para esta classe podíamos ter os seguintes atributos:

class Pessoa
{
   public $nome;
   public $rg;
   public $cpf;
   public $idade;
   public $endereco;
}

Pronto, definimos cinco atributos para a nossa classe. Por enquanto trabalharemos com todos os atributos públicos, em um outro artigo falaremos sobre a diferença de um atributo público e um atributo estático e outras peculiaridades do desenvolvimento de aplicações orientado a objetos. Com estes atributos criados, podemos pensar em diversos métodos para manipular os valores desta classe Pessoa. Para começar podemos definir métodos para obter o valor dos atributos bem como para se setar os valores.

   public function setNome($nome){
       $this->nome = $nome;
   }

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

   public function setRg($rg){
       $this->rg = $rg;
   }

   public function getRg(){
       return $this->rg;
   }

   public function setCpf($cpf){
       $this->cpf = $cpf;
   }

   public function getCpf(){
       return $this->cpf;
   }

Acima definimos 6 métodos, três para setar valores de nome, rg e cpf e outros três para pegar os valores dos mesmos atributos, o processo pode ser feito, semelhantemente, para construir os gets e sets das outras variáveis. Note também que usamos a referência $this, sempre que quiser fazer referência a atributos da classe, você pode utilizar o $this, isso se você estiver no contexto da classe. Você pode perceber que utilizar variáveis com o mesmo nome dos atributos da classe e mesmo assim não ouve nenhum conflito, isso se deu porque o PHP utilizar contextos, e quando colocamos o $this, estamos dizendo que queremos manipular o atributo do contexto da classe.

CONSTRUTORES E DESTRUTORES

Um dos fatores mais fantásticos do desenvolvimento orientado a objetos ao meu ver são os construtores e os destrutores, isso porque podemos definir esses métodos para criar e destruir uma instância de uma classe sem que precisemos criar outros métodos com outros nomes.

Construtor: É um método que determina as ações que desvem ser executadas quando o objeto é criado (instanciado). Em Java, o método contrutor é definido com o método que possui o mesmo nome da classe, já em PHP é definido com o método __contruct() ele é um método definido sem retorno, nem mesmo void. Neste método deve ser inserido toda a lógica a ser executada quando o objeto é criado, como valores que serão atribuídos as propriedades bem como métodos que são chamados tão logo o objeto é criado. Como qualquer outro método, o construtor também pode receber um ou mais atributos e também pode ser feita uma sobrecarga de métodos.

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

Destrutor: Este método é executado sempre que uma instância de uma classe é destruída. Também é um método muito importante, pois podemos determinar o comportamento da classe, quando ela for, por algum motivo removida. Isso pode incluir, salvar alterações no banco de dados, fazer outras operações em outras classes e muitas outras coisas. No PHP o método destrutor é chamado __destruct().

function __destruct() {
   print "Destruindo " . $this->nome . "\n";
}

DEFININDO UMA CONSTANTE

Falamos mais acima de atributo de nossa classe que não terão seus valores alterados durante toda a execução do programa que utiliza esta classe, esses atributos são as constantes. Podemos ter muitos motivos para declarar um atributo em forma de uma constante, mas os casos que acho mais interessante são aqueles que utilizaremos a mesma na lógica do programa, em uma condição ou iteração. Por exemplo, podemos criar uma constante para definir a quantidade de registros para uma paginação, criando um atributo, será muito mais explícito do que simplesmente atribuir o valor diretamente na condição ou iteração. Em PHP, é muito fácil definir uma constante, faça da seguinte maneira:

<?php
    define("CIDADE",     "SÃO PAULO");
?>

CONCLUSÃO

No artigo de hoje podemos aprender a base do assunto de orientação a objetos em PHP. Certamente quando programamos, seja em PHP ou qualquer outra linguagem desta forma, tendemos a ter um código mais organizado, modularizado e que terá uma manutenção muito mais facilitada. Além destes fatores a orientação a objetos é um padrão que está se firmando cada vez mais no mercado de trabalho, seja em programação, análise ou mesmo a modelagem. Quem está acostumado a fazer tudo de forma procedural pode ter muitas dores de cabeça quando chegar no mercado e perceber que tudo ou quase tudo é feito com orientação a objetos. Em breve teremos mais artigos sobre PHP Orientado a Objetos, aguarde.

Abraços!

 

Autor: Jair Rebello

Blog do Autor | Artigos do Autor:

Analista de Sistemas, empreendedor e blogueiro que dedica parte de seu tempo para a partilha de material de grande qualidade relacionados a Wordpress, SEO, Tableless, JQuery, PHP, Android e outras tecnologias mais. Pode me encontrar no Escola Sites ou O Android.

  • Explorer - Factory Construction & Ship Building Joomla Theme
  • Justice - Attorney and Law Firm Joomla Template
  • OwnFolio - One Page Personal Portfolio / vCard / Resume / Showcase Joomla Template
  • Big Business - Responsive Template
  • Merab - Creative Multipurpose Drupal 8 Theme
  • Fitness Academy Joomla Template
  • Fruition - Business Joomla Template
  • Educate | Education & Courses, Kindergartens Joomla Template
  • Constructive - Contractors Multipurpose Joomla Landing Page Theme
  • Vina Bubox - VirtueMart Joomla Template for Online Stores
  • BizOne - One Page Parallax Drupal Theme
  • LawHouse - Responsive Lawyers Attorneys Joomla Template

Gostou deste artigo? Então torne-se fã do Blog no Facebook!



Comentários dos Alunos


  1. Alan Nogueira
    21 de novembro de 2012

    Excelente artigo, parabéns.



    • Jair Rebello
      26 de novembro de 2012

      Alan, ficamos imensamente felizes que tenham gostado.

      Abraços,



  2. Gilson Sales
    22 de novembro de 2012

    Muito bom o artigo! seria bom que tivesse continuidade, pois na net não encontramos tal assunto. Não bem organizado como esse. abraço.



    • Jair Rebello
      26 de novembro de 2012

      Gilson, certamente teremos continuidade, ainda esta semana iremos publicar conexão com banco de dados com php orientado a objetos e depois iremos dar continuidade ainda mais, mostrando frameworks.

      Abraços,



  3. Leonardo Silva
    23 de novembro de 2012

    Excelente Artigo, muito boa a introdução da a PHP OO. A espera dos novos artigos! :D



    • Jair Rebello
      26 de novembro de 2012

      Leonardo, que bom que gostou. Iremos dar continuidade a esta série para que mais pessoas tenham conhecimento do assunto.

      Abraços,



  4. Paulo Draeta
    4 de dezembro de 2012

    Pensa em um negocio dificil para aprender… Tive que fazer isso na faculdade…



    • Jair Rebello
      5 de dezembro de 2012

      Paulo, é algo complicado mas quando se aprende, percebe-se que não é tão complicado e se pode fazer muitas coisas.

      Abraços,



  5. Osvaldo
    12 de fevereiro de 2013

    Jair,

    Obrigado por compartilhar seu tempo com publicações deste tipo. Nos dias de hoje, confundir nomenclaturas (visto que são milhares) é a coisa mais fácil que há. Há tempos que venho estudando PHPOO, seu artigo é claro e objetivo, entendi mais um pouco sobre construct, class, metodo, instância…. aguardo mais artigos!



  6. jaime
    21 de agosto de 2014

    Excelente explicação, já tinha lido vários livros e apostilas porem com essa explicação tudo ficou mais claro. Parabéns pela iniciativa!
    E vou seguindo os seus tópicos.


RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
7794

Subscrever Newsletter
Subscreva a Newsletter:



Aplicativos Android, iPhone e Muito Mais!




Assine a Escola Criatividade Assine a Newsletter da Escola Criatividade Escola Criatividade no Twitter Escola Criatividade no Facebook Escola Criatividade no Youtube Escola Criatividade no Google Buzz