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:
- a superclasse está mau implementada
- 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();
VEJA TAMBÉM
- Aula 91: Primeira Classe
- Aula 92: Primeira Classe
- Aula 93: Criação de Objetos
- Aula 94: Acessando Membros de Classe
- Aula 95: Implementando Funcionalidades na Classe
- Aula 96: Pseudo variável $this
- Aula 97: Gerenciando atributos de Classe
- Aula 98: Construtor
- Aula 99: Construtores Personalizados
- Aula 100: Destrutores
- Aula 101: Encapsulamento I
- Aula 102: Encapsulamento II
- Aula 103: Herança I
- Aula 104: Herança II
- Aula 105: Modificadores de Acesso
- Aula 106: Visibilidade das Funções
- Aula 107: Funções Modificadoras
- Aula 108: Sobrescrita de Funções
Tags curso, php, programação orientada a objetos, poo, herança, encapsulamento, classe, objeto, instância, blog
Comentários
comments powered by Disqus