Os programas orientados a objetos são construídos por meio de uma estrutura hierárquica de classes. Em linguagens de herança única, como PHP, a herança de classe é semelhante a uma árvore. Uma classe raiz possui uma ou mais subclasses e, em seguida, uma ou mais subclasses são herdadas de cada subclasse. . Mais subcategorias de próximo nível. Claro, pode haver múltiplas classes raiz usadas para implementar funções diferentes. Em uma arquitetura bem projetada, cada classe raiz deve ter uma interface útil que possa ser usada pelo código da aplicação. Se o código do nosso aplicativo for projetado para funcionar com a classe raiz, ele também poderá funcionar com qualquer subclasse que herde da classe raiz.
Um método abstrato é como um espaço reservado para um método regular em uma subclasse (ocupa espaço, mas não tem efeito), mas, diferentemente de um método regular, não possui nenhum código. Se houver um ou mais métodos abstratos em uma classe, a classe se tornará uma classe abstrata. Você não pode instanciar classes abstratas. Você deve herdar delas e então instanciar subclasses. Você também pode pensar em classes abstratas como um modelo para subclasses.
Se você substituir todos os métodos abstratos, a subclasse se tornará uma classe normal. Se todos os métodos não forem substituídos, a subclasse ainda será abstrata. Se uma classe contiver um método abstrato (mesmo que haja apenas um), você deverá declarar a classe como abstrata adicionando abstract antes da palavra-chave class.
A sintaxe de declaração de um método abstrato é diferente daquela de declaração de um método geral. O método abstrato não tem o corpo principal contido entre colchetes {} como o método geral e termina com ponto e vírgula;.
No Exemplo 6.13, definimos uma classe Shape que contém um método getArea. Mas como é impossível determinar a área da figura sem conhecer a forma, declaramos o método getArea como um método abstrato. Você não pode instanciar um objeto Shape, mas pode herdá-lo ou usá-lo em uma expressão, como no Exemplo 6.13.
Se você criar uma classe apenas com métodos abstratos, você definirá uma interface. Para ilustrar esta situação, o PHP possui a interface e implementa palavras-chave. Você pode usar interface em vez de classes abstratas e implementos em vez de extensões para descrever sua definição de classe ou usar uma interface. Por exemplo, você pode escrever um myClass implementa myIterface.
/*Observação:
Os dois métodos referem-se a:
1. classe abstrata aaa{} (observe que existem apenas métodos abstratos em aaa, nenhum método geral)
classe bbb estende aaa{} (substitui o método abstrato em aaa em bbb)
2. interface aaa{}
classe bbb implementa aaa{} (substitui o método abstrato em aaa em bbb)
*/
Listagem 6.13 Classes abstratas
//classe raiz abstrata classe raiz abstrata
classe abstrata Forma
{
função abstrata getArea(); //Definir um método abstrato
}
//classe filha abstrata subclasse abstrata
classe abstrata Polígono estende Forma //Polígono
{
função abstrata getNumberOfSides();
}
//classe concreta classe entidade classe triângulo
classe Triângulo estende Polígono
{
base $ pública;
public $height;
public function getArea() //Substitui o método de cálculo de área{
return(($this->base * $this->height)/2);
}
public function getNumberOfSides() //Substituir método de contagem lateral{
retorno(3);
}
}
//classe concreta quadrilátero de classe de entidade
classe Retângulo estende Polígono
{
largura pública $;
public $altura;
função pública getArea()
{
return($this->largura * $this->altura);
}
função pública getNumberOfSides()
{
retorno(4);
}
}
//classe concreta entidade classe círculo
classe Círculo estende Forma
{
public $ raio;
função pública getArea()
{
return(pi() * $este->raio * $este->raio);
}
}
//classe raiz concreta define uma classe de cores
classColor
{
público $nome;
}
$myCollection = array(); //Cria uma coleção de formas e coloca-a em um array
//faz um retângulo
$r = novo retângulo;
$r->largura = 5;
$r->altura = 7;
$minhaColeção[] = $r;
unset($r);
//faz um triângulo
$t = novo Triângulo;
$t->base = 4;
$t->altura = 5;
$minhaColeção[] = $t;
unset($t);
//faz um círculo
$c = novo Círculo;
$c->raio = 3;
$minhaColeção[] = $c;
unset($c);
//cria uma cor
$c = nova cor;
$c->nome = "azul";
$minhaColeção[] = $c;
unset($c);
foreach($minhaColeção como $s)
{
if($s instanceof Shape) //Se $s for uma instância da classe Shape{
print("Área: " . $s->getArea() . "n");
}
if($s instância do polígono)
{
print("Lados: " .$s->getNumberOfSides()."n");
}
if($s instância de Cor)
{
print("Cor: $s->nome n");
}
imprimir("n");
}
?>