🚀 Capítulo 11: A Magia da Herança (Tema: Harry Potter)

NOTE

Este capítulo utiliza a temática de Harry Potter para explicar os conceitos de Herança e Polimorfismo em PHP. Aprenda a passar características de uma classe para outra!


1. 🎯 Objetivo da Aula

Compreender o conceito de Herança em POO, aprendendo a usar a palavra-chave extends para criar classes filhas que herdam características da classe mãe, e entender o básico de Polimorfismo.

2. 🏢 O Cenário Prático (Seu Desafio)

No mundo da magia de Harry Potter, existem características e habilidades que passam de geração em geração. Um bruxo nasce sabendo fazer magia básica porque ele herda essa capacidade de seus pais bruxos. No entanto, cada bruxo pode desenvolver habilidades únicas: Harry é ótimo em Defesa Contra as Artes das Trevas, enquanto Hermione é mestre em Feitiços complexos.

Na programação:

  • Para não precisarmos reescrever as características comuns (como nome, idade, varinha) para cada tipo de personagem, nós criamos uma classe mãe (ex: Personagem) e fazemos as outras classes herdarem dela! Seu desafio é usar a magia da herança!

🧠 Fundamentos: A Teoria Traduzida

🧬 1. Herança (extends):

Para fazer uma classe herdar de outra, usamos a palavra extends (estende). A classe filha ganha automaticamente todos os atributos e métodos da classe mãe!

// Classe Mãe
class Bruxo {
    public $nome;
    
    public function lancarFeitico() {
        echo $this->nome . " lançou um feitiço básico!\n";
    }
}
 
// Classe Filha (Herdeira)
class Auror extends Bruxo {
    // Já tem o $nome e o lancarFeitico() aqui dentro escondidos!
    public $nivelDeForca;
}

🎭 2. Polimorfismo (Muitas Formas):

É a capacidade de uma classe filha alterar um método que ela herdou da classe mãe para fazer algo mais específico (especialização).

class Aluno extends Bruxo {
    // Reescrevendo o método da mãe!
    public function lancarFeitico() {
        echo $this->nome . " lançou o feitiço: Expecto Patronum! 🦌\n";
    }
}

4. 📖 Exemplo Guiado: A Escola de Hogwarts

Vamos criar a hierarquia de bruxos:

<?php
class Bruxo {
    public $nome;
 
    public function __construct($nome) {
        $this->nome = $nome;
    }
 
    public function acao() {
        echo $this->nome . " está estudando magia.\n";
    }
}
 
class Professor extends Bruxo {
    // Polimorfismo: Professor faz uma ação diferente de um bruxo comum
    public function acao() {
        echo $this->nome . " está ensinando Defesa Contra as Artes das Trevas.\n";
    }
}
 
$aluno = new Bruxo("Harry");
$prof = new Professor("Lupin");
 
$aluno->acao(); // Imprime: Harry está estudando magia.
$prof->acao();  // Imprime: Lupin está ensinando...
?>

5. 🛠️ Prática Obrigatória 1: Criando a Herança

  1. Dada a classe mãe Veiculo, escreva a linha de código que cria a classe filha Carro herdando de Veiculo.

6. 🛠️ Prática Obrigatória 2: Conceito

  1. Quando uma classe filha reescreve um método que herdou da classe mãe para dar a ele um comportamento diferente, qual conceito da POO estamos aplicando?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 11 PHP_HarryPotter) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_php_e_laravel/
├── capitulos/
│   └── capitulo_11_harry_potter.md

💡 Checkpoint de Lógica

Em PHP, uma classe só pode herdar de uma única classe mãe por vez! Não existe herança múltipla de classes no PHP.

10. 🔥 Desafio de Fixação

Pesquise o que faz a palavra-chave parent:: quando usada dentro de um método de uma classe filha.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

class Carro extends Veiculo {
}

Gabarito da Prática 2:

  1. Estamos aplicando o conceito de Polimorfismo (especificamente a sobrescrita de método).

Capitulo Anterior | Proximo Capitulo