Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvida na implementação

Não entendi a implementação da interface Pontuavel

A classe CalculadorPontuacao recebe uma instância da classe Pontuavel:

class CalculadorPontuacao
{
    public function recuperarPontuacao(Pontuavel $conteudo)
    {
        return $conteudo->recuperarPontuacao();
    }
}

A interface Pontuavel diz que quem a implementar, deve também implementar o método recuperarPontuacao:

interface Pontuavel
{
  public function recuperarPontuacao(): int;
}

Mas como as classes Curso e AluraMais efetivamente fazem uso da classe CalculadorPontuacao para retornar a pontuação?

Tentei fazer um teste aqui com uma instância da classe Curso mas não consegui retornar a pontuação por $curso->recuperarPontuacao()

Dá erro:

Fatal error: Uncaught Error: Interface 'Alura\Solid\Model\Pontuavel' not found in D:\OneDrive\web\xampp\cursos\alura\php\06-solid\src\Model\Curso.php:5 Stack trace: #0 D:\OneDrive\web\xampp\cursos\alura\php\06-solid\index.php(7): require_once() #1 {main} thrown in D:\OneDrive\web\xampp\cursos\alura\php\06-solid\src\Model\Curso.php on line 5
1 resposta
solução

Fala, Flavio.

A classe Curso e AluraMais não usam a CalculadorPontuacao. É exatamente o contrário.

A classe CalculadorPontuacao pode agora utilizar qualquer implementação de Pontuavel, incluindo Cursoe AluraMais. No futuro, podem existir outras implementações.

A classe CalculadorPontuacao poderia realizar log, armazenar o total pontuado no dia, etc. Por isso existe a classe separada que no nosso exemplo, só chama um método de alguma implementação de Pontuavel, mas ela está pronta para ser customizada, entede? Como eu falei no vídeo, nesse momento, a classe CalculadorPontuacao acabou se fazendo desnecessária. Sacou?

Quando ao seu erro, é bem claro: A interface Pontuavel não foi definida ainda no momento da execução desse arquivo. ;-)