AULA 2 VISÃO BÁSICA DE CLASSES EM PHP Antes de mais nada, vamos conhecer alguns conceitos, que serão importantes para o entendimento mais efetivos dos assuntos que trataremos durante a leitura desta apostila. ORIENTAÇÃO A OBJETOS A orientação a objetos representa uma espécie de filosofia voltada para a construção de sistemas. A base principal da programação orientada a objetos é a construção de parte reutilizáveis chamadas classes. Essas classes se interagem entre si através de objetos. A programação orientada a objetos tem como principal objetivo o reaproveitamento de código de programação. Um outro benefício, e também muito importante, é a organização do código do sistema. Para desenvolver um sistema com orientação a objetos é fundamental entender o conceito de classes e objetos. PHP 5 Já sabemos que o PHP é uma linguagem de programação, muito utilizada para o desenvolvimento de aplicativos voltados para web. E sabemos também que o PHP interage com o HTML. O PHP possui a versatilidade de funcionar em um grande número de sistemas operacionais (Windows, Linux, MacOS X) e também na maioria dos servidores web, como por exemplo o apache. Além de tudo isso, é totalmente gratuito e possui uma vasta literatura na internet. A versatilidade e a liberdade que o PHP proporciona, está também na forma de programar. Tanto faz programar de forma estrutural como orientado a objetos. Sendo que, a partir da versão 5 do PHP, muitos problemas de programação orientado a objetos foram corrigidos, problemas estes existentes na versão 4, tornando atrativo desenvolver em PHP orientado a objetos. Um outro atrativo do PHP é o suporte a um grande número de banco de dados, como o mysql, SQLite, PostgreSql, dentre outros. PHP 5 ORIENTADO A OBJETOS O PHP 5, como já foi citado, veio corrigir vários problemas em relação a orientação a objetos, falhas estas existentes na versões 3 e 4. Nas versões mais antigas do PHP, a orientação a objetos era mais uma simulação. O fato do PHP 5 ter suporte a orientação a objetos, a linguagem não obriga a programar orientado a objetos. Mas vale apena utilizar os recursos que foram disponibilizados. UTILIZANDO O PHP 5 ORIENTADO A OBJETOS NA PRÁTICA Classes (Class) Classe é um termo utilizado em linguagens orientado a objetos. No caso, a classe representa um objeto que existe no mundo real. Podemos definir classe também como um conjunto de objetos que compartilham as mesmas operações. A palavra chave utilizada para criar-se uma classe é class e logo em seguida vem o nome da classe. Este nome pode ser qualquer um, desde que não seja uma palavra reservado do PHP. Normalmente, as classes ficam armazenadas em um arquivo à parte do restante do sistema. E o que podem ser classes e métodos de uma classe??? Regras de negócio (pessoa, cliente), interfaces (janelas, botões), mensagens para usuários, dentre outros. Ou seja, pode-se abstrair do mundo real qualquer situação e podemos escrever
uma classe. EXEMPLO: Em um sistema acadêmico, podemos abstrair vários objetos: aluno, curso, disciplina, professor, etc. A partir dai, podemos construir nossas classes. Class Pessoa { ATRIBUTOS MÉTODOS É importante salientar que toda classe deve possuir um nome. No exemplo acima, a classe chama-se Pessoa. ATRIBUTOS (OU PROPRIEDADES) Quando variáveis estão sendo utilizadas em uma classe, as mesmas passam a chamar-se ATRIBUTOS (ou propriedades). Os atributos determinam as características da classe. No exemplo abaixo, $nome é uma propriedade ou atributo. EXEMPLO : (salvar como pessoa.class.php) Class Pessoa { public $nome; Os atributos podem ser definidos com as seguintes visibilidades: pública, protegida ou privada (public, protected ou private). Encapsulamento O encapsulamento é um recurso da orientação a objetos, que provê a proteção de acesso a membros internos de um objeto. Existem alguns casos em que precisamos criar um método em uma classe, e este método só poderá ser executada dentro da própria classe. Para realizar o encapsulamento, temos que definir a visibilidade entre as propriedades e/ou métodos de uma classe. Private Protected Visibilidade Descrição As declarações realizadas com private somente podem ser acessadas dentro da própria classe. Não poderão ser acessados através do programa que faz uso dessa classe e nem de outras classes descendentes. Na UML é representado pelo sinal (-). As declarações realizadas com protected somente podem ser acessadas dentro da própria classe ou a partir de classes
Public Visibilidade Descrição descendentes. Nunca a partir de um programa que utiliza a classe. Na UML é representado pelo sinal (#). Quem tem acesso à classe tem acesso também a qualquer membro com visibilidade public. É acessível dentro da classe, nas classes extendidas e nos programas que estão instanciando a classe. Na UML é representado pelo símbolo (+). MÉTODOS Métodos são funções (functions), e são declaradas dentro de uma classe. Os métodos representam as ações a serem executadas por um determinado objeto, como alterar um valor, executar uma fórmula, etc. Neste caso, podemos considerar que os métodos são as ações da nossa classe, ou seja, o que está disponível para ser executado. Assim como a classe, os métodos precisam de um nome, e seguem as mesmas regras de uma classe. EXEMPLO : O objetivo do método gravar é exibir o nome da pessoa na tela # Declarando uma classe Class Pessoa { # Declarando 1 atributo public $nome; # Declarando um método public function gravar() { echo $this->nome; return Esta pessoa vai andar!!! ; *** salvar o script acima como pessoa.class.php Dados desta classe: O nome deste arquivo será pessoa.class.php. O nome da classe é Pessoa. O nome de um dos métodos é gravar(). DICA: Usualmente inicia-se o nome de uma classe com letra maiuscula. As visibilidades public, private e protected também são utilizadas na criação dos métodos. Pseudo-variável ($this->) A pseudo variável $this faz referência a uma variável ou a um método dentro de uma classe. Em outras palavras, é utilizada quando um método ou uma variável (que na classe é um atributo) é executado dentro do próprio objeto (classe). Pode-se dizer que $this é o chamador do método ou variável. Veja o exemplo acima. Criando uma instância (New) Quando fala-se em instanciar uma classe ou criar uma instância, isso quer dizer que desejamos concretizar esta classe, ou seja, preparar a classe para ser utilizada. Parte-se do princípio que a classe já existe fisicamente, mas para utilizá-la
em um ou mais programas, precisamos criar uma instância. Para criar-se uma instância em um programa, é necessário realizar a include da classe (no caso, o arquivo onde a classe está armazenada) e logo depois atribuir a uma variável, usando a palavra NEW. EXEMPLO: programa para instanciar a(s) classe(s) e o(s) método(s) include "pessoa.class.php"; // include do programa onde está a classe $objeto = new Pessoa; // criando uma instância da classe $objeto->nome = "Meu Nome"; // Atribuindo valor a propriedade da classe $resposta = $objeto->gravar(); // executando um método da classe echo $resposta; *** salvar o script acima como pessoa.php *** Executar 127.0.0.1/pessoa.php *** Nunca faça 127.0.0.1/pessoa.class.php Métodos Construtores Um método construtor são métodos (funções) especiais, que tem como objetivo inicializar um objeto, ou seja, determinar o comportamento inicial deste objeto. Cada vez que um novo objeto é criado, caso seja necessário, podemos utilizar o método construtor para objetivamente construir o objeto. Os métodos construtores não possuem valor de retorno. Geralmente passamos como parâmetros (atributos) para a classe através do método construtor, propriedades (valores, informações) que são fundamentais durante a sua execução. O atributos que são privados ou protegidos, deverão obrigatoriamente ter acesso a classe através do método construtor. Em um método construtor podem ser executados comandos. A utilização de um método construtor não é obrigatória. Observação: os parâmetros recebidos pelo método construtor podem não ser obrigatórios. Sendo assim, podemos atribuir NULL a propriedade. Exemplificando Método Construtor Neste exemplo vamos continuar utilizando a class Pessoa. Vamos acrescentar a esta classe um método construtor e um atributo PRIVATE que será o código da pessoa ($codpessoa). Mesmo em um método construtor, um parâmetro poderá ser considerado nulo (NULL). Neste caso, este atributo não torna-se obrigatório na hora da instância da classe. Regras para criação desta classe:
1. O atributo $codpessoa será private, pois este somente poderá ser passado para a classe através do método construtor ou através de algum método da própria classe. 2. O atributo $nome poderá ser passado tanto fora como na própria classe. EXEMPLO: pessoa.class.php (vamos acrescentar mais dados a classe) class Pessoa { # Declarando atributos private $codpessoa; public $nome; # Método construtor function construct($codpessoa) { $this->codpessoa = $codpessoa; # Método para carregar um objeto, caso o mesmo já exista # Seria por exemplo retorno de um select no bd private function carregar() { $this->codpessoa = 1; $this->nome = 'Meu Nome'; return "$this->codpessoa $this->nome"; # Método para gravar dados de um objeto # Seria por exemplo resultado de um insert no bd public function gravar() { echo $this->codpessoa; echo $this->nome; return "Vai Gravar"; Instância da Classe com o método construtor Vamos instanciar novamente a classe Pessoa, utilizando novamente o programa pessoa.php. Passo 1 : Incluir o arquivo pessoa.class.php (include) Passo 2 : Instanciar a classe, passando o parâmetro para o método construtor, ou não, caso não seja necessário, no caso de uma inclusão por exemplo. Passo 3 : Instanciar o(s) atributo(s) da classe que não estão sendo instanciados pelo método construtor. A partir dai, poderemos visualizar o objeto e fazermos uso dos métodos da classe. include "pessoa.class.php"; # Include da classe
$codpessoa=1; # Valor da variável $codpessoa $objeto = NEW Pessoa($codpessoa); # Instanciando a classe $objeto->nome = "Meu Nome"; # Executando o método gravar() $resposta = $objeto->gravar(); echo $resposta; echo "<hr>"; # Executando o método carregar() $resposta = $objeto->carregar(); echo $resposta; Obs: Troque os valores do atributos para visualizar os dados serem retornados. Note que, ao instanciar a classe, cria-se um objeto. Os atributos deste objeto poderão ser utilizados em todos métodos da sua classe. Caso o objeto não seja criado ao ser instanciado, verifique erros de sintaxe e/ou lógica. EXERCÍCIOS - Escreva uma classe chamada Correntista (corrente.class.php) - Atributos da classe: conta (private), cpf (public), nome (public). - Métodos da classe: mostrar() Regra: exibir na tela todos os atributos da classe Correntista e retornar a mensagem "Conta Aberta". - Escreva um programa chamado corrente.php para : NA AULA - Fazer a include da classe - Instanciar a classe e os respectivos atributos - Executar o método RESOLUÇÃO No assunto classes, estude também Herança, Polimorfismo, Abstratas, Encapsulamento.