CURSOS ESPECÍFICOS DE PHP - MÓDULO 7 “Programação Orientada a Objetos em PHP”
Módulo 7 – Programação Orientada a Objetos em PHP
1 2
INTRODUÇÃO A PROGRAMAÇÃO ORIENTADA A OBJETOS ............................................ 3 CONCEITOS FUNDAMENTAIS ...................................................................................................... 3 2.1 Classe ................................................................................................................................................ 3 2.2 Objeto............................................................................................................................................... 3 2.3 Mensagem ........................................................................................................................................ 3 2.4 Herança ............................................................................................................................................ 4 2.5 Associação ....................................................................................................................................... 4 2.6 Encapsulamento.............................................................................................................................. 4 2.7 Abstração ........................................................................................................................................ 4 2.8 Polimorfismo.................................................................................................................................... 4 3 ORIENTAÇÃO A OBJETOS EM PHP 4.......................................................................................... 5 3.1 Exemplo 1 – Construindo uma classe ........................................................................................ 5 3.2 Exemplo 2 – Construtores de uma Classe............................................................................... 6 3.3 Exemplo 3 – Herança .................................................................................................................... 7 3.4 Exemplo 4 – Métodos de Classe................................................................................................ 8 4 Orientação a Objetos em PHP5......................................................................................................... 9 4.1 Exemplo 5 – Visibilidade de Atributos e Construtores .................................................... 9 4.2 Exemplo 6 – Atributos Estáticos.............................................................................................10 4.3 Exemplo 7 – Interfaces..............................................................................................................11 4.4 Exemplo 8 – Estruturando Funções de Manipulação de Arquivo em Classes..............13 5 EXERCÍCIOS.........................................................................................................................................14 5.1 Exercício 1......................................................................................................................................14 5.2 Exercício 2 .....................................................................................................................................14
2
Módulo 7 – Programação Orientada a Objetos em PHP
1
INTRODUÇÃO A PROGRAMAÇÃO ORIENTADA A OBJETOS
A Orientação a Objeto é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de projeto. A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software. O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos. Hoje existem duas vertentes no projeto de sistemas orientados a objetos. O projeto formal, normalmente utilizando técnicas como a notação UML e processos de desenvolvimento como o RUP; e a programação extrema, que utiliza pouca documentação, programação em pares e testes unitários. Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software. Cada classe determina o comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. Smalltalk, Perl, Python, Ruby, Php, ColdFusion, C++, Object Pascal, Java, Javascript, ActionScript e C# são as linguagens de programação mais importantes com suporte a orientação a objetos. 2
CONCEITOS FUNDAMENTAIS
2.1 Classe
Representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos, através de métodos, e quais estados ele é capaz de manter, através de atributos. Exemplo de classe: Os seres humanos. 2.2 Objeto
É uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria. 2.3 Mensagem
É uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método dinâmico).
3
Módulo 7 – Programação Orientada a Objetos em PHP 2.4 Herança
É o mecanismo pelo qual uma classe (sub-classe) pode extender outra classe (super-classe), aproveitando seus comportamentos (métodos) e estados possíveis (atributos). Há Herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um". Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero. 2.5 Associação
É o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone. 2.6 Encapsulamento
Consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom). 2.7 Abstração
É a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais. Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software. 2.8 Polimorfismo
É o princípio pelo qual duas ou mais classes derivadas de uma mesma superclasse podem invocar métodos que têm a mesma assinatura (lista de parâmetros) mas comportamentos distintos, especializados para cada classe derivada, usando para tanto uma referência a um objeto do tipo da superclasse. A decisão sobre qual o método que deve ser selecionado, de acordo com o tipo da classe derivada, é tomada em tempo de execução, através do mecanismo de ligação tardia. No caso de polimorfismo, é necessário que os métodos tenham exatamente a mesma identificação, sendo utilizado o mecanismo de redefinição de métodos. Esse mecanismo de redefinição não deve ser confundido com o mecanismo de sobrecarga de métodos.
4
Módulo 7 – Programação Orientada a Objetos em PHP
3
ORIENTAÇÃO A OBJETOS EM PHP 4
3.1 Exemplo 1 – Construindo uma classe
Comentários • • • • •
•
•
•
•
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo1Aluno.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo1.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo1.php Este exemplo mostra a estrutura básica de uma classe e como ela é instanciada No primeiro bloco temos a classe Aluno com dois atributos: nome e nota. Além disso, esta classe possui dois métodos (funções) que manipulam estes atributos. Note que para fazer referência a um atributo dentro de um método da classe, usase o $this No segundo bloco, para se criar um objeto da classe, usa-se o “new” seguido do nome da classe. Depois da criação do objeto, ele “veste” os métodos e atributos da classe. Sendo assim podemos executar e exibir os resultados chamando as funções (métodos) O operador “->” indica que método ou atributo estaremos acessando da classe ou objeto.
Anotações
5
Módulo 7 – Programação Orientada a Objetos em PHP 3.2 Exemplo 2 – Construtores de uma Classe
Comentários • • • • •
• •
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo2Aluno.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo2.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo2.php Este exemplo mostra o conceito de construtor de uma classe Construtores são funções (métodos) que são executadas sempre que um objeto é criado. No PHP4, o método construtor deve ter necessariamente o mesmo nome da classe O métodos construtor tem este nome pois geralmente ele é usado para definir os valores iniciais dos atributos de uma classe.
Anotações
6
Módulo 7 – Programação Orientada a Objetos em PHP 3.3 Exemplo 3 – Herança
Comentários • • • • • •
•
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo3Pessoa.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo3Aluno.php Salve o 3º bloco dentro do diretório C:\webroot\modulo7\exemplo3.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo3.php A herança numa classe deve ser feita com a palavra “extends”. Ao criar uma subclasse de uma classe, todos os atributos e métodos são herdados da classe Pai. O construtor da classe pai não é chamado automaticamente.
Anotações
7
Módulo 7 – Programação Orientada a Objetos em PHP 3.4 Exemplo 4 – Métodos de Classe
Comentários • • • • •
•
Salve o bloco dentro do diretório C:\webroot\modulo7\exemplo4.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo4.php Em PHP4, podemos chamar um método de uma classe, sem instanciá-la. Para isso, usa-se o operador “::” Ao usar este operador, a palavra reservada “$this” passa a não existir dentro do método, caso se acesse alguma atributo se houver na classe Geralmente usado para funções que realizam uma atividade bem definida, ou seja, que não depende dos atributos.
Anotações
8
Módulo 7 – Programação Orientada a Objetos em PHP
4
Orientação a Objetos em PHP5
4.1 Exemplo 5 – Visibilidade de Atributos e Construtores
Comentários •
• • •
•
•
•
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo5ContaCorrente.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo5.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo5.php PHP5 introduz o conceito de visibilidade de atributos, ou seja, formas de acessar ou proteger os atributos. O atributo “public” permite que o atributo seja visível tanto dentro quanto fora do escopo da classe. O atributo pode ser acessado como no PHP4. Já atributos do tipo “private” fazem com que o atributo seja acessível apenas dentro dos métodos da própria classe. Caso tente acessar o atributo por fora dos métodos, um erro ocorrerá. Para classes pai e filho (especialização) o private não é acessível. Para isso se usa o “protected”. Construtores no PHP5 usa-se a função __construct(). 9
Módulo 7 – Programação Orientada a Objetos em PHP 4.2 Exemplo 6 – Atributos Estáticos
Comentários • • •
• •
•
Salve o bloco dentro do diretório C:\webroot\modulo7\exemplo6.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo6.php PHP5 introduz o conceito de atributos estáticos. São atributos da classe, como se fossem variáveis que não dependem dos objetos e sim da classe. São modificadas por qualquer objeto instanciado. Usa-se a palavra “static” após o “public”. Neste exemplo, o construtor modifica a variável $total (estática) através da palavra “self” usando o operador “::”. No corpo do programa, para acessar o valor, deve-se acessar pela classe, já que o atributo é estático (da classe) também com o operador “::”.
Anotações
10
Módulo 7 – Programação Orientada a Objetos em PHP 4.3 Exemplo 7 – Interfaces
11
Módulo 7 – Programação Orientada a Objetos em PHP
Comentários • • • • • • •
•
•
•
•
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo7Interface.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo7Professor.php Salve o 3º bloco dentro do diretório C:\webroot\modulo7\exemplo7Diretor.php Salve o 4º bloco dentro do diretório C:\webroot\modulo7\exemplo7Execucao.php Salve o 5º bloco dentro do diretório C:\webroot\modulo7\exemplo7.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo7.php O uso de interface tem como maior objetivo fazer o uso de polimorfismo conforme definido anteriormente. O 1º bloco mostra a criação de uma interface. As interface apenas definem as funções e seu parâmetros, não havendo portanto implementação. As classes Professor e Diretor implementam a interface, conforme mostra os exemplos. Ao fazerem isso, elas obrigatoriamente devem implementar as funções listadas na interface. Interfaces até o presente momento não tem um significado tão expressivo. Porém as se trabalhar o polimorfismo, percebe-se uma grande utilidade como na classe Execucao. Esta classe possui um método chamado “salario”. Como parâmetro há um objeto que implemente a interface iSalario. No PHP5 é permitido forçar um parâmetro a ser de uma determinada classe, bastando para isso informar o nome da classe, conforme método salário mencionado. Percebe-se então o uso do polimorfismo na execução do método.
Anotações
12
Módulo 7 – Programação Orientada a Objetos em PHP 4.4 Exemplo 8 – Estruturando Funções de Manipulação de Arquivo em Classes
Comentários • • • •
•
Salve o 1º bloco dentro do diretório C:\webroot\modulo7\exemplo8Arquivo.php Salve o 2º bloco dentro do diretório C:\webroot\modulo7\exemplo8.php Para testar, abra a url no navegador: http://localhost/modulo7/exemplo8.php Este exemplo mostra como encapsular as funções de tratamento de arquivos textos no PHP. Observamos um atributo. O ponteiro que armazena a conexão com os arquivos e é necessário como parâmetro para a maioria das funções. Esta pode ser uma regra básica. No segundo bloco um uso consolidado deste encapsulamento.
13
Módulo 7 – Programação Orientada a Objetos em PHP
5
EXERCÍCIOS
5.1 Exercício 1
Implementar uma classe Calculadora que irá possuir dois atributos (números) e as 4 operações básicas como métodos (adição, subtração, multiplicação, divisão). 5.2 Exercício 2
Modificar a classe de Conta Corrente para que não permita depósitos e saques superiores a R$ 1.000,00. Não poderá permitir saque superior ao saldo atual também. Controlar mensagens de erro com a criação de mais um atributo privado para armazenamento desta mensagem. Testar o uso da classe.
14