NOME DURAÇÃO
Curso PHP
Abertura do Curso de PHP
Visão Geral do PHP
Ambiente de Desenvolvimento PHP
Servidor Web PHP
Como instalar o WAMP no Windows - Curso de PHP
Instalando PHPStorm no Windows
URL e Apache com PHP
Hello World em PHP
Executando Scripts PHP
TAG PHP
Montagem do HTML com PHP
Montagem do HTML com PHP II
Comentários em PHP
Definições da Linguagem PHP
Variáveis em PHP
Variáveis em PHP II
Nomenclatura de Variáveis em PHP
Operadores Aritméticos em PHP
Tipos de Dados do PHP
Módulo da Divisão em PHP
Tomada de Decisão em PHP
Tomada de Decisão - Estrutura else
Ambiente para Estudo PHP
Números Pares e Ímpares em PHP
A instrução elseif
Operadores Relacionais em PHP
Operadores Relacionais Parte II
Operadores Lógicos em PHP
Tela de Login e Senha com PHP
Introdução às Estruturas de Repetição em PHP
Instrução While em PHP
Introdução do-while em PHP
do-while - caso de uso com PHP
Script em Looping em PHP
Atribuição vs Comparação vs Identico em PHP
Operadores de Atribuição Compostos em PHP
Operadores de Incremento e Decremento em PHP
Estrutura de Repetição for do PHP
Estrutura de Repetição for do PHP (parte II)
Tabuada em PHP
Instrução break em PHP
Instrução continue em PHP
Operação Ternária em PHP
Operação Ternária em PHP (parte II)
Estrutura de Seleção Múltipla switch em PHP
Estrutura de Seleção Múltipla switch em PHP (parte II)
Precedência e Associatividade de Operadores em PHP
Constantes em PHP
Variáveis Variáveis em PHP
Introdução aos Arrays em PHP
Arrays Indexados em PHP
Definindo, Incluindo, Alterando e Excluindo elementos em PHP
Função range() em PHP
Iterando Arrays em PHP
Estrutura foreach em PHP
O foreach em PHP - Como usar?
Estrutura foreach - alterando valores internos
Arrays Associativos em PHP
Arrays Multidimensionais em PHP
Manipulação de Arrays em PHP
Introdução às Funções em PHP
Definindo parâmetros em PHP
Parâmetros default com PHP
Lista de Parâmetros em PHP
Lista de Parâmetros em PHP II
Funções variádicas em PHP
Retorno de Valores pela função em PHP
Funções e Escopo de Variáveis em PHP
Parâmetros por Referência em PHP
Parâmetros por Referência em PHP II
Parâmetros Tipados em PHP
Valores de retornos de funções tipados em PHP
Null Coalescing Operator em PHP
Operador SpaceShift em PHP
Importação: include() e require() do PHP
Introdução às Funções Anônimas em PHP
Escopo de nomes das funções anônimas em PHP
Funções Anônimas na Prática com PHP
Funções Anônimas e Arrays com PHP
Introdução às Strings em PHP
Aspas Duplas vs Aspas Simples em PHP
String Aspas Duplas em PHP
String heredoc e nowdoc em PHP
Funções para Manipulação de Strings em PHP
Introdução às Requisições Web em PHP
Método GET em PHP
Formulários HTML e PHP
Método POST com PHP
Variáveis superglobais do PHP
A Orientação a Objetos em PHP
Primeira Classe em PHP
Membros de Classe em PHP
Criação de Objetos em PHP
Acessando Membros de Classe em PHP
Implementando Comportamentos de Classe com PHP
Pseudo-variável $this em PHP
Gerenciando Atributos de Classe em PHP
Construtores em PHP
Construtores Personalizados em PHP
Destrutores em PHP
Encapsulamento em PHP
Encapsulamento em PHP (parte II)
Herança em PHP
Herança com PHP II
Modificadores de Acesso em PHP
Visibilidade das Funções em PHP
Funções Modificadoras em PHP
Sobrescrita de Funções em PHP

Nesta aula daremos continuidade ao estuda da herança, a definição de subclasses e as características das classes-filhas.

SUBCLASSE

Chamamos de Sub Classe todas as classes herdeiras. O conceito de SubClasse é o da especialização, isto é, a SubClasse possui todas as características e funcionalidades da Super e agora irá definir um outro conjunto de funções e propriedades a fim de especializar alguma funcionalidade. É importante observar que toda SubClasse possui acesso aos membros públicos e protegidos da SuperClasse, porém o inverso não é verdadeiro.

Toda SubClasse recebe os membros não privados e protegidos da super classe. Isso faz com que a subclasse torne-se capaz de fazer uso de todas funções, como também, atribuir valores às variáveis definidas na super. Toda SubClasse, por definição, será também do tipo da SuperClasse, ou seja, se tivermos as classe A e B, onde B é subclasse de A, nós temos que B será do tipo B, e também do tipo A.

Num primeiro momento a definição e utilização de SubClasse não possui quaisquer diferença no que estudamos até agora, isso porque, temos que sempre ter em mente que TODA classe deriva obrigatoriamente de alguma SuperClasse, até porque, toda classe possui propriedades e funcionalidades por padrão, mesmo que estas sejam conceitos implicitos.

Fato é que não haverá maiores problemas na SubClasse se está não vier a estender as definições da sua SuperClasse. Do contrário, isto é, se a Sub implementar uma variável o função de mesmo nome implementado na Super, o que acontecerá? Há diversas situações onde a SubClasse precisará alterar somente o funcionamento de uma função, isto é, precisará modificar o funcionamento de uma função. Outras vezes, a função não precisará ser redefinida, somente estendida. Como sabemos, a herança é uma característica das classes e não das funções e propriedades.

A implementação da subclasse requer que conheçamos alguns conceitos relacionados ao compartilhamento de propriedades em níveis hierárquicos distintos.

Por exemplo, vamos fazer algumas suposições, ainda que não vamos, nesse momento, estudar como resolver os problemas propostos.

O que acontece se a classe derivada declara uma variável de mesmo nome declarada na classe base? O que acontece se a classe derivada, declara uma funções de mesmo nome? Estudamos que os construtores são invocados pela Máquina Virtual do PHP, ou seja, se tentarmos invocar o construtor pelo seu nome, um erro ocorrerá. Então, se a superclasse tem implementado um construtor e a subclasse também o implementou, ao criarmos uma instância da classe derivada, o que acontecera:

a) o construtor que será invocado, será o da superclasse ou da subclasse? c) ambos construtores serão invocados?

Acabamos de elucidar algumas situações que irão ocorrer, e ocorrerão muitas vezes, quando estivermos trabalhando com a orientação a objetos. Isso significa que de agora em diante, o nosso estudo se ampliara, até porque, ao interagirmos com classes derivadas, estaremos também, interagindo com a classe base.

Um conceito simples mas importante é que a classe derivada deve se integrar com a classe base, jamais o contrário. Se houver problemas na implementação da classe derivada e a solução que encontrarmos é a alteração da superclasse, teremos uma de 2 situações:
  1. a superclasse está mau implementada
  2. a solução por nós encontrada é um problema conceitual

Como veremos de agora em diante, a POO propriamente dita é bastante simples e é quase que uma decoreba, o grande problema, pra não dizer o início do inferno, será totalmente conceitual, de análise da informação, das relações entre os tipos de dados e de como estes se relacionam. A implementação do código se tornará um simples detalhe decorrente, na maioria das vezes, de um grande estudo e análise!

EXEMPLO FEITO EM AULA

class SuperClasse {

    public $a = 0;

    public function super()
    {
        echo $a;
    }
}

class SubClasse extends SuperClasse {

    public $a;

    public function sub()
    {
        this->$a = 10;
    }
}

$sub = new SubClasse();
$sub->sub();
$sub->super();


Tags curso, php, programação orientada a objetos, poo, herança, encapsulamento, classe, objeto, instância, blog

Comentários

comments powered by Disqus