Fundamentos da Programação
PHP OO
Pós-Graduação em Desenvolvimento
Web
PHP OO – Polimorfismo
Polimorfismo
 Permite que subclasses possuam métodos iguais
(com a mesma assinatura) de uma superclasse, mas
com comportamentos diferentes;
 As implementações de tais métodos são redefinidas
nas classes-filhas;
 Classes-filha (subclasses) herdam implementações
da classe-pai (superclasse) de acordo com uma
hierarquia;
3
Polimorfismo
 Ex.:
4
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Exercício
Exercício
• Etapa 1 – Preparação do Domínio
 Crie uma pasta em htdocs chamada
polimorfismo;
 Na pasta polimorfismo, crie uma pasta chamada
classes;
6
Polimorfismo
 Etapa 2: Crie as seguintes classes na pasta
polimorfismo/classes :
7
Conta
# saldo: double
+ deposita(double)
+ saca(double)
+ imprimeExtrato()
ContaCorrente
+ deposita(double)
ContaPoupanca
OBS: Crie os métodos
get e set necessários. Construtores
podem ser criados.
OBS: O método deposita
da
Subclasse ContaCorrente
Deverá descontar uma
taxa de 10 centavos em
cada depósito.
Exercício
• Etapa 3 – Criação do script index.php na pasta
polimorfismo
 O script deverá criar um objeto para cada tipo de conta;
 Em seguida, o script deverá definir o saldo inicial de R$
200,00 na conta corrente e R$ 500,00 na poupança;
 Após a definição do valor inicial de cada conta, saque R$
100,00 de cada conta;
 O script deverá executar o método imprimeExtrato de
cada conta, exibindo seu saldo final;
8
PHP OO – Classes Abstratas
Classes Abstratas
 Classes estruturais que servem de base para outras
classes;
 Não podem ser instanciadas (terem objetos)
 Apenas as subclasses poderão ser instanciadas;
 Usamos a palavra reservada abstract na assinatura
de uma classe para torná-la abstrata;
10
Classes Abstratas
 Sintaxe:
11
<?php
abstract class Conta
{
// ...
Classes Abstratas
 Considere o exemplo anterior:
12
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Classes Abstratas
 Considere o exemplo anterior:
13
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
A classe Figura não
era instanciada (não
criamos objetos dessa
classe)
Definida apenas para
questões de herança
e polimorfismo
Classes Abstratas
 Considere o exemplo anterior:
14
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Tal classe é uma forte
candidata a ser uma
classe abstrata!
PHP OO – Métodos Abstratos
Métodos Abstratos
 Métodos que possui apenas assinaturas,
implementados em classes abstratas;
 Não possuem lógica! Apenas assinaturas;
 Faz com que as classes-filha sejam obrigadas a
definir as implementações dos métodos abstratos;
 Impõem o polimorfismo às subclasses!
 Usamos a palavra reservada abstract na assinatura
de um método para torná-la abstrata;
16
Métodos Abstratos
 Sintaxe - Exemplo:
17
<?php
// ...
abstract function transferir($conta);
// ...
Métodos Abstratos
 Voltando o exemplo anterior:
18
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Métodos Abstratos
 Considere o exemplo anterior:
19
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
O método
mostraArea() “não
fazia nada” (não
possuía instruções a
serem executadas)
Definida apenas para
questões de
polimorfismo
Métodos Abstratos
 Considere o exemplo anterior:
20
Figura
# x: double
# y: double
+ mostraArea()
Triangulo
+ mostraArea()
Quadrado
+ mostraArea()
Tal método é um forte
candidato a ser um
método abstrato!
Exercício
Exercício
• Etapa 1 – Preparação do Domínio
 Crie uma pasta em htdocs chamada abstratos;
 Na pasta abstratos, crie uma pasta chamada
classes;
22
Exercício
 Etapa 2: Crie as seguintes classes na pasta
abstratos/classes :
23
Animal
# come: String
+ habitoAlimentar()
Carnivoro
+ habitoAlimentar()
Herbivoro
+ habitoAlimentar()
OBS: Crie os métodos
get, set e construtores caso sejam
necessários.
OBS: O método
habitoAlimentar()
simplesmente imprime na
tela o hábito alimentar de
cada animal.
Classe abstrata
Método abstrato
Exercício
• Etapa 3 – Criação do script index.php na pasta
abstratos
 O script deverá criar um objeto para cada tipo de animal;
 Em seguida, o script deverá definir o hábito alimentar do
carnívoro para “carne” e do herbívoro para “legumes”;
 O script deverá exibir o método alimentar de cada animal;
24

Fundamentos da Programação PHP OO - Aula 2

  • 1.
    Fundamentos da Programação PHPOO Pós-Graduação em Desenvolvimento Web
  • 2.
    PHP OO –Polimorfismo
  • 3.
    Polimorfismo  Permite quesubclasses possuam métodos iguais (com a mesma assinatura) de uma superclasse, mas com comportamentos diferentes;  As implementações de tais métodos são redefinidas nas classes-filhas;  Classes-filha (subclasses) herdam implementações da classe-pai (superclasse) de acordo com uma hierarquia; 3
  • 4.
    Polimorfismo  Ex.: 4 Figura # x:double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea()
  • 5.
  • 6.
    Exercício • Etapa 1– Preparação do Domínio  Crie uma pasta em htdocs chamada polimorfismo;  Na pasta polimorfismo, crie uma pasta chamada classes; 6
  • 7.
    Polimorfismo  Etapa 2:Crie as seguintes classes na pasta polimorfismo/classes : 7 Conta # saldo: double + deposita(double) + saca(double) + imprimeExtrato() ContaCorrente + deposita(double) ContaPoupanca OBS: Crie os métodos get e set necessários. Construtores podem ser criados. OBS: O método deposita da Subclasse ContaCorrente Deverá descontar uma taxa de 10 centavos em cada depósito.
  • 8.
    Exercício • Etapa 3– Criação do script index.php na pasta polimorfismo  O script deverá criar um objeto para cada tipo de conta;  Em seguida, o script deverá definir o saldo inicial de R$ 200,00 na conta corrente e R$ 500,00 na poupança;  Após a definição do valor inicial de cada conta, saque R$ 100,00 de cada conta;  O script deverá executar o método imprimeExtrato de cada conta, exibindo seu saldo final; 8
  • 9.
    PHP OO –Classes Abstratas
  • 10.
    Classes Abstratas  Classesestruturais que servem de base para outras classes;  Não podem ser instanciadas (terem objetos)  Apenas as subclasses poderão ser instanciadas;  Usamos a palavra reservada abstract na assinatura de uma classe para torná-la abstrata; 10
  • 11.
  • 12.
    Classes Abstratas  Considereo exemplo anterior: 12 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea()
  • 13.
    Classes Abstratas  Considereo exemplo anterior: 13 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea() A classe Figura não era instanciada (não criamos objetos dessa classe) Definida apenas para questões de herança e polimorfismo
  • 14.
    Classes Abstratas  Considereo exemplo anterior: 14 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea() Tal classe é uma forte candidata a ser uma classe abstrata!
  • 15.
    PHP OO –Métodos Abstratos
  • 16.
    Métodos Abstratos  Métodosque possui apenas assinaturas, implementados em classes abstratas;  Não possuem lógica! Apenas assinaturas;  Faz com que as classes-filha sejam obrigadas a definir as implementações dos métodos abstratos;  Impõem o polimorfismo às subclasses!  Usamos a palavra reservada abstract na assinatura de um método para torná-la abstrata; 16
  • 17.
    Métodos Abstratos  Sintaxe- Exemplo: 17 <?php // ... abstract function transferir($conta); // ...
  • 18.
    Métodos Abstratos  Voltandoo exemplo anterior: 18 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea()
  • 19.
    Métodos Abstratos  Considereo exemplo anterior: 19 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea() O método mostraArea() “não fazia nada” (não possuía instruções a serem executadas) Definida apenas para questões de polimorfismo
  • 20.
    Métodos Abstratos  Considereo exemplo anterior: 20 Figura # x: double # y: double + mostraArea() Triangulo + mostraArea() Quadrado + mostraArea() Tal método é um forte candidato a ser um método abstrato!
  • 21.
  • 22.
    Exercício • Etapa 1– Preparação do Domínio  Crie uma pasta em htdocs chamada abstratos;  Na pasta abstratos, crie uma pasta chamada classes; 22
  • 23.
    Exercício  Etapa 2:Crie as seguintes classes na pasta abstratos/classes : 23 Animal # come: String + habitoAlimentar() Carnivoro + habitoAlimentar() Herbivoro + habitoAlimentar() OBS: Crie os métodos get, set e construtores caso sejam necessários. OBS: O método habitoAlimentar() simplesmente imprime na tela o hábito alimentar de cada animal. Classe abstrata Método abstrato
  • 24.
    Exercício • Etapa 3– Criação do script index.php na pasta abstratos  O script deverá criar um objeto para cada tipo de animal;  Em seguida, o script deverá definir o hábito alimentar do carnívoro para “carne” e do herbívoro para “legumes”;  O script deverá exibir o método alimentar de cada animal; 24